トップへ(mam-mam.net/)

TStringListクラスの使い方 ~Delphiソースコード集

検索:

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;