配列を&を付けて、一列につなげるには?

解決


のど飴  2009-11-03 11:38:17  No: 36068  IP: 192.*.*.*

配列を&を付けて、一列につなげるには?

sList.Add('一番目');
sList.Add('2番目');
sList.Add('参番目');

を、一番目&2番目&参番目にしたいのですが。
単に手動で、sString := '一番目&2番目&参番目';ではないです。

考えたのが、forループで、足していく。
そうすると、if文を使わないと、最初か最後に&がつきますよね?
最初か、最後の一文字を消せばいいんですが・・・。
もっと簡単な方法か、別の方法ってありますか?

PHPか、Perlでは配列を一発で連結する関数があった気がするんですが、Delphi6のヘルプ、コード支援機能で見ても、ないように感じるので。

知っていれば、簡単な事だと思うので、よろしくお願い致します。

編集 削除
にしの  2009-11-03 12:03:50  No: 36069  IP: 192.*.*.*

半角空白や'&'などを含んだときに'"'で括ってよいのであれば、

    sList.Delimiter := '&';
    Memo1.Text := sList.DelimitedText;

でできます。
sList.Add('A B');
sList.Add('C&D');
sList.Add('E"F');
の場合、
"A B"&"C&D"&"E""F"
となります。

編集 削除
monaa  2009-11-03 13:57:25  No: 36070  IP: 192.*.*.*

あくまでif文が面倒とかでなく処理的に遅くなるのが心配なら、
forループを今より-1して最後の処理だけループから外すのが最も早いです、
それ以前に、文字列をstr:=str1+str2で処理していったら当然こちらの方がネックになりますがね。

編集 削除
Quest  2009-11-03 16:10:46  No: 36071  IP: 192.*.*.*

にしのさんの方法に似ていますが、半角空白や&があっても
そのまま連結されます。(むしろ&は処理しないとまずいと思いますが)
改行文字を&に変換するだけですが、やはり最後に余計に1つ&が
付いてしまうので削除しています。
うーん、Delete(s, Length(s), 1)を使った方が分かりやすいかな?
あ、でもDeleteはfunctionじゃないなぁ。

s: string;
s := StringReplace(sList.Text, sList.LineBreak, '&', [rfReplaceAll]);
Memo1.Text := Copy(s, 1, Length(s)-1);

sListがこの場のみの使い捨てであれば

sList.LineBreak := '&';
s := sList.Text;
Memo1.Text := Copy(s, 1, Length(s)-1);

でもOKですね。

編集 削除
のど飴  2009-11-03 19:02:05  No: 36072  IP: 192.*.*.*

やはり、一発関数はないですか。
みなさまのアイディアを参考にして、いろいろと考えてみようと思います。

個人的には、monaaさんのが一番シンプルだなー、と思いました。
っていうか、これならあきらめなければ、思いつきましたね。^^
努力と発想力の瞬発力が足りない証拠です。

みなさん、ありがとうございました。

編集 削除