各位,我需要读取一个UNIX文本文件,
但是因为UNIX换行符和WINDOW下的不一样,所以总是把整个文件当成一行读取。我想一行一行的读出来,请大家帮帮我。谢谢
但是因为UNIX换行符和WINDOW下的不一样,所以总是把整个文件当成一行读取。我想一行一行的读出来,请大家帮帮我。谢谢
解决方案 »
- DELPHI编译时为什么出现这些信息,但是也不影响程序的编译呀????
- delphi的dcr文件又是干什么?delphi怎么这么多文件啊?
- 如何用Delphi将excel表转换成access?
- 自己用IdFtp控件写的ftp服务器端和TFTp控件写的客户端不能正常通信,求助
- 关于unit之间的调用问题
- 如何导出别的程序里DBGRID中的数据??
- 高分请教本机新建web站点,不能启动
- HTTP下载问题
- 本公司急招熟练使用DEPHI+SQL SERVER2000的程序员4名,专兼职均可
- 请问有没有delphi7可用的类似i7风格的tab控件?
- 求助fastreport按类别分页打印
- 如何在代码中动态设置在打印机的服务器属性中自定义的纸张大小?
请给两行代码,好吗?我初学DELPHI
RestStr: string = ''; // 记录上次读到的半行内容function ReadOneLine(FileHandle: Integer): string; // FileHandle是用FileOpen打开文件所返回的句柄
var
buf: array [0..1024] of char; // 分块读, 每次读1k
i, l: Integer;
begin
repeat
l := FileRead(FileHandle, buf, 1024);
if l > 0 then
begin
buf[l] := #0; // 末尾添加#0, 这样可以供delphi直接把Buf转换成string
for i := 0 to l - 1 do
if buf[i] = #10 then // 读到行尾了
begin
buf[i] := #0;
Result := RestStr+buf;
RestStr := pchar(@buf[i+1]); // 剩下的保存到RestStr中供下次读时拼成整行
if Result[Length(Result)] = #13 then // windows的换行符, 行数据中多读了一个#13, 需去掉
Result := copy(Result, 1, Length(Result)-1);
exit;
end
else RestStr := RestStr+buf;
end;
until l <= 0;
end;
RestStr: string = ''; // 记录上次读到的半行内容function ReadOneLine(FileHandle: Integer): string; // FileHandle是用FileOpen打开文件所返回的句柄
var
buf: array [0..1024] of char; // 分块读, 每次读1k
i, l: Integer;
begin
l := pos(#10, RestStr);
if l > 0 then
begin
result := copy(RestStr, 1, l-1);
delete(RestStr, 1, l);
exit;
end;
repeat
l := FileRead(FileHandle, buf, 1024);
if l > 0 then
begin
buf[l] := #0; // 末尾添加#0, 这样可以供delphi直接把Buf转换成string
for i := 0 to l - 1 do
if buf[i] = #10 then // 读到行尾了
begin
buf[i] := #0;
Result := RestStr+buf;
RestStr := pchar(@buf[i+1]); // 剩下的保存到RestStr中供下次读时拼成整行
if Result[Length(Result)] = #13 then // windows的换行符, 行数据中多读了一个#13, 需去掉
Result := copy(Result, 1, Length(Result)-1);
exit;
end
else RestStr := RestStr+buf;
end;
until l <= 0;
end;