TStringListクラスの使い方 ~Delphiソースコード集
TStringListクラスを使うとテキストファイルを指定文字コードで読み込んだり保存したり改行コードを変えたり、連想配列として使用したり、CSVファイルを読み込んだり作成したりできます。
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;