如何在文件中寻找特定字符的位置?

taste品味 2008-12-23 01:17:29
FileStream :TFileStream;
aa.DAT文件,假设其中含有特征码:TZ001。
已经将aa.DAT加载到不FileStream中,如何在FileStream中查找这个特征码人位置呢?
谢谢!
...全文
77 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
taste品味 2008-12-27
  • 打赏
  • 举报
回复
不过我的方法不能还没有解决问题,正在寻找方法呢 有兴趣一起讨论讨论!
日总是我哥 2008-12-25
  • 打赏
  • 举报
回复

你说的bug我复贴后回过头再看发现了,很高兴你能自己动手解决问题
taste品味 2008-12-25
  • 打赏
  • 举报
回复
首先谢谢CoolSlob.
你的思路是正确的,但是程序还有点不错误。你每次都读5个,读一次的时候已经指向5,即FileStream.Position = 5,第二次循环则从5开始,因为特征码是随机存储的,也就是位置不确定,所以最后得不到正确的答案。

已定义:SpecialCode: Array[0..4] of Char;


var
buf :Char;
TempBuf: Array[0..4] of Char;

FillChar(TempBuf, SizeOf(TempBuf), #0);
while FileStream.Position < FileStream.Size do
begin
FileStream.Read(Buf, 1);
if i > 4 then
begin
i := 0;
if Buf <> '' then
TempBuf[i] := Buf;
end
else begin
if Buf <> '' then
TempBuf[i] := Buf;
end;
Inc(i);

if Trim(StrPas(TempBuf)) = Trim(StrPas(SpecialCode)) then
begin
iPosition := FileStream.Position;
Flag := True;
Temp := '';
Break;
end;
end;
panrongzeng 2008-12-23
  • 打赏
  • 举报
回复
楼上这个方法不错哦。
比用Stream来操作更好
日总是我哥 2008-12-23
  • 打赏
  • 举报
回复
大概是这样

var
Buf: array[0..4] of Char;
begin
while fs.Position < fs.Size do
begin
fs.Read(@Buf[0], 5)
if (SameText(StrPas(Buf), 'TZ001') then
begin
ShowMessageFmt('在:%d', [fs.Position]);
Break;
end;
end;
end;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧