Delphiでお手軽プログラミング

Delphiでお手軽プログラミングメニュー

TStringListクラスの使い方

uses System.Classes;


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;

Copyright 2021 Mam