[テキストファイルを一括で読み書きする]

テキストファイル全体を読んで、別のテキストファイルに書き出します。

下記の3つの方法を示します。
 ・FileStreamでReadBufferとWriteBufferを使用
 ・FileStreamでReadとWriteを使用
 ・StringListでLoadFromFileとSaveToFileを使用


(1)FileStreamでReadBufferとWriteBufferを使用

【ソースコード】 [tips0050_1.pas]
program tips0050_1;
{$APPTYPE CONSOLE}
uses SysUtils, Classes, MMSystem;
var
  SF,DF:TFileStream;
  buf:PChar;
  sz:integer;
  tm:int64;
begin   
  tm:=timeGettime;
  WriteLn('◆FileStreamでReadBufferとWriteBufferを使用');

  SF:=TFileStream.Create('tips0050_1_input.txt',fmOpenRead);
  sz:=SF.Size;
  WriteLn('入力サイズ:',inttostr(SF.Size),'バイト');
  GetMem(buf,sz+1);
  SF.ReadBuffer(buf^,sz);
  buf[sz]:=#0;
  SF.Free;

  DF:=TFileStream.Create('tips0050_1_output.txt',fmCreate);
  DF.WriteBuffer(buf^,sz);
  WriteLn('出力サイズ:',inttostr(DF.Size),'バイト');
  FreeMem(buf);
  DF.Free;
  WriteLn('処理時間:',inttostr(timeGettime-tm),'ms');
end.

【コンパイル&実行】 [tips0050_1.bat]
dcc32 tips0050_1.pas 
tips0050_1.exe  > tips0050_1.txt
pause
【入力】 [tips0050_1_input.txt]
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
【出力】 [tips0050_1_output.txt]
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
【実行結果】 [tips0050_1.txt]
◆FileStreamでReadBufferとWriteBufferを使用
入力サイズ:505バイト
出力サイズ:505バイト
処理時間:3ms
(2)FileStreamでReadとWriteを使用 【ソースコード】 [tips0050_2.pas]
program tips0050_2;
{$APPTYPE CONSOLE}
uses SysUtils, Classes, MMSystem;
var
  SF,DF:TFileStream;
  buf:PByte;
  tm,sz:int64;
begin //FileStream Read Write
  tm:=timeGettime;
  WriteLn('◆FileStreamでReadとWriteを使用');
  SF:=TFileStream.Create('tips0050_2_input.txt',fmOpenRead);
  WriteLn('入力サイズ:',inttostr(SF.Size),'バイト');
  sz:=SF.Size;
  getmem(buf,sz);
  SF.Read(buf^,sz);
  SF.Free;
  DF:=TFileStream.Create('tips0050_2_output.txt',fmCreate);
  DF.Write(buf^,sz);
  WriteLn('出力サイズ:',inttostr(DF.Size),'バイト');
  DF.Free;
  freemem(buf);
  WriteLn('処理時間:',inttostr(timeGettime-tm),'ms');
end.

【コンパイル&実行】 [tips0050_2.bat]
dcc32 tips0050_2.pas 
tips0050_2.exe  > tips0050_2.txt
pause
【入力】 [tips0050_2_input.txt]
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
【出力】 [tips0050_2_output.txt]
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
【実行結果】 [tips0050_2.txt]
◆FileStreamでReadとWriteを使用
入力サイズ:505バイト
出力サイズ:505バイト
処理時間:4ms
(3)StringListでLoadFromFileとSaveToFileを使用 【ソースコード】 [tips0050_3.pas]
program tips0050_3;
{$APPTYPE CONSOLE}
uses SysUtils, Classes, MMSystem;
var
  LS : TStringList;
  tm: Int64;
begin
  tm:=timeGettime;
  WriteLn('◆StringListでLoadFromFileとSaveToFileを使用');
  LS := TStringList.Create;
  LS.LoadFromFile('tips0050_3_input.txt');
  WriteLn('入力件数:',inttostr(LS.count),'レコード');
  LS.SaveToFile('tips0050_3_output.txt');
  WriteLn('出力件数:',inttostr(LS.count),'レコード');
  LS.Free;
  WriteLn('処理時間:',inttostr(timeGettime-tm),'ms');
end.
【コンパイル&実行】 [tips0050_3.bat]
dcc32 tips0050_3.pas 
tips0050_3.exe  > tips0050_3.txt
pause
【入力】 [tips0050_3_input.txt]
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
【出力】 [tips0050_3_output.txt]
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
【実行結果】 [tips0050_3.txt]
◆StringListでLoadFromFileとSaveToFileを使用
入力件数:5レコード
出力件数:5レコード
処理時間:5ms