电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> delphi技术>>搜索字符串在流中的位置:

搜索字符串在流中的位置

来源:远方网络 | 2005-12-31 9:49:00 | (有1902人读过)

(*//

标题:搜索字符串在流中的位置

说明:适用于文件搜索等

设计:Zswang

支持:wjhu111@21cn.com

日期:2004-03-21

//*)

(*//

设计思路:

从流中将数据取到缓冲中

再逐一对缓冲进行搜索

*)

function ScanStream(mStream: TStream; mStr: string): Integer;

const

cBufferSize = $8000;

var

S: string;

T: string;

I: Integer;

L: Integer;

begin

Result := -1;

if not Assigned(mStream) then Exit;

if mStr = '' then Exit;

L := Length(mStr);

mStream.Position := 0;

SetLength(S, cBufferSize);

T := '';

for I := 1 to mStream.Size div cBufferSize do begin

mStream.Read(S[1], cBufferSize);

Result := Pos(mStr, T + S) - 1; //保留上次搜索的尾部字符~~

T := Copy(S, cBufferSize - L, MaxInt);

if Result >= 0 then begin

Result := Result + Pred(I) * cBufferSize - Length(T);

Exit;

end;

end;

I := mStream.Size mod cBufferSize;

SetLength(S, I);

if I > 0 then begin

mStream.Read(S[1], I);

Result := Pos(mStr, T + S) - 1;

if Result >= 0 then begin

Result := Result + mStream.Size - I - Length(T);

Exit;

end;

end;

end; { ScanStream }

//Example

procedure TForm1.Button1Click(Sender: TObject);

var

vFileStream: TFileStream;

begin

vFileStream := TFileStream.Create('C:\temp\temp.exe', fmShareDenyNone);

try

Label1.Caption := IntToStr(ScanStream(vFileStream, Edit1.Text));

finally

vFileStream.Free;

end;

end;

delphi技术热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号