• 締切済み

C++ でカンマ "," で区切られたデータファイルを読む方法

データファイル sample.dat には各行に次のようなデータが入っています。 Q,1100,ABCD,8.3,100,8.45,200 T,1200,JET,2.5,300 Q,1500,LOCK,55.5,300,55.7,400 T,1700,JET,2.8,200 Q,2100,JET,2.9,300,3.0,600 <解説> *1文字目が"Q" から始まるタイプ行の場合 1つ目の変数:"Q" 2つ目の変数:int 型 3つ目の変数:文字列 4つ目の変数:double 型 5つ目の変数:int 型 6つ目の変数:double 型 7つ目の変数:int 型 *1文字目が"T"から始まるタイプの行の場合 1つ目の変数:"T" 2つ目の変数:int 型 3つ目の変数:文字列 4つ目の変数:double 型 5つ目の変数:int 型 *変数の間は空白スペース無しでカンマ "," で区切られている。(見づらくてすみません。) <質問> このようなファイルを1行ずつ読んで、3つ目の変数が "JET" の行についてのみ、データを格納したいと思っています。3つ目の変数が "JET" でない場合については4つ目以降の変数は読まなくてかまいません。 3つ目の変数が "JET" の行について、"Q" タイプの行については7つの変数をそれぞれベクトル v1, v2, ..., v7、"T" タイプの行では5つの変数をそれぞれベクトル w1, w2, ..., w5 に格納したいです。 Emacs を用いてカンマ "," を空白スペースに変換して前処理をしたデータファイルを読み込むということをやっていましたが、データファイルが2GB もあるため、そのバケツリレーのような手法は諦めました。C++ のコードの中でできる方法をぜひご教授下さい。お待ちしております。

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

std::stringに読み込んでいるなら↓でどうでしょうか? http://goodjob.boy.jp/chirashinoura/id/100.html

patatas
質問者

お礼

D-Matsu 様、早速のご回答ありがとうございました。コンマで分けられているデータを1行まるごと読んで後から分けるというのは、なぜか心理的抵抗があったのですが、うまく行きました。途中、いろいろと勉強にもなりました。 またよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C#カンマで区切る

    文字列3種類 a,bc a,"b,c" "a,b",c 単純にカンマでsplitしてもだめですし、ダブルクォーテーションも文字列にカンマがある時だけついて来ます。 カンマで二つの文字列に区切るにはどうすれば良いでしょうか。お願いします。なおCSVファイルではなく、ただの文字列です。

  • VBS_カンマ区切りのファイルの分け方

    初めまして!ウサぴょんです♪ さっそくですが、質問させていただきます。 初めてプログラムを作ることになりましたが、まず初めに簡単なとこからやれ~と言われてやってるとこです。が、やっぱり分からなくて… 例… (1)CSVファイルを読み込みました。 (2)エディタで、読み込んだファイルを1行ずつポップアップされてます。(200行ほどループされます。) (3)ここで、問題です。  読み込んだファイルが1行ずつ、カンマ区切りで出力されてますが、そのままだと使い道がない!とのことで、変数を使ってフィールド毎に 管理したいところです。  変数の使い方がよく分からなくて、どうしても解決できず、困ってます。 どうか、助けてください! 質問が分かりにくいかも知れませんが… 言われたことがうまく言えなくて… (変数に200個くらいのデータを入れて、200個のファイルを作成したいって感じかな…)

  • ファイルからのデータ読み込み方法について

    はじめまして、数ヶ月前からC言語を始めたものです。 ファイルからのデータ読み込みについて質問です。 テキストファイルとして以下のようなものがあります。 ************************* 23 3346 45 423 34 23 345 45 56 6345 ・・・ ・・・ ************************* このようなファイルから読み込みを行って、スペース毎の数字(整数型)を構造体の中の変数に順次格納していくようなプログラムを作りたいとおもうのですがどのように行ったらいいのでしょうか? 現在、fgets()で行ごとの文字列を読み込んでから、型変換を行おうと心みているのですが、うまくいきません。 回答よろしくお願いします。

  • csvファイルでの,(カンマ)の取扱について

    csvファイルをperlで取扱っています。 ,(カンマ)が含まれるデータは""で括ってやれば行がずれることなく入るのは分かっているのですが、今度は取り出すときどのようにしていいのか分かりません。 各行毎に一連のデータが羅列されていますが、それの分割方法を教えてください。 たとえば、 $bに,(カンマ)入りの文字列が入っていた場合、 ($a, $b, $c) = split(/,/, $query); とすると本来$bに入って欲しいデータの,(カンマ)から後の部分が$cに格納されてしまいます。(そこから先が1つずれます) これをずれずに分割させるにはどのようにしたらいいでしょうか? ちなみに ($a, "$b", $c) = split(/,/, $query); と試しにやってみましたが、エラーになってしまいました。 実は長年の悩みで、データを格納する際に,(カンマ)を別のあり得ないような文字列に置き換えて、取り出したあと,(カンマ)に戻すというやり方でやっていたのですが、1つのデータファイルを複数のperlで取扱うようになり、対応が難しくなってきたので、これを機にきちんとした方法でデータを取扱いたいと思っています。

    • ベストアンサー
    • Perl
  • templateをシリアライズするには?

    templateで作った変数をシリアライズする方法がわからなくて困っています。 例えばhogehogeという変数を用意します。これはtemplateで hogehoge<TYPE>として、型はint、double、char[]、wchar_t[] のいづれかを取れるようにします。 この変数hogehogeをシリアライズしてファイルに保存したいのです。 シリアライズするには、int又はCObject*又はCString型にいったん キャストしてからシリアライズすることになると思うのですが ここで、hogehogeという変数がどの型になっても問題なくシリアラ イズできるようにするにはどうしたらいいのでしょうか?

  • C言語でPGMファイルの読み込みたいです。

    Visual C++ 6.0でPGM画像を読み込みたいのですが、ファイルの読み込みがわかりません。 コメント行は読み飛ばして以下の変数・配列にそれぞれ格納したいです。 int w,h //画像サイズ unsigned char img[][] //画像データ

  • カンマ付のCSVデータを処理

    サーバーに置いているCSVファイルのデータを 読み込みたいのですが、以下のようにカンマ付データ となっているため、splitだけでは上手く取得出来ません。 --------------------------------- "17577","SRK","",30,"","123" "17578","T,KMM","",50,"","123" --------------------------------- どうすればよいでしょうか?

  • csvカンマ区切りデータに=""を入力したい

    csvカンマ区切りデータに、例えば、 ="00",="123",="456" といった感じで入力したいのです。 大元のcsvカンマ区切りデータで、 00,123,456 が入っているので、これをExcelを使ってText変換や書式設定で文字列にして みたのですが、csvデータとしては=""としては保存されていないのです。 どなたか、こういった型変換に詳しいかたご連絡をお待ちしています。

  • エクセルでテキストデータを読み込むときに、カンマの扱い

    エクセルVBAで、 open "**.txt" for input as #1 で読み込ませています。1行のデータとして、セルに入力したいのですが、カンマが入っているとそこで区切られてしまいます。これをしないようにしたいのですが、テキストファイルのデータに全角のカンマ,を使っても同じようになってしまいます。何か方法はありませんでしょうか?

  • ファイルからの入力方法について

    例えば、data.txt というファイルから数字を一つずつ変数に入力させたいです。 data.txtの内容は、 1 1 2 3 5 8 13 21 34 55 89 144 … のような並びで文字が書かれていて、それを int num[1000]; のような変数配列に数字として一つずつ順番に入力させたいです。 ご教授ください。

このQ&Aのポイント
  • USB-AADC01BKの問題:中音域チューニングが強すぎるので明瞭さが欠ける
  • USB-AADC01BKの問題:明瞭さを向上させるために中音域チューニングを調整してほしい
  • USB-AADC01BKの問題:売買する前に中音域チューニングの問題について注意が必要
回答を見る

専門家に質問してみよう