「;」区切りの読込みをするには?

解決


マリモ  2003-02-06 00:44:36  No: 2817  IP: [192.*.*.*]

セミコロン「;」で区切られている部分を抜き出して、リスト表示させたいのですが。
やりたいことは、テーブルコンポーネントのIndexFieldNamesに設定してあるフィールド名を取得して、インデックスとなる各列の名前をリスト表示させたいのです。
なにかよい方法はないでしょうか。

編集    削除
マリモ  2003-02-06 18:20:03  No: 2818  IP: [192.*.*.*]

自己レスです。

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;

編集    削除
たかみちえ  URL  2003-02-07 09:31:53  No: 2819  IP: [192.*.*.*]

Delphi6以降でのみだったと思いますけど、
DelimitedTextプロパティとかを使えば、そのまんまでも十分です。

  さらに、文字列を数種類の文字を使って分割する、
ExtractStringsという関数もあるようです。

  解決したようですけど、
次同じような事態にあったときには、役立ててみてください。

編集    削除
マリモ  2003-02-09 01:14:26  No: 2820  IP: [192.*.*.*]

たかみちえさんレスありがとうございます。

わたしの環境は、Delphi5ですのでやはりそのような関数は無いようです(ToT)
バージョンアップの際には参考にさせていただきます。

編集    削除
にしの  2003-02-09 01:31:32  No: 2821  IP: [192.*.*.*]

ちなみに、
> セミコロンをカンマに置き換えてリスト表示することにしました。。。
これだと破綻しますよ。
確実に、データにセミコロンを含まないという前提でなら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)となるべきですね。

このようなデータがなければ今の処理で問題ありません。

編集    削除
たかみちえ  URL  2003-02-09 09:47:41  No: 2822  IP: [192.*.*.*]

CommmaTextは、ダブルクオーテーションを考慮してくれるんですか!
そうかなぁとは思ってましたけど…。
(あんまりそのあたりのヘルプを詳しく読んでなかったから、読み落としたのかもしれませんけど)

  またひとつ便利な使い方を見つけちゃいました。
ありがとうございます。


  ところで、上の"(CCC,DDD)"  は、
また,を;に置き換えてあげればいいんじゃないでしょうか?

編集    削除
にしの  2003-02-09 09:58:15  No: 2823  IP: [192.*.*.*]

> ところで、上の"(CCC,DDD)"  は、
> また,を;に置き換えてあげればいいんじゃないでしょうか?

そうですね。例が悪かったです。
AAA,BBB;CCC;DDD
の場合だと、
AAA,BBB,CCC,DDD
となり、AAA,BBBは分割され、元に戻す事はできませんので、やはり問題は残ります。

編集    削除