• ベストアンサー

CSVの項目検索について

現在C++を使いはじめて1週間になり、そこで任されたプログラムの一部がわからずに困っています。 概要: ・CSVファイルがありそこの、ある項目列と検索する文字列が一致すれば、一致したレコードを取得するといった部分で煮詰まっています・・・ CSVファイルのサンプル testA,1,200412 testB,2,200410 testC,3,200409 といった感じで、「testA」といった文字列で検索をかけ「testA,1,200412」といったようにその対象となるレコードを取得したいのです。 今はWinAPIを使って作成すると言ったことから CreateFileなどの関数でCSVを読み込むところまで出来ましたが、要領がわからず調べても要領がわからずに1日無駄にすごしてしまいました、そこで どなたかアドバイスをもらえればと思い質問いたしました。 環境はVC++6.0です、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

落ち着いてアルゴリズムを考えてみよう。 ・CSVファイルから1行読み込む(ReadFile()など) ・行を項目でぶった切る(lstrcmp()、cstrcpy()など) ・1個目の項目がtextAと同じか調べる(lstrcmp()など) ・取り込む。 これだけで分からなくても、もう少し範囲を絞った質問にした方がみんな応えやすいと思うな。例えば、「1行をchar str[2048]に入れる事は出来たけど、項目の切り出しはどうやるの」とか。

AquaSkyMoon
質問者

お礼

1日出てたもので返事が遅くなりましたm(_ _)m 現在自宅で開発環境がないもので実践できませんが、 明日アドバイスをいただいた方法でもう一度トライしてみようと思います。 あと、問題点の整理。どこまで出来てどこが分からないのかということを自己分析してから質問できるよう心がけます。 ありがとうございました。

その他の回答 (1)

  • VirtualT2
  • ベストアンサー率58% (18/31)
回答No.2

憶測ですが、C++と書いているけどCの勉強中(研修?)なのかな? (失礼であったら、申し訳ないです) #1さんの回答でバッチしOKなのですが、 当方が上記のようなカンジでは?と推測し処理フローをかいてみます 問題アリまくりですが…あえて…ね ----------------------------------------------- ファイル名からファイルハンドルを取得する ハンドルからファイルサイズを取得する ファイルサイズ分のメモリを確保する(爆w) 確保したメモリにファイルを読み込む ファイルハンドルを開放する 読み込んだ先のメモリ先頭ポインタのコピーを2つとる。(MとPとす) △Pのコピー、Aを作る。  比較項目までAを進め(','を該当項目まで探す)、Aと検索対象を比較する。  (比較対象が文字列なら、文字数分だけ比較する。値ならAto?関数で値化し比較する)  該当しなかったら、Pを次の行まで進め、△に戻る  (ポインタが確保したメモリサイズ以上進まないようにしてね) 該当したら、Pが、その行の先頭である。 返値の種類に応じて処理をし、 確保したメモリ(M)を開放し、処理の終了とす。 ------------------------------------------- と、こんなカンジ。 但し、下記の問題点がある。 検索該当行が複数あっても常に最初にHitしたもののみしか検索しない。 項目の切り出し処理もしてない。 検索文字列に','及び、改行コードは使えない。 この処理を行うシステムのメモリ使用制限が無いものとしてる。 その他、もろもろ。 ----------------------------------------------- PS.コード書いた方が早いなぁ。説明するより~

AquaSkyMoon
質問者

お礼

なるほどーと、自分が考えていた方法と違うフローを提示いただき参考になりました。 夜もおそくなったので夢の中でじっくりと考察したいと思います(泣 ありがとうございます、一応明日じっくりと作り込みを行いたいと思います。