テキストファイル内の改行コード除去方法

解決


XAX  2004-09-23 23:38:58  No: 11053  IP: [192.*.*.*]

BlockReadで、テキストファイルから指定バイト数読み込む処理をしています。
テキストファイル内の改行コードの有無を問わず、汎用的な処理をするために
ファイル内の改行コードをあらかじめ除去し、上書きし、それを読み込む方法が最適かと考えています。

WindowsなのでLF+CRであることはわかっているのですが、
このコードを除去する方法をどなたかご存じないでしょうか?

編集    削除
jok  2004-09-24 02:19:45  No: 11054  IP: [192.*.*.*]

TStringList に読み込むと自動的に改行で区切られます。ですから改行コードを
除去するには、その文字部分だけをコピーしていけばいいです。

procedure TForm1.Button1Click(Sender: TObject);
var
  SL:TStringList;
  MS:TMemoryStream;
  i:integer;
begin
  SL := TStringList.Create;
  MS := TMemoryStream.Create;
  try
    SL.LoadFromFile('c:\test.txt');
    MS.SetSize(Length(SL.Text));
    for i := 0 to SL.Count-1 do
      MS.Write(PChar(SL[i])^,Length(SL[i]));
    MS.SetSize(MS.Position);  // サイズを調整する
    MS.SaveToFile('c:\test.txt');
  finally
    SL.Free;
    MS.Free;
  end;
end;

編集    削除
LupinⅢ  URL  2004-09-24 21:56:53  No: 11055  IP: [192.*.*.*]

StringReplace関数を使用して#13#10を''にするというのはどうでしょうか

編集    削除
jok  2004-09-25 00:51:49  No: 11056  IP: [192.*.*.*]

>StringReplace関数を使用して#13#10を''にするというのはどうでしょうか

procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
begin
  s := 'ABC'+#13#10+'123';
  StringReplace(s,#13#10,'',[rfReplaceAll]);
  Memo1.Text := s;
end;

わたしのところではうまくいきません。

編集    削除
jok  2004-09-25 00:58:24  No: 11057  IP: [192.*.*.*]

間違えました(汗

うまくいきます。

procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
begin
  s := 'ABC'+#13#10+'123';
  Memo1.Text := StringReplace(s,#13#10,'',[rfReplaceAll]);
end;

編集    削除
XAX  2004-09-29 02:58:17  No: 11058  IP: [192.*.*.*]

jokさん、LupinⅢさん、ありがとうございました。
どちらでもうまくいきました!

編集    削除