Delphiでのテキストファイルの読み込みについて
Delphiでテキストファイルの読み込み方法は色々あるが、一長一短なので、場合によって使い分ける。
TStreamReaderかTFileを使うのが普通だと思うが、ロックされたファイルの読込ができないという問題がある。
TStreamReader | TFile | AssignFile | |
---|---|---|---|
ロックされたファイルの読込 | × | × | ○ |
全文読込 | ○ | ○ | × |
一行毎読込 | ○ | × | ○ |
文字コード対応 | △ | △ | △ |
はじめから読み直し(Reset) | × | × | ○ |
- 改行コードはすべてCRLF,LFに対応している
- TStringList.LoadFromFile()はTFileとほぼ同じ
エンコードについて
TStreamReader | TFile | AssignFile | |
---|---|---|---|
Ascii | ○ | ○ | ○ |
SJIS | △ | ○ | ○ |
UTF-8(BOMなし) | ○ | △ | × |
UTF-8(BOMあり) | ○ | ○ | × |
- ○は文字コードの指定なしで読み込める
- △は文字コードの指定なしでは読み込めないが、指定すれば読み込める
TStreamReader使用例
try
sr := TStreamReader.Create(filename);
str := sr.ReadToEnd(); //全文string読込(ここでも文字コードの例外が飛ぶ可能性あり)
while not sr.EndOfStream do //(ここでも文字コードの例外が飛ぶ可能性あり)
begin
line := sr.ReadLine; //一行読込
end;
except
on e: Exception do
begin
ShowMessage('ERROR:' + e.Message);
exit;
end;
end;
sr.Free();
sl := TStringList.Create();
sl.Text := str; //全文TStringList読込はないのでstringを代入
TFile使用例
try
str := TFile.ReadAllText(filename); //全文string読込
sa := TFile.ReadAllLines(filename); //全文TStringDynArray読込
except
on e: Exception do
begin
ShowMessage('ERROR:' + e.Message);
exit;
end;
end;
AssignFile使用例
AssignFile(f, filename);
try
Reset(f);
except
on e: Exception do
begin
ShowMessage('ERROR:' + e.Message);
exit;
end;
end;
while not Eof(f) do
begin
ReadLn(f, line); //一行読込
end;
CloseFile(f); // Resetで例外が飛んでもその後の処理を行う場合は、
// CloseFileでも例外が飛ぶので、tryでくくる必要があるので注意
Author And Source
この問題について(Delphiでのテキストファイルの読み込みについて), 我々は、より多くの情報をここで見つけました https://qiita.com/xa_member/items/3f4dad8e5b59b157ab77著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .