C言語でCSVファイルの読み込みと計算

このQ&Aのポイント
  • C言語でCSVファイルから数字を読み込み、計算するプログラムを作成する方法について
  • CSVファイルはカンマで区切られたテキストファイルであり、数値データを含んでいることが一般的です
  • 指定した数式に基づいてCSVファイルから数値を読み込み、計算結果を求めるプログラムの作成方法について説明します
回答を見る
  • ベストアンサー

C言語 CSVファイルの読み込み

C言語でCSVファイルから数字を読み込み、それを計算するというプログラムを作りたいのですが、CSVファイルについて全く知識が無く、加えてCSVファイルを利用したプログラムを作るのが初めての為、勝手がわかりません。 まずCSVファイルというのは、 1.2,2.3,3.4 4.5,5.6,6.7 7.8,8.9,9.0 といった数字(文字列)をカンマで区切ったテキストファイルですよね? それをどのようなプログラムで読み込むのでしょうか? 例えば、上記の数字を読み込み、 a. 1.2+4.5+7.8=x b. 8.9-5.6-2.3=y c. 3.4*6.7*9.0=z と計算する場合のプログラムを教えていただきたいです。 よろしくお願いします。

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

  • ベストアンサー
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.2

CSVにもいろいろありまして、例示のような数値のみ、列数固定の場合ならfgetsとsscanfで簡単にできます。 例示のようなケースでしたら、こんな具合です。 char buf[1024]; double a,b,c; fgets(buf,1024,fp); sscanf(buf," %d , %d , %d",&a,&b,&c); これが、文字列が入って、ダブルクォーテーションが入れ子になっていたり、文字列中に改行が入るなどした場合はえらい大変です。 なので、どこまでのCSVをサポートするのかを決めるのがまず肝心ですね。

その他の回答 (1)

  • anicicle
  • ベストアンサー率36% (129/356)
回答No.1

「一行ずつ読む」ことだけなら fscanf(fp, "%lf,%lf,%lf" 略 ) でできるけど、 >と計算する場合 って固定でいいの? 可変だと法則性が分らないんだけど。 直前にあった類似質問。 http://soudan1.biglobe.ne.jp/qa6352242.html

関連するQ&A

  • C言語 CSVファイルの読み込み

    前回の質問が説明不足だった為、こちらでもう一度詳しく補足を加え再度質問させていただきます。 ↓前回の質問 http://okwave.jp/qa/q6352672.html 読み込むCSVファイルは数値のみです。 具体的な例として数値をあげさせていただきます。 例:ファイル名 test.csv 10,1.1,1.2,1.3 20,2.1,2.2,2.3 30,3.1,3.2,3.3 上記のような4列3行のCSVファイルをC言語を使用し、 10→a 1.1→b 1.2→c 1.3→d 20→e 2.1→f 2.2→g 2.3→h 30→i 3.1→j 3.2→k 3.3→l といった具合に、任意の列・行の数字を任意の場所へ読み込みをするということが出来ません。 例をプログラムにするとどのようになるのか教えていただきたいです。 よろしくお願いします。

  • C言語におけるtxtファイルの読み込みと出力

    環境:WinXP,Borland C++compiler 以下のようなプログラムを考えました。 ・sample.c #include <stdio.h> float func(float x,float y,float z); int main(void) { float x,y,z; scanf("%f",&x); scanf("%f",&y); scanf("%f",&z); printf("%f",func(x,y,z)); return 0; } float func(float x,float y,float z) { return x+y+z; }//ここまで。 例えば(x,y,z)=(1,2,3)と入力すると6が出力されます。 このプログラムを、任意のn組の(x,y,z)の記述されたテキストファイルを読み込んで出力outを計算し、別のテキストファイルにn組の(x,y,z,out)を書き込むようにするにはどのような変更を加えればよいのでしょうか。 具体例は以下のような感じです。用意しておいたinput.txtをsample.cで読み込んで計算し、また作成されていないoutput.txtに出力するのが目標です。 (n=3の場合) ・input.txt //x y z 1 2 3 1 8 9 -1 7 5 ・output.txt //x y z out 1 2 3 6 1 8 9 18 -1 7 5 11

  • csvファイルからの読み込みがスムーズにできません

    fscanfでCSVファイルから文字列を取り込み、カンマ区切りで4つの変数に文字列を代入しようと考えているのですが、出力されたcsvファイルが変わった区切りかたをしているのでうまく変数に代入できずに困っております。 例えば、出力されたcsvファイルは以下のようになっております "ABC CO.,I","4540",""STAR"","2010/03/31" 希望としては aにABC CO.,I bに4540 cにSTAR dに2010/03/31 をそれぞれ代入したいのですが aに入る文字列にはCO.,Iというようにカンマが既にありますので カンマ区切りで読み込むとめちゃくちゃになってしまいます ですので基準をダブルクオーテーションに置き、"と"の間の文字列を代入というような形が取れれば良いのですが、このような方法での文字列取得は可能でしょうか? c言語の勉強を始めて間もない為、低レベルな質問、表現であることをお許し下さい。 よろしくお願いします。

  • csvファイルのデータをCで読み込みたいのですが

    大学の研究でC言語を利用しています。 csvファイルの値を読み込んで計算したいのですが、読み込む方法(プログラム)が分かりません。 現在、csvファイルの値をテキストファイルにコピーアンドペーストし、それからCで読み込んでいます。 何かいい方法は無いでしょうか?

  • C言語でファイルから読み込んだデータの処理

    こんにちは C言語についてかじった程度でほとんど初心者なので、どうぞよろしくお願いします。 テキストファイルからデータを読み込み、そのデータをもとに計算してその結果を違うファイルに出力する。 というプログラムを組みたいと思っています。 例えば、 1 2 3 4 5 … 400 401 …     440 : 1600 …    2000 というデータだとします。 4項目ごとのデータを(a,b,c,d)として、このデータを x=a+b y=a+c z=a+d といったように計算して、これを [x y z] [ …  :  … といったように出力したいんです。 この場合では [3 4 5] [11 12 13] … [  ]  : [ ]… [ ] となると思います。 ファイルの入出力だけならいろんなところで例題にもなっているので何とかなると思っていたのですが [ ] [ ] : といったように下につながるか [ ][ ][… といったようにすべて横につながってしまいます。 対応するように並べるにはどのようにすればいいのでしょうか。 うまく説明できず、非常にわかりにくい質問だとは思いますが、皆さんどうぞヒントだけでも与えてくれるとうれしいです。 よろしくお願いします。

  • Visual C++によるcsvファイルの読み込みについて

    Visual C++を使い始めたばかりの初心者です。 恐縮ながら、Visual C++でのcsvファイルの処理方法についておたずねさせていただければと存じます。 通常のスクリプト言語では、1行読んできて、"," で split をしてやることで、csvファイルを処理できるのですが、Visual C++ではどのようにするのが効率がいいのでしょうか? csvファイルを簡単に取り扱うことができるようなクラスライブラリが提供されているものなのでしょうか?それとも、1文字1文字、コンマを判定していくのが普通なのでしょうか? よろしくお願いいたします。

  • C言語での、テキストファイル読み込みについて

    30行×30列の数字が記載されてテキストファイルがあり、 それをC言語で例えばA[ ][ ]といった配列に読み込みたいのですが、 どうすればよいでしょうか? fscanf関数を用いればできないことはないと思うのですが、 30個も書かなければならないのは冗長なので・・・。 なにかよい方法はありますでしょうか?

  • C言語のCSV形式からのソート

    C言語初心者です。 C言語でCSV形式のテキストファイルを読み込み そのファイルの内容(数値)を昇順にソートして表示するプログラムを作りたいのですが中々上手く行きません・・・。 調べても分からず困っています。 どなたか教えていただけませんか?

  • CSVファイルの中身を操作したいけど何の言語がいいのでしょうか

    驚くべきCSVファイルがあります。100MBとか。たぶん、行が何十万行となるんでしょう。エクセルでは開ききれず6万5千行くらいまで開かれて残りは見れませんでした。 このCSVファイルを操作したいのです。CSVファイルはコンマ区切りのファイルですが、例えば 1,1,3 2,2,1 1,1,2 1,2,1 こんな内容だったとして、二番目の数字が2の場合の行のみをコピーして別の新しいCSVファイルが作りたいのです。 こういう操作はどんな言語で可能なのでしょうか。簡単に書けるのでしょうか。 私が持っているもので使える環境があるのは、C言語、MicrosoftのVisual BasicとVisual C++? です。Javaもあったような。 あと、気になってるのはMatlabです。

  • [C,C++]テキストファイルの読み込み

    はじめまして C++をはじめてまだ半年の初学者です。 テキストの読み込みについての質問なのですが、 以下のような形式(csv形式)のテキストのヘッダーと項目名を除く 数字の部分と文字の部分を読み込みたいのですが どのようにプログラムを書けばよいですか? ヘッダーと項目は不要です。 動物の名前とそのXYZは20個、日付は結構な数並んでいます。 時間と動物のデータは読み込み後、動物の種類ごとに構造体に格納します。 したがって、動物のデータはループで読み込めると良いのですが、 その方法が分かりません。 よろしくお願いします。 ************************** animal.txt by tanaka.tarou ************************** DATE, NAME, X, Y, Z, NAME, X, Y, Z, NAME, X, Y, Z, ・・・ 2011.05.23, rabit, 2, 5, 6, pig, 5, 3, 9, cow, 6, 3, 8, ・・・ 2011.05.23, rabit, 2, 5, 6, pig, 5, 3, 9, cow, 6, 3, 8, ・・・ 2011.05.23, rabit, 2, 5, 6, pig, 5, 3, 9, cow, 6, 3, 8, ・・・ 2011.05.23, rabit, 2, 5, 6, pig, 5, 3, 9, cow, 6, 3, 8, ・・・               ・               ・               ・

専門家に質問してみよう