C言語、CSVファイルを読み込んで、加工して別CSVファイルに出力するプログラムがうまくいきません。
行いたいことは
A列 B列 ←エクセルの列です。
1 -0.0001
2 -0.000021
3 -0.1111
4 -0.255
5 -0.223
というCSVファイルの中身を加工してB列の数値のみを変えたいのですが、うまくいくません。作成したプログラムでは
A列 B列
1 0000
2 0000
3 0000
4 0000
5 0000
となり、うまく数値が読み込めていません。-だからでしょうか。
また全てA列に入力されてしまいます。
以下作成したプログラムになります。
#include <stdio.h>
#define N 5
int main(void) {
int i;
double r[N], w[N - 1];
FILE *fpr = fopen("C:\\Users\\XXX\\Desktop\\aaa.csv", "r");
for (i = 0; i < N; ++i) {
fscanf(fpr, "%*d %lf", &r[i]);
}
fclose(fpr);
for (i = 0; i < N - 1; ++i) {
if (i == 0) {
w[0] = r[0] + r[0];
} else {
w[i] = w[i - 1] *(r[i]-w[i + 1]);
}
}
FILE *fpw = fopen("C:\\Users\\XXX\\Desktop\\bbb.csv", "w");
for (i = 0; i < N - 1; ++i) {
fprintf(fpw, "%d %.5lf\n", i + 1, w[i]);
}
fclose(fpw);
return 0;
}
お手数ですが、よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
○CSVファイル、というのは、通常は、Comma Separated Values の名前の通り、「カンマ(,)で区切られたデータ」になっています。
そのfscanfの書式を見ると、 「整数(読み飛ばす) 空白 数値(読み込む) 」となっているファイルを読もうとしています。
どちらが正しいのでしょうか?
空白区切りが正しいのなら「CSV」などと誤った名前を使わないようにしましょう。
カンマ区切りが正しいのなら、fscanfの書式を正しいものにしましょう。
○ あるいは、もっと他の方法を探しましょう。
「C言語を使わなければならない積極的な理由」が無ければ、他の方法を使った方がはるかに楽です。
例えば、そのままエクセルを使って、
C1: =B1+B1
C2: =C1*(B2-C3)
...
とでもやれば済むことです。
で気付いたのですが
> w[i] = w[i - 1] *(r[i]-w[i + 1]);
この時点で、w[i+1]には何も入っていません。C言語の場合、このような場合に、どんな値になっているか、わかりません。
(デバッグモードでは0に初期化されていることもありますが)
計算式、または計算順番を間違えていませんか?
○ここでは
・質問が解決したら締め切る
・続きの質問を投稿する前に、前の質問は締め切る
というルールになっています。過去の質問は適切に処理しましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
Excelの表以外が暗い?
-
エクセルでの複数条件下での標...
-
エクセルで年月の合計の関数を...
-
ある一定時間を超えた場合の超...
-
EXCEL 経過年数の平均を求めた...
-
【スプレッドシート】指定の日...
-
隣のセルに入力したら自動的に...
-
エクセルで「ぶら下げ」書式を...
-
エクセルのセルに色付けがうま...
-
excelでの文字を隠す方法
-
エクセルにて「週」から日付を...
-
EXCEL 年月表示をするVBAを教...
-
vbaで「/」を削除したい
-
エクセルで角度の計算できますか?
-
Excelで1ヶ月間の勤務時間の計算
-
SUMIFでの判定条件が異なるため...
-
複数連続した列幅や行高を一発...
-
SUMIF関数の結果が0になってし...
-
エクセルで行ごと書式設定コピ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルでの複数条件下での標...
-
エクセルで年月の合計の関数を...
-
ある一定時間を超えた場合の超...
-
【スプレッドシート】指定の日...
-
Excelの表以外が暗い?
-
エクセルにて「週」から日付を...
-
エクセルで「ぶら下げ」書式を...
-
隣のセルに入力したら自動的に...
-
EXCEL 経過年数の平均を求めた...
-
エクセルで、一つのセルに二つ...
-
EXCEL 年月表示をするVBAを教...
-
エクセル シフト表 6連続勤...
-
エクセル2003 MONTH関数で
-
Excel:月またぎを含む日数の差...
-
vbaで「/」を削除したい
-
Excelで1ヶ月間の勤務時間の計算
-
ある数値から始まるものをカウ...
-
エクセルで角度の計算できますか?
-
SUMIF関数の結果が0になってし...
おすすめ情報