csv形式を検索するには?

解決


ちゃん  2007-09-17 02:08:35  No: 27806

csv形式でデータが
1,不二,東京
2,アサヒ,新潟
3,読売,北海道
の場合、edit1.text に  最初の文字(1とか2とか)を入れて該当すれば
その行をstringglidに入れたいのですが検索がどうすればいいのかわかりません
var
  SL:TStringList;
  index:integer;
begin
  SL:=TStringList.Create;
  try
  List1.Items.LoadFromFile('顧客データ.csv');
     //これでListBoxに表示出来ますが検索がわかりません
  SL.LoadFromFile('顧客データ.csv');
  SL.CommaText:=SL.Text;
  
  index:=SL.indexof('2);とか
  edit1.text:=SL[2]とかとかやってみたのですが・・全然だめです。
  むちゃくちゃで先に進めません。よろしくお願いします。
                                                          ちゃん

  pos


検索不要?  2007-09-17 02:26:47  No: 27807

データの行頭の数字が1,2,3…と必ず順序通りに並んでいるのなら、検索する必要ないんじゃないの?
Edit1.Textが'2'なら、StringGridに入れるのは SL[2-1]の文字列でイイと思うけど。


AVA  2007-09-17 08:01:18  No: 27808

>SL.LoadFromFile('顧客データ.csv');
>SL.CommaText:=SL.Text;
は何をやろとしているのでしょうか?
もしかして
CSVファイルをTStringListに全件読み込んで、1レコードずつカンマで分割しようとしているのであれば、もうひとつTStringListを用意して
try
  SL1 := TStringList.Create;
  SL1.LoadFromFile('顧客データ.csv');
  try
    SL2 := TStringList.Create;
    for I := 0 to SL1.Count - 1 do
    begin
      SL2.CommmaText := SL1[I];  //CommmaTextはスペースも区切り文字とするので注意が必要
      if SL[0] = '1' then
      begin
        StringGrid1.Row[0].Assign(SL1);
        Break;
      end;
    end;
  finally
    SL2.Free;
  end;
finally  
  SL2.Free;
end;
てな感じでやれば考えていることができると思いますです。


AVA  2007-09-17 08:07:18  No: 27809

おっと間違えた
      if SL[0] = '1' then
      begin
        StringGrid1.Row[0].Assign(SL1);
        Break;
      end;
じゃなくて
      if SL[0] = Edit1.Text then
      begin
        StringGrid1.Row[0].Assign(SL1[I]);
        Break;
      end;
でした。


ちゃん  2007-09-17 17:23:25  No: 27810

質問の意味がわかりにくかったですか申し訳ありません。

データが5,000件くらいあります。そのデータは会社名や部署、住所です。
そしてに顧客コードが振ってあります。プログラムはaccess(?)です。
そのデータをCSVに変換できますので、とりあえずやりたいことは
「顧客コード」を打つとそれコードが該当すれば  stringgridに  会社名とか
部署とか住所を入れて数件印刷したいのです。

以前データベースではSQLで検索できたんですけれど、データベースを使わなくても
できればいいかなと思い、

まず、ListBoxに表示することでどうにかできるかなと思ったのですが、
      それ以降進みません。
次にTString で読み込み検索してそれをstrinnggridに表示できるかなと思ったのですが
それぞれ使い方もいまいちわからず困っている状態です。

方法はどんな形でもいいのですが今は
今は顧客画面を呼び出して、エクセルで数件手入力して体裁を作り印刷しています。

AVAさんのコードはどうにかわかりました、2つのTString でこのような方法でやるんでしょうね。
でも
StringGrid1.Row[0].Assign(SL1[I])のところで
TPersistentとstringには互換性がありませんのブレークがでています。
            Assign を  Add に変えても反応がありませんでした。
            
                                                                    ちゃん


HOta  2007-09-17 17:43:36  No: 27811

>データが5,000件くらいあります。そのデータは会社名や部署、住所です。
>まず、ListBoxに表示することでどうにかできるかなと思ったのですが、

ListBoxに5000件表示すると、探すのが大変です。Accessにデーターがあるのなら、素直に使えばどうでしょう。ADOを使えば簡単に接続できますよ。


AVA  2007-09-17 19:32:32  No: 27812

StringGrid1.Rows[0].Assign(SL1[I]);を
StringGrid1.Rows[0].Assign(SL2);
に変えてください。


ちゃん  2007-09-17 20:49:56  No: 27813

AVA さん  stringgrid  に表示できました。ありがとうございます。
他人様のプログラムを切り貼りで使っている身分では、思い通りに動かないことが多々あります。でもこれからも自分なりに頑張っていきますのでヨロシクお願いします。
HOtaさんのおっしゃるようにできればいいのですが。。


Mr.XRAY  URL  2007-09-20 08:15:15  No: 27814

ちょっと気になったので...

>HOtaさんのおっしゃるようにできればいいのですが。。

この意味がもし、どうしてもCSVファイルにする必要があるというのであれば別ですが、
そうでなければ、HOtaさんが言われるように、ADOによるmdbへの接続は非常に
簡単です。余計なお世話で記事を書いてみましたので、もしよろしかったら参考にして
下さい。

http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_ADO_BASIC.htm
(できたてホヤホヤの記事です)


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

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






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