各位,我需要读取一个UNIX文本文件,
但是因为UNIX换行符和WINDOW下的不一样,所以总是把整个文件当成一行读取。我想一行一行的读出来,请大家帮帮我。谢谢
但是因为UNIX换行符和WINDOW下的不一样,所以总是把整个文件当成一行读取。我想一行一行的读出来,请大家帮帮我。谢谢
解决方案 »
- 判断语句 输入正确还是弹出来message信息
- ClientDataSet中 ,除了Post可以触发OnCalcFields事件外,Edit与first同样也会触发该事件么??
- 如何让dbgrid总是有一行空白的行? 用于方便操作,用户不必按"方向键下"就可以操作一条新的记录 。谁能想出最简单的实现方法
- 请问如何放出一个动画来?
- 紧急求助帮忙!关于ClientDataSet和DataSetProvider的。
- 点击dbgrid控件的控件头上的一个字段将触发什么事件?
- TADOQuery怎样插入数据到SQLServer2000?
- 在delphi如何定义循环队列 ?
- 老问题delphi系统程序,请高手参与
- 关于程序启动时增加登录窗口的问题
- 求助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;