注册 登录
编程论坛 Delphi论坛

请教,关于文本内容提取!

pacocai 发布于 2007-03-15 13:56, 896 次点击
文本内容:

STA004588765510 表示通配 000044443
请输入通配STA004333365510 通配件输入 01114467
配号通配STA004333365510 配件 66657777

请问我现在用Text以行的方式读入以上文本内容,但是我怎样提取STA***********及通配后的8位数字呢?

我现在已经实现了提取STA***********的代码了,但是具体怎样提取后面的8位数字,还请各位指教。
注:代码的长度都是固定的,STA*****带数字是15位,后面的是8位。

我的提取STA*******的方法如下:
var
TextFileVar:TextFile;
T,S:integer;
i,Z:string;
begin
if OpenDialog1.Execute then
begin
Memo1.Lines.Clear;
AssignFile(TextFileVar,OpenDialog1.FileName);
Reset(TextFileVar);
try
While Not Eof(TextFileVar) do
begin
Readln(TextFileVar,i);
T:=pos('S',i);
if T>0 then
begin
for S:=T to T+15 do
begin
Z:=Z+i[S];
end;
Memo1.Lines.Add(Z);
Z:='';
end;
end;
finally
CloseFile(TextFileVar);
end;
end;
end;

[此贴子已经被作者于2007-3-15 16:54:20编辑过]

8 回复
#2
fuliping2007-03-15 15:01
不好意思~~我进来踩一踩才发现自己火星鸟~~
本来看题目以为自己会的,一进来才发现自己实在是菜得可以!~~~
#3
stars_chen2007-03-15 16:23

vStr := 'STA***********';
vStr := Copy(vStr, 8, 8);

#4
pacocai2007-03-15 16:53
stars_chen 好像直接用COPY函数不好弄吧?因为位置都不固定的,有可能会是在STA这个字符串的后10位,而且中间的字符空格可能是2个,所以如果直接提取的话可能用COPY不太好弄,如果第一个字符串用COPY来提取应该会比我的方法简单和效果会高很多,这个是真的。看样子我要考虑重新换一下代码。
#5
pacocai2007-03-15 16:57
以下是引用fuliping在2007-3-15 15:01:09的发言:
不好意思~~我进来踩一踩才发现自己火星鸟~~
本来看题目以为自己会的,一进来才发现自己实在是菜得可以!~~~

大家都是学习的嘛,我以前是学ASP的,这段时间刚刚开始学DELPHI的…………不过感觉DELPHI入门还算比较容易,不过我以前有学过PASCAL,我二级证就是用PASCAL过的,而且个人感觉PASCAL比较严谨一些,最少比C和BASIC好,C经常指针会崩溃,BASIC的话…………这个没什么可比性,不说也罢……

#6
volte2007-03-17 16:33
STA*********代码你可以了,我就不说了
说一下你的取后面的通配数字获取吧!

可以试一下

Copy(vStr, Length(i) - 8, Length(i));
#7
pacocai2007-03-17 18:04
我知道你的意思,你是说直接从后部向前截取,问题就在于不知道后半部份是否是数字,如果后面的数字不在后8位呢?

配号通配STA004333365510 配件 66657777 今天配送,单号003

现在只知道两个东东,就是第一条的字符串是一个15位数的字符串,然后第二个是一个连续数字的字符串,并且除了第一个字符串外就是第二个串的字符中是连续数字,我现在正在考虑是否能用ASCII来对这8位数进行对比,如果是连续数字超过4位数的就截取(在这里所有的字符串中没有超过4位连续数字的字符串,除了第一条代码和后面的这8位数字。)目前只有一个想法就是在第一条字符串截取以后先用DELTREE的涵数把前面代码全删除掉,然后再用字符数组的方式进行对比。

不过具体的语句我还没写,我个人感觉这样弄起来的话太繁琐了,如果可以有更好的方法就好了。还请大家帮忙啊,谢谢了。
#8
volte2007-03-18 11:05

其实就是一个找规律的问题!
你看你提问题时候,我对照你一开始的问题是这样想的。
所以问问题时候,不要让别人产生误解!
白白浪费别人的时间!

如果是那样的话,只有靠数字是第二个连续数字的规律话,那就只能用ASCII来判断(根据以往的经验)。

另外我看到的就是空格符这个规律,(你也考虑这个规律,都是第二个空格后面的数字)
不知道你提的问题又有没有变化!
千变万变也来不及楼主对题目进行叙述的不准确!

#9
pacocai2007-03-18 23:03
恩,不好意思,在当问的时候确实没有考虑到这么多,先对版主说声对不起。我观查了这几天到我这的表,应该只能按ASCII来判断,不过现在倒有一个比较好的方法,看了整个月的表上的数据,发现在第一个字串:STA*****,后面虽然中间的字符不确定,不过有一点那就是一般不会存在数字,现在我只要把第一段提出来以后把前半段DELTREE掉,然后再就直接做字符串启遍历,对比第一个出现数字的地方就直接截取8位就可以了,希望以后的表的格式不要变了。再次感谢版主及各位论坛的朋友。
1