DelphiのTStringListの使い方|CSV処理・改行コード・保存・読み込みの基本
このページでは、DelphiのTStringListの基本的な使い方について紹介しています。
文字列の追加・削除、CSV形式の処理、改行コードの扱い、ファイルへの保存・読み込み(LoadFromFile / SaveToFile)など、実用的なコード例を交えて解説しています。
Delphiで文字列リストを扱う際の参考にどうぞ。
TStringListでテキストファイルを作成する
Button1をクリックしたときにTStringListのインスタンスを作成し、2行のテキストをいれて、 UTF-8 BOM無しで、改行\r\nでテキストファイルとして保存する。
procedure TForm1.Button1Click(Sender: TObject);
var stl:TStringList;
path:String;
begin
//コンパイルして生成された実行ファイルのファイル名迄のパスを取得する
path:=ExtractFilePath(Application.ExeName);
//TStringListクラスのインスタンスを作成する
stl:=TStringList.Create;
try
stl.Add('1行目の文字列');
stl.Add('2行目の文字列');
stl[0]:='1行目の文字列を変更する';
//BOM無しに設定する
stl.WriteBOM:=False;
//改行コードを\r\nにする
stl.LineBreak:=#13#10;
//UTF8(BOM無)テキストファイル「test.txt」に保存する
stl.SaveToFile(path + 'test.txt',TEncoding.UTF8);
finally
//インスタンスを破棄する
stl.Free;
end;
end;
TStringListでテキストファイルの文字コードを変換する
Button2をクリックしたときにTStringListのインスタンスを作成し、
「C:\test\sjis.txt」ファイルをShift-JISとして読み込み、
EUC-JPで改行コード\nで「'C:\test\eucjp.txt'」ファイルとして保存する。
procedure TForm1.Button2Click(Sender: TObject);
var stl:TStringList;
eucjp:TEncoding;
const FromFile:String='C:\test\sjis.txt';
ToFile:String='C:\test\eucjp.txt';
begin
//TStringListクラスのインスタンスを作成する
stl:=TStringList.Create;
//コードページ20932(EUC-JP)の取得
eucjp:=TEncoding.GetEncoding(20932);
try
stl.LoadFromFile(FromFile,TEncoding.ANSI);
//改行コードを\nに設定する
stl.LineBreak:=#10;
//文字コードEUC-JPで保存する
stl.SaveToFile(ToFile,eucjp);
finally
//インスタンスを破棄する
stl.free;
eucjp.Free;
end;
end;
TStringListを連想配列として使用する
Button3をクリックしたときにTStringListのインスタンスを作成し、
キー = 値 を追加してキーから値を取り出す。
procedure TForm1.Button3Click(Sender: TObject);
var stl:TStringList;
begin
//TStringListクラスのインスタンスを作成する
stl:=TStringList.Create;
try
stl.Add('キー=値');
stl.Add('key=value');
stl.Add('a=1');
stl.Add('b=2');
stl.Add('c=3');
//以下は「1」が表示される
showmessage(stl.Values['a']);
//以下は「値」が表示される
showmessage(stl.Values['キー']);
finally
//インスタンスを破棄する
stl.free;
end;
end;
TStringListでCSVファイルを読み取る
Button4をクリックしたときにTStringListのインスタンスを2つ作成し、
c:\test\test.csv ファイルの読み込んで、各行列の値をMemo1に出力する。
procedure TForm1.Button4Click(Sender: TObject);
var sl:TStringList; //CSVファイルの読み込み用
slLine:TStringList; //1行ずつ区切り文字分割用
r,c:Integer;
begin
sl:=TStringList.Create;
slLine:=TStringList.Create;
try
//引用符文字(")の指定
slLine.QuoteChar:='"';
//区切り文字(,)の指定
slLine.Delimiter:=',';
//指定した区切り文字だけを使用するように設定
slLine.StrictDelimiter:=True;
//CSVファイル c:\test\test.csv ファイルの読み込み
sl.LoadFromFile('c:\test\test.csv');
for r := 0 to sl.Count-1 do
begin
//1行ずつ処理する
slLine.DelimitedText:=sl[r];
for c := 0 to slLine.Count-1 do
begin
//r行のc列の値を出力
Memo1.Lines.Add(
Format('%d行%d列:%s',[r,c,slLine[c]])
);
end;
end;
finally
sl.Free;
slLine.Free;
end;
end;
TStringListでCSVファイルを作成する
Button5をクリックしたときにTStringListのインスタンスを作成し、文字コードUTF-8でBOM付の「test.csv」ファイルを作成します。
この形式のファイルはダブルクリックしてマイクロソフト社Excelで開いても文字化けしません。
procedure TForm1.Button5Click(Sender: TObject);
var stl:TStringList;
begin
//TStringListクラスのインスタンスを作成する
stl:=TStringList.Create;
try
//行を追加する
stl.Add('物品番号,物品名,価格');
stl.Add('1,カメラ,2000');
stl.Add('2,テレビ,50000');
stl.Add('3,エアコン,120000');
stl.Add('4,時計,1000');
stl.Add('5,電話,30000');
//BOM付に設定
stl.WriteBOM:=True;
//文字コードUTF-8でCSVファイルを保存する
stl.SaveToFile('test.csv',TEncoding.UTF8);
finally
//インスタンスを破棄する
stl.Free;
end;
end;
