配列型のデータをTString型へ入れるには?

解決


ファンタオレンジ  2003-06-09 19:50:15  No: 3733

以下のコードで、Memo1にapplearangegrapelemonと表示したいと思っています。しかし、このコードだとエラーが出ます。for文を使えば実現できるのですが、もっと簡単に一発でできないでしょうか。型変換とか関数とかで。

procedure TForm1.Button1Click(Sender: TObject);
var
    f : array[0..4] of String;
begin
    f[0] := 'apple';
    f[1] := 'orange';
    f[2] := 'grape';
    f[3] := 'lemon';

    Memo1.Lines.Add(f);
end;


にしの  2003-06-09 20:15:27  No: 3734

なさそうですね。
あったとしても、この程度ならやっぱりforなどのループでかかれると思います。
何度も出そうなコードであれば、

function StringFromArray(strings: array of String; separator: String): String;
var
  i: integer;
begin
  Result := '';
  for i := 0 to length(strings) - 1 do
  begin
    if i > 0 then Result := Result + separator;
    Result := Result + strings[i];
  end;
end;

こんな関数を用意しておけば、再利用できます。
ユニットに分けると整理しやすいです。


ファンタオレンジ  2003-06-10 00:28:28  No: 3735

にしのさん、どうもありがとうございます。
やはり、なさそうですか。残念です。
でも、関数を作っておいて利用すればいいんですね。
コードまで紹介していただき大変ありがたく思います。

ただ、恥ずかしながら、関数の使い方がよくわかりません。
2〜3時間ほど勉強し少しはわかったのですが、にしのさんに紹介していただいたコードを使いこなせません。一応、以下のあたりまで学習の結果辿り着いたのですが行き詰まってしまいました。

procedure TForm1.Button1Click(Sender: TObject);
function StringFromArray(strings: array of String; separator: String): String;
var
    i: integer;
begin
    Result := '';
    for i := 0 to length(strings) - 1 do
    begin
        if i > 0 then
            Result := Result + separator;
            Result := Result + strings[i];
    end;
end;

var
    f : array[0..3] of String;
    bun : string;
begin
    f[0] := 'apple';
    f[1] := 'orange';
    f[2] := 'grape';
    f[3] := 'lemon';

    bun := StringFromArray(f,?);
    Memo1.Lines.Add(bun);
end;

そこで再度質問なのですが、separatorは何を意味するのでしょうか?
これがどうしてもわかりません。ご教授願いたく思います。


にしの  2003-06-10 00:35:56  No: 3736

単純につけるだけではないかもしれないので、区切り文字列としてseparator引数があります。

StringFromArray(f, ':');
とすれば、
apple:orange:grape:lemon
となります。
いらなければ、
StringFromArray(f, '');
とすれば、
appleorangegrapelemon
となります。

使わないようでしたら、引数を消して作り直してもらってもOKですよ。単なる例ですから。


ファンタオレンジ  2003-06-10 01:11:13  No: 3737

separatorとはそういうことでしたか。
これは必ず役立ちそうですね。是非覚えておきたいと思います。
親切にご指導していただきどうもありがとうございました。
これからもどうぞよろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加