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

解決


マリモ  2003-02-06 00:44:36  No: 2817

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


マリモ  2003-02-06 18:20:03  No: 2818

自己レスです。

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

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

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

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


マリモ  2003-02-09 01:14:26  No: 2820

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

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


にしの  2003-02-09 01:31:32  No: 2821

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

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

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

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


にしの  2003-02-09 09:58:15  No: 2823

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

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


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

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






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