前提
使用しているC言語のバージョンはC17、gccのバージョンは9.2.0です。
質問
C言語のfscanf関数を使って、CSVファイルの内容を読み込む練習をしていましたが、CSVの日付形式のセルの読み込みがうまくいきません。1列目に日付が記載してあり、2列目に数値が記載しております。そして1列目の月を読み取り、月ごとに数値を集計するプログラムを組もうとしています。どのようにすれば読み込めるかご教示お願い致します。
CSVファイル
該当のソースコード
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<time.h> #include<stdlib.h> int main(void) { FILE *fp; int month; int jan = 0; int feb = 0; int mar = 0; int daynum; if((fp = fopen("csvdata1.csv","r")) == NULL) { printf("No File"); exit(0); } else { do { fscanf(fp,"%*d/%d/%*d,%d\n",&month,&daynum); if(month == 1) { jan += daynum; } else if(month == 2) { feb += daynum; } else if(month == 3) { mar += daynum; } }while(month == 1 || month == 2 || month == 3); } fclose(fp); printf("January:%d\nFebruary:%d\nMarch:%d\n",jan,feb,mar); return 0; }
プログラムの実行結果
January:0 February:0 March:0
試したこと
日付型を読み取れていないと考えて、
"%*d/%d/%*d,%d\n"
の部分を
"%*[^/]/%[^/]/%*[^,],%d\n"
と変更して、文字列として月を読み取ってから atoi 関数で数値に置き換えようとしましたが、うまくいきませんでした。
うまくいかないとは、どーゆーふーになってうまくいかないんでしょうか
問題が見えません
> CSVファイル
テキストとして見たときに、スペースや引用符が入ったりしてはいませんか?
y_waiwaiさん
ありがとうございます。「プログラムの実行結果」の部分の説明が不足しておりました。質問自体は解決しておりますが、質問の補足部分を付け加えると、CSVの最初の列に日付が記載されており、次の列に数値が記載されていますが、日付から月を読み取って、1月であれば2列目の数値をjanにカウントして、2月であれば2列目の数値をfebにカウントして、3月であれば2列目の数値をmarにカウントして計上していきます。計上されると1月の合計、2月の合計、3月の合計が算出されるはずですが、全て0と出てきたため、数値が先ほどの説明通りに読み取れていない問題が起こっているのかなと思いました。
maisumakunさん
ありがとうございます。テキストエディタで開いて確かめてみましたが、特にスペースや引用符はありませんでした。

回答3件
あなたの回答
tips
プレビュー