首页 > 学院 > 开发设计 > 正文

搜索字符串在流中的位置

2019-11-18 18:24:38
字体:
来源:转载
供稿:网友
(*//标题:搜索字符串在流中的位置说明:适用于文件搜索等设计: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 }
//Exampleprocedure 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;

上一篇:流的压缩和解压

下一篇:使用IntraWeb进行Web编程

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
学习交流
热门图片

新闻热点

疑难解答

图片精选

网友关注