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

解決


のど飴  2009-11-03 20:38:17  No: 36068

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

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

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

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

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

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


にしの  2009-11-03 21:03:50  No: 36069

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

    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 22:57:25  No: 36070

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


Quest  2009-11-04 01:10:46  No: 36071

にしのさんの方法に似ていますが、半角空白や&があっても
そのまま連結されます。(むしろ&は処理しないとまずいと思いますが)
改行文字を&に変換するだけですが、やはり最後に余計に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-04 04:02:05  No: 36072

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

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

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


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

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






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