科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件搜索字符串在流中的位置

搜索字符串在流中的位置

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文讲解实现搜索字符串在流中的位置的技巧

作者:Zswang 来源:网络 2007年9月15日

关键字: 搜索 字符串 位置 软件

  • 评论
  • 分享微博
  • 分享邮件

(*//

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

说明:适用于文件搜索等

设计: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;

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章