アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語でCSVデータを読み込んで加工して保存したい。
CSVデータの中身は
1 -0.001
2 -0.11
3 -0.22
4 -0.625
5 -0.55

という式を、
一行目+0行目=答え(1)
答え(1)+2行目=答え(2)
答え(2)+3行目=答え(3)という処理を行い、
1 答え(1)
2 答え(2)
3 答え(3)
4 答え(4)
5 答え(5)
とCSVファイルに加工して保存するプログラムを作りたいのですが、どのようなプログラムを追加すれば良いのか分かりません。恐らくCSV内部データを配列データに保存して、配列データをfor分にて計算していけばよいのでしょうが、分かりません。
プログラム例を記載していただけないでしょうか。
以下CSVファイルを読み込んで表示するプログラムを示します。下記プログラムに加筆をお願いいたします。

#include <stdio.h>

int main(void)
{
FILE *fp;
char *fname = "C:\\Users\\XXX\\Desktop\\aaa.csv";
char s[100];
int ret, n1, n2;
float f1, f2;

fp = fopen( fname, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません¥n", fname );
return -1;
}

while( ( ret = fscanf( fp, "%[^,],%d,%d,%f,%f", s, &n1, &n2, &f1, &f2 ) ) != EOF ){
printf( "%s %d %d %f %f", s, n1, n2, f1, f2 );
}

fclose( fp );
return 0;
}

A 回答 (2件)

ファイルから読み込んだ文字列情報を


文字列を区切り文字で分解する関数、strtok関数で分解しましょう。
(#include <string.h>をお忘れなく。)

分解した「文字列の数字」を、atof関数で「少数の数値」に変え、計算しましょう。

計算を終えた数値を sprintf関数で文字列として繋ぎ合わせましょう。
(この時文末に“改行コード”を入れ忘れずに。\r\nなど。)

繋ぎ合わせた文字列を fputs関数でファイルへ書き出しましょう。



「実現したい機能」と「C言語」の2ワードで検索されると
ヒントになる関数やサンプルコードに辿りつけます。

関数の動作を確認しながらご自分で実装していかないと、
全てがブラックボックスになり、
CSVの行内文字数が char s[100]; を超えて誤作動を起こしたりと
些細な想定漏れに対する修正ができず、
せっかく書いたプログラムもあっけなく使い物にならなくなりますので。
    • good
    • 0

atof ではなく strtod を使うことを視野に入れた方がいいかもしれん>#1.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!