人気ブログランキング | 話題のタグを見る

[Delphi] テキストファイルを処理する二つの方法

どーもボキです。

テキストファイルの処理には、大きく分けて二つの処理方法がある。
それらの実装方法とともに、それぞれのメリット・デメリットについても紹介する。

方法1 : TStringList を利用する
var
slst : TStringList;
i : Integer;
s : String;
begin
slst := TStringList.Create;
slst.LoadFormFile('処理するファイルパス');

for i := 0 to slst.Count -1 do begin
s := slst[i];
{sの処理}
end;

slst.Free;
end;


方法2 : TextFile型 を利用する
var
tf : TextFile;
s : String;
begin
AssignFile(tf, '処理するファイルパス');
Reset(tf);

while not Eof(tf) do begin
Readln(tf, s);
{sの処理}
end;

CloseFile(tf);
end;


方法1 メリットとデメリット
 ○ 簡単にファイル行数を取得できる (slst.Count)
 ○ ファイルが存在しなくても、エラーにならない (slst.Count = 0 となるだけ)
 ○ 処理するテキストファイルの全内容をメモリに格納できるため、内容の保持が必要な処理に向いている
 × 処理するテキストファイルを全内容をメモリに確保するため、大容量なファイルの処理には向いていない
 × テキストファイル内にヌル文字(#0)がある場合、そこまでしか読み込めない

方法2 メリットとデメリット
 ○ 処理するテキストファイルはReadLnで行毎に読み込むので、大容量なファイルの処理に向いている
  (ReadLnで読み込まれるファイル情報は、一行(改行コードの直前まで)しか読み込まない)
 ○ テキストファイル内にヌル文字(#0)があっても、ReadLnで改行コードまで取り出せる
 × EOF(tf)まで処理しないと、行数が分からない
 × ファイルが存在しない場合、I/Oエラーが発生する
 × ReadLn毎にしか情報を取り出せないため、テキストファイル全体をメモリに格納するには工夫が必要


こんな感じかな。ボキが良く使うのは、方法1。
だって、ほとんどの処理が方法1でどうにかなるからね。

方法2を使うときは、大容量(数100MB~)のテキストファイルの処理か、
ありえない仕様のテキストファイルを処理するときくらいかねぇ。
by yozda | 2009-06-22 18:56 | プログラミング | Comments(0)