TStream中有没有能实现以前读文本文件的Read/Readln的操作(200分)

  • 主题发起人 主题发起人 mace
  • 开始时间 开始时间
TStream好像没有,要一行一行的读文本,可以用TStringList。
 
TStream 只对字节流读写,不管这些字节的含义的,你可以用 TextFile 类型的文件格式
读写文本文件,下面是 AssignFile 函数帮助中的例子:
var
; F: TextFile;
; s: string;
begin
; if OpenDialog1.Execute then ;//选择文件
; begin
; ; AssignFile(F, OpenDialog1.FileName); ;//将 F 变量与指定文件关联
; ; Reset(F); ; ; ; ; ; //打开文件
; ; Readln(F, s); ; ; ; //读出第一行
; ; Edit1.Text := s;
; ; CloseFile(F); ; ; ; //关闭文件
; end;
end;
还有 ReWrite,Writeln 等函数可以写入一行。
 
如果你想一次操作一行,可以用 TStringList
读入文件后就自动按照里面的回车换行分好行了:
var
; s: TStringList;
; ss: string;
begin
; s := TStringList.Create;
; s.LoadFromFile('abc.txt');
; ss := s.Strings[0];
; showmessage('这就是第1行:' + #13#10 + ss);
; s.Free;
end;
 
来晚了,只有讲一下操作系统文件读行的原理了:

内存中开辟二个Buffer,Buf1, Buf2,打开文件读一个块到Buf1,

用串搜索算法找到<CR><LF>或找到<EOF>,遇到<EOF>结束算法。若找到,把开始

制针到目前位置之间的字节复制到Buf2中,Buf2中就是一行,若找不到,先把

Buf1完全复制到Buf2中,超过255个字节就当一行。没超过把剩余的复制到Buf2,

再从文件流中读一块到Buf1中,重复该算法。
 
接受答案了.
 
后退
顶部