从一个TXT文件里读出指定字符用什么方法最快?(50分)

  • 主题发起人 主题发起人 freestyle_0_0
  • 开始时间 开始时间
F

freestyle_0_0

Unregistered / Unconfirmed
GUEST, unregistred user!
请问一下,用什么方法能够很快的从TXT文件中,找到指定字符串如“ABC”,然后将其和后面指定长度的字符串读取出来?
 
用TStringList就很快.
 
还有其他更好的办法吗?能否也提供例子。
注:会有多个指定的字符串,并可能会重复出现。
例如:abc123456efg45886abc9999 ,我想拷贝abc后面的数字,efg后面的数字(数字不一定等长)分别放到不同的数据组里。有没有准确,又快的方法?
 
OpenFile,Read,Pos.....
 
直接用 Pos 方法就可以,或者自己编个例程(测试过了,给分啊):
{
运行后,StrX中的字符串为各“键”名(如ABC;EFG等),Objects为一TList对象,包含各个数值(仅考虑为整数)
}
function IsStdChar(ch: char): Boolean;
var
Tmp: Integer;
begin
Tmp:= Ord(ch);
Result:= ((Tmp >= Ord('A')) and (Tmp <= Ord('Z'))) or
((Tmp >= Ord('a')) and (Tmp <= Ord('z')));
end;
function IsNumChar(ch: char): Boolean;
begin
Result:= ch in ['0'..'9'];
end;
procedure PeekValues(const FileName: String; StrX: TStrings);
var
N, X, L, State: Integer;
S: String;
Pr, Pr1: PChar;
aList: TList;
begin
StrX.LoadFromFile(FileName);
S:= StrX.Text;
StrX.Clear;
Pr:= PChar(S);
State:= 0;
Pr1:= Pr;
while Pr^ <> #0 do begin
case State of
0: if IsStdChar(Pr^) then begin
Pr1:= Pr;
State:= 1;
end;
1: if not IsStdChar(Pr^) then begin
State:= 0;
if IsNumChar(Pr^) then begin
Val(Pr, X, L);
if L <> 0 then Dec(L) else L:= StrLen(Pr);
Pr^:= #0;
N:= StrX.IndexOf(Pr1);
if N >= 0 then
aList:= TList(StrX.Objects[N])
else begin
aList:= TList.Create;
StrX.AddObject(Pr1, aList);
end;
aList.Add(Pointer(X));
Inc(Pr, L);
Continue;
end;
end;
end;//case
Inc(Pr);
end;
end;
 
用FastString(好像是这名),里面的关键函数都是用汇编写的,速度非常快.
用法也跟通常的差不多,无非POS定位才操作之类的.
 
可以参考一下:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2452444
 
就用BlockRead,Pos,等函数速度应该不错了.
 
呵呵,接收答案了
 

Similar threads

回复
0
查看
1K
不得闲
回复
0
查看
891
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部