セミコロン「;」で区切られている部分を抜き出して、リスト表示させたいのですが。
やりたいことは、テーブルコンポーネントのIndexFieldNamesに設定してあるフィールド名を取得して、インデックスとなる各列の名前をリスト表示させたいのです。
なにかよい方法はないでしょうか。
自己レスです。
CommaTextみたいに簡単にできる方法はないかと考えていましたが、
セミコロンをカンマに置き換えてリスト表示することにしました。。。
var
IndexText : String;
GridText : String;
c : SmallInt;
begin
IndexText := Table1.IndexFieldNames;
repeat
// セミコロン位置の取得
c := AnsiPos(';',IndexText);
// セミコロンをカンマに置き換える
if c > 0 then
GridText := GridText + Copy(IndexText,1,c - 1) + ','
else if c = 0 then
GridText := GridText + Copy(IndexText,1,Length(IndexText));
IndexText := Copy(IndexText,c + 1,Length(IndexText));
until c = 0;
ListBox1.Items.CommaText := GridText;
end;
Delphi6以降でのみだったと思いますけど、
DelimitedTextプロパティとかを使えば、そのまんまでも十分です。
さらに、文字列を数種類の文字を使って分割する、
ExtractStringsという関数もあるようです。
解決したようですけど、
次同じような事態にあったときには、役立ててみてください。
たかみちえさんレスありがとうございます。
わたしの環境は、Delphi5ですのでやはりそのような関数は無いようです(ToT)
バージョンアップの際には参考にさせていただきます。
ちなみに、
> セミコロンをカンマに置き換えてリスト表示することにしました。。。
これだと破綻しますよ。
確実に、データにセミコロンを含まないという前提でならOKですが。
例えば、
AAA;BBB;"(CCC;DDD)";EEE;
は、
AAA,BBB,"(CCC;DDD)",EEE,
でなく、
AAA,BBB,"(CCC,DDD)",EEE
となり、CommaTextで分割すると
AAA
BBB
(CCC,DDD)
EEE
となります。
3番目のデータは(CCC;DDD)となるべきですね。
このようなデータがなければ今の処理で問題ありません。
CommmaTextは、ダブルクオーテーションを考慮してくれるんですか!
そうかなぁとは思ってましたけど…。
(あんまりそのあたりのヘルプを詳しく読んでなかったから、読み落としたのかもしれませんけど)
またひとつ便利な使い方を見つけちゃいました。
ありがとうございます。
ところで、上の"(CCC,DDD)" は、
また,を;に置き換えてあげればいいんじゃないでしょうか?
> ところで、上の"(CCC,DDD)" は、
> また,を;に置き換えてあげればいいんじゃないでしょうか?
そうですね。例が悪かったです。
AAA,BBB;CCC;DDD
の場合だと、
AAA,BBB,CCC,DDD
となり、AAA,BBBは分割され、元に戻す事はできませんので、やはり問題は残ります。
ツイート | ![]() |