• ベストアンサー

csvファイルで実績データを読み込んで計算したいのですが...

実績データでフィールドが15項目あって、2番目に日付が書かれていて、15番目に金額が書いてあるcsvファイルで、日付ごとの金額合計を出すというものなんですが、日付ごとの合計を出す方法が思いつかなくて困っています。誰かいい方法を教えてくれませんか?

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

> これはfgets()で1行ごとに読み込んでstrrchrでカンマの最後にポインターって感じで それではCSVを処理できません。 フィールドに改行やカンマが含まれている場合はどうするのですか? また、CSVの改行はCRLFになりますので、処理系不明の状況では、バイナリ形式でオープンして、1バイトずつ読み取らなければ無理です。

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

その他の回答 (3)

  • symgt
  • ベストアンサー率56% (68/120)
回答No.4

> これはfgets()で1行ごとに読み込んでstrrchrでカンマの最後にポインターって感じで もしかして↓のことですか? http://oshiete1.goo.ne.jp/qa5382275.html

参考URL:
http://oshiete1.goo.ne.jp/qa5382275.html
全文を見る
すると、全ての回答が全文表示されます。
回答No.2

前にも別のカテゴリで記載したと思いますが、あまり丸投げ的な事を記載しても相手にされにくいです。 実現方法なんて考え方が複数通りあったならば実現方法も同じです。 ちなみに、どんな方法で実現しようとしてどこまで考えたのでしょうか?

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

とりあえず確認。 一レコードのデータの読み込みはできてますか?

参考URL:
http://okwave.jp/qa5382462.html
noname#96510
質問者

補足

とりあえず、フィールドの15番目の金額の合計を出すプログラムはできたんですが、これはfgets()で1行ごとに読み込んでstrrchrでカンマの最後にポインターって感じで15番目の最後のフィールドのものだから計算できたんですが、今回の日付と金額を関連付ける方法がわからないんです。

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

関連するQ&A

  • csv.ファイルをCで読み込みたいんですが?

    実績データのCSVファイルでフィールドが15でレコードが1000000あるデータをC言語で読み込みたいんですが。なかなかうまくいきません。 どうしたらいいか、教えてください。

  • CSVデータの加工

    CSVデータの項目数が多くアクセスで加工できません。 また データ量も多いため,一般のフリーのCSV閲覧ツールでは加工できません。 何か良い方法ないでしょうか? 項目数が600余りあります。 何番目の項目を抽出し新規ファイルに出力するようなツール無いでしょうか?

  • csvファイルのインポート

    Accessでcsvファイルをインポートさせようとしています。しかし、「F1フィールドがありません」のようなエラー表示が出て、できません。私の予想では、テーブルの型とcsvファイルの型が違うのではないかと思っています。テーブルには、数値型、テキスト型、日付/データ型があります。 保存したcsvファイルをExcelで開くと日付がApr-01や、2001/06/26となったりしていました。どこかで型変換のようなことをするのでしょうか?csvのことはよく分かりません。どうか、よろしくお願いします。

  • 1000000レコードもあるcsvファイルの実績データをC言語で計算しているのですが...

    C言語を学び始めたばかりなのに、csvファイルの実績データでフィールドが15あり、レコード数が1000000近くあるファイルの15番目のフィールドを足し合わせて、出力するということをやっているのですが、まだまだわからないことだらけです。 一応、書いたプログラムが #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *fp; char buffer[50],*p; int cnt, num, sum; fp = fopen("j0.csv","r"); if(fp == NULL){ printf("ファイルが開けませんでした。\n"); exit(-1); } while(fgets(buffer,fp) != NULL){ p = strtok(buffer,","); cnt = 1; while(p!=NULL){ num = atoi(p); printf("%d:%d,",cnt,num); p = strtok(NULL,","); cnt++; if(cnt==15) sum=sum+num } printf("\b\b \n"); } printf(%d \n",num); fclose(fp); return(0); } と書いたんですが、ぜんぜんな状態です。誰かご教授願えませんか?

  • CSVファイルの読み込み

    お世話になります。 VBAでCSVファイルを読み込んで処理をしたいのですが、 たとえば下記のようなCSVファイルの場合 2つめの項目が金額セットされており、あらかじめ通貨編集(カンマ編集) がされていて 金額を1つの項目として読み込む事が出来ません。 金額は""でくくってあるのですが、 カンマ区切りのデータと""でくくってあるデータを うまく区別して3つの項目をそれぞれ抽出する事は可能でしょうか? -----以下CSVの内容------ 日付,金額,データ 2007/03/09,"1,200",TEST1 2007/03/09,"12,200",TEST2 2007/03/09,"76,00",TEST3 2007/03/09,"4,5600",TEST4 --------------------------- ちなみに現在はこのようにカンマ区切り指定でデータを抽出してるので うまく出来ません。   'FileNameにはオープンするファイル名がセットされています   Open FileName For Input As   'textlineに1行を読み込む   Line Input #ch1, textline   csvline() = Split(textline, ",") VBAがまだ不慣れな為質問やサンプルが分かりずらいと思いますが よろしくお願いします。

  • CSVファイル作成

     まだC,C++始めたばかりなので、よくわかりません。 以下のようなことを行いたい場合のプログラムをどなたか教えてください。 1)CSVファイルのファイル名は、日付(YYMMDD.CSV)。   ファイルが存在しない場合は、新規作成。   存在する場合は、データ追加。 2)データ要素は4項目(入力はキーボードから)。   この4項目+現在時刻(1項目)を1レコード   (1列)とする。

  • PHP+MySQL でのcsvファイルインポート

    PHP + MySQL で、他システムから出力されてきたcsvファイルをテーブルへインポートしたいと考えています。 LOAD DATA INFILE で取り込もうとしていますが、対象のcsvファイルの特徴のためにうまく行かず苦戦しています。 取り込みたいファイルは、以下のようになっています。  ・各フィールドが "(ダブルクォート) で囲まれている  ・各フィールドは ,(カンマ) で区切られている  ・金額の項目には、桁区切りのカンマが入っている  例) "0001","あああああ",…(中略)…,"105,000","100,000","5,000",…     コード 項目名            税込み  税抜き 消費税  というような形です。    困っているのは、金額に使われている、桁区切りのカンマの処理についてです。  目的としては、データベースへ取り込むときには 105,000 は 105000 として取り込めればいいのですが、他システムから、桁区切りがなされた状態でcsvが作成されてきています。 LOAD DATA INFILE test.csv INTO TABLE data_table FIELDS TERMINATED BY ',' ENCLOSED BY '\"' IGNORE 1 LINES;  各項目のダブルクォートはENCLOSED BY で、項目を分けるカンマはTERMINATED BYで処理できていると思うのですが、金額の区切りに使われているカンマと項目の区切りのカンマを区別させられずに苦戦しています。  事前にcsvを加工するのも考えてはいるのですが、なるべくcsvを加工せずにそのまま取込したいと思います。  何か、簡単に回避できる方法等があればご教示願います。  宜しくお願いします。

    • ベストアンサー
    • PHP
  • csvファイルの実績データをC言語で解析するのですが...

    C言語を学び始めたばかりなのに、csvファイルの実績データでフィールドが15あり、レコード数が1000000近くあるファイルの15番目のフィールドを足し合わせて、出力するということをやっているのですが、まだまだわからないことだらけです。 1レコード目がカラム名なので2レコード目から足し合わせるんですがそこのところもよくわからずじまいで... 一応、書いたプログラムが #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *fp; char buffer[50],*p; int cnt, num, sum; fp = fopen("j0.csv","r"); if(fp == NULL){ printf("ファイルが開けませんでした。\n"); exit(-1); } while(fgets(buffer,fp) != NULL){ p = strtok(buffer,","); cnt = 1; while(p!=NULL){ num = atoi(p); printf("%d:%d,",cnt,num); p = strtok(NULL,","); cnt++; if(cnt==15) sum=sum+num } printf("\b\b \n"); } printf(%d \n",num); fclose(fp); return(0); } と書いたんですが、ぜんぜんな状態です。誰かご教授願えませんか?

  • CSVファイルをテーブルにインポートする

    1行目が項目名のCSVファイルをテーブルにインポートするため Private Sub CSVインポート_Click() DoCmd.TransferText acImportDelim, , "ブランド", "J:\ブランド.TXT" MsgBox ("CSVファイルインポート完了") End Sub を実行すると、f1,f2のフィールドがありませんとメッセージがあり F1,F2 のフィールドを追加し再度実行するとデータは f1,f2に入り 項目名もデータとして入っています。 1行目は項目名と宣言する設定はありますか。 よろしくお願いいたします。

  • CSVファイルをExcelで読み込むと

    CSVファイル中の項目 "01-03"などが、Excelでは 勝手に 1月3日などに変換されてしまいます。 もちろん、拡張子を.txtに書き換えて、毎回フィールドを 文字列属性にして読み込んでやればいいのでしょうが、 なにぶん量が多いので、毎回毎回こんな操作をするのは めんどくさいのです。 CSVファイルのままで、項目を勝手に変換させないで読み込む方法はありませんか??