txt文件,记录有2w多条 其中每行数据有9个字段,但某些相同的列的数据不都是定长的,比如a1是8个字符长,可能a2就是10个字符长。字段之间通过tab键分开;
问题是我现在只需要取其中的3个字段 如 B ,G ,H .通过定长度用copy函数来取是肯定不行的,请问还有别的办法没?
记录情况如下排列:
A1 B1 C1 D1 E1 F1 G1 H1 I1
A2 B2 C2 D2 E2 F2 G2 H2 I2
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
A23000 B23000 C23000 D23000 E23000 F23000 G23000 H23000 I23000搞定马上结帖,先谢谢各位了。
问题是我现在只需要取其中的3个字段 如 B ,G ,H .通过定长度用copy函数来取是肯定不行的,请问还有别的办法没?
记录情况如下排列:
A1 B1 C1 D1 E1 F1 G1 H1 I1
A2 B2 C2 D2 E2 F2 G2 H2 I2
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
A23000 B23000 C23000 D23000 E23000 F23000 G23000 H23000 I23000搞定马上结帖,先谢谢各位了。
问题已经被我解决了:
具体方法是这样用一个字符串分割函数
function SplitString(const source,ch:string):tstringlist;
var
temp:string;
i:integer;
begin
result:=tstringlist.Create;
temp:=source;
i:=pos(ch,source);
while i<>0 do
begin
result.Add(copy(temp,0,i-1));
delete(temp,1,i);
i:=pos(ch,temp);
end;
result.Add(temp);
end;
调用:
s:=splitstring('要分割的字符串',#9);
s中存放的就是分割后的数据,要取哪个就取哪个,比如我要取B
则 B:=s.string[1];就可以了。后面还发现可以用这个函数直接点
{以下是 ExtractStrings声明原形:
function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar; Strings: TStrings):
Integer;
其中:
Separators表示分隔符
WhiteSpace表示你所要分割字符串中要忽略的字符集
Content就是你要操作的字符串
Strings就是存放结果的var
s:string;
l:TStrings;
begin
s:= 'aasdl#9ajkls#9dasfjakls#9';
l:=TStringList.Create;
ExtractStrings(['#9'],[],PChar(s),l);
////多种分隔符也可以,结果存在l中
end;