テキストファイル全体を読んで、別のテキストファイルに書き出します。
下記の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
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