6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Delphi】文字列とファイルと複数行文字列 [小ネタ]

Last updated at Posted at 2023-06-06

はじめに

文字列とファイルと複数行文字列についての小ネタです。

文字列とファイルと複数行文字列

複雑な処理を伴わない時に、変数の内容をファイルに書き出したり、その逆をやりたい場合の Tips です。

■ 文字列型変数の内容をファイルにしてセーブする

String 型変数の中身をファイルに保存するには TFile.WriteAllText() を使うのが簡単です。次の例は Hello.txtHello, world. を UTF-8 で保存します。

uses
  .., System.IOUtils;

  ...
  var s := 'Hello, world.';
  TFile.WriteAllText('Hello.txt', s, TEncoding.UTF8);

2 番目のパラメータは値パラメータなので、文字列リテラルでも構いません。

■ ファイルの内容を文字列型変数にロードする

逆にファイルの内容を String 型変数に読み込むには TFile.ReadAllText() を使います。

uses
  .., System.IOUtils;

  ...
  var s := TFile.ReadAllText('Hello.txt', TEncoding.UTF8);

■ バイナリファイルは?

WriteAllBytes() / ReadAllBytes() を使います。Buf は TBytes 型です。

uses
  .., System.IOUtils;

  ...
  var Buf := TEncoding.UTF8.GetBytes('Hello, world.');
  TFile.WriteAllBytes('Hello.bin', Buf);
uses
  .., System.IOUtils;

  ...
  var Buf := TFile.ReadAllBytes('Hello.bin');

■ 複数行文字列

複数行文字列を構成するのに最もシンプルなのは、文字列リテラルで記述する方法です。


  var s := 'Hello,' + sLineBreak +
           ' world.';
  ShowMessage(s);

TStringList と無名メソッドを使った複数行文字列です。ファイルの読み書きを伴うなら TStringList だけでいいかも。

  var s := (function: string
            begin
              with TStringList.Create do
                begin
                  Add('Hello,');
                  Add(' world.');
                  result := Text;
                  Free;
                end;
            end)();
  ShowMessage(s);

TStringBuilder を使った複数行文字列です。メソッドチェーンで複数行文字列を構築できます。

  var sb := TStringBuilder.Create.
              AppendLine('Hello,').
              AppendLine(' world.');
  ShowMessage(sb.ToString);
  sb.Free;

TStringHelper と動的配列を使った複数行文字列です。

  var s := string.Join(sLineBreak,
                      ['Hello,',
                       ' world.']);
  ShowMessage(s);

複数行文字列はファイル出力用だけでなく、TLabel にセットする複数行ラベルを生成するのにも使えます。

■ 真の複数行文字列

Delphi 12 以降だと 3 重引用符を使った複数行文字列が使えます。

uses
  .., System.IOUtils;

  ...
  var s := '''
  Hello, 
  world.
  ''';
  TFile.WriteAllText('Hello.txt', s, TEncoding.UTF8);

インデント位置は開始 3 重引用符のある行の先頭になります (例では v の位置)。SQL 文を書くのが簡単になりますね。

おわりに

ちょっとしたファイルの読み書きが必要な事があるんですよね。

  • 無名メソッドは Delphi 2009 以降で使えます
  • TStringBuilder は Delphi 2009 以降で使えます
  • System.IOUtils は Delphi 2010 以降で使えます
  • TStringHelper は Delphi XE3 以降で使えます
  • 配列定数式 は Delphi XE7 以降で使えます
  • インライン変数宣言と型推論 は Delphi 10.3 Rio 以降で使えます
  • 複数行文字列は Delphi 12 以降で使えます
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?