こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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です、よろしくお願いします。

投稿日時 - 2005-02-01 23:29:58

QNo.1197428

困ってます

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

落ち着いてアルゴリズムを考えてみよう。

・CSVファイルから1行読み込む(ReadFile()など)
・行を項目でぶった切る(lstrcmp()、cstrcpy()など)
・1個目の項目がtextAと同じか調べる(lstrcmp()など)
・取り込む。

これだけで分からなくても、もう少し範囲を絞った質問にした方がみんな応えやすいと思うな。例えば、「1行をchar str[2048]に入れる事は出来たけど、項目の切り出しはどうやるの」とか。

投稿日時 - 2005-02-01 23:57:38

お礼

1日出てたもので返事が遅くなりましたm(_ _)m
現在自宅で開発環境がないもので実践できませんが、
明日アドバイスをいただいた方法でもう一度トライしてみようと思います。

あと、問題点の整理。どこまで出来てどこが分からないのかということを自己分析してから質問できるよう心がけます。
ありがとうございました。

投稿日時 - 2005-02-03 00:07:43

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

憶測ですが、C++と書いているけどCの勉強中(研修?)なのかな?
(失礼であったら、申し訳ないです)

#1さんの回答でバッチしOKなのですが、
当方が上記のようなカンジでは?と推測し処理フローをかいてみます

問題アリまくりですが…あえて…ね

-----------------------------------------------
ファイル名からファイルハンドルを取得する
ハンドルからファイルサイズを取得する
ファイルサイズ分のメモリを確保する(爆w)
確保したメモリにファイルを読み込む
ファイルハンドルを開放する

読み込んだ先のメモリ先頭ポインタのコピーを2つとる。(MとPとす)

△Pのコピー、Aを作る。
 比較項目までAを進め(','を該当項目まで探す)、Aと検索対象を比較する。
 (比較対象が文字列なら、文字数分だけ比較する。値ならAto?関数で値化し比較する)
 該当しなかったら、Pを次の行まで進め、△に戻る
 (ポインタが確保したメモリサイズ以上進まないようにしてね)

該当したら、Pが、その行の先頭である。
返値の種類に応じて処理をし、
確保したメモリ(M)を開放し、処理の終了とす。
-------------------------------------------
と、こんなカンジ。

但し、下記の問題点がある。

検索該当行が複数あっても常に最初にHitしたもののみしか検索しない。
項目の切り出し処理もしてない。
検索文字列に','及び、改行コードは使えない。
この処理を行うシステムのメモリ使用制限が無いものとしてる。
その他、もろもろ。

-----------------------------------------------
PS.コード書いた方が早いなぁ。説明するより~

投稿日時 - 2005-02-02 12:08:07

お礼

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

投稿日時 - 2005-02-03 00:13:55

あなたにオススメの質問