T tatami Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-20 #2 TStream好像没有,要一行一行的读文本,可以用TStringList。
B bbkxjy Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-20 #3 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 等函数可以写入一行。
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 等函数可以写入一行。
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-20 #4 如果你想一次操作一行,可以用 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;
如果你想一次操作一行,可以用 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;
W wql Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-01 #5 来晚了,只有讲一下操作系统文件读行的原理了: 内存中开辟二个Buffer,Buf1, Buf2,打开文件读一个块到Buf1, 用串搜索算法找到<CR><LF>或找到<EOF>,遇到<EOF>结束算法。若找到,把开始 制针到目前位置之间的字节复制到Buf2中,Buf2中就是一行,若找不到,先把 Buf1完全复制到Buf2中,超过255个字节就当一行。没超过把剩余的复制到Buf2, 再从文件流中读一块到Buf1中,重复该算法。
来晚了,只有讲一下操作系统文件读行的原理了: 内存中开辟二个Buffer,Buf1, Buf2,打开文件读一个块到Buf1, 用串搜索算法找到<CR><LF>或找到<EOF>,遇到<EOF>结束算法。若找到,把开始 制针到目前位置之间的字节复制到Buf2中,Buf2中就是一行,若找不到,先把 Buf1完全复制到Buf2中,超过255个字节就当一行。没超过把剩余的复制到Buf2, 再从文件流中读一块到Buf1中,重复该算法。