質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

2回答

552閲覧

CSVファイル入出力について

tor

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/06/16 07:12

CSVファイルをそのまま出力したいのですが2列目で終わってしまいます。お願いします助けてください。
プログラムソース
#include <stdio.h>
#define N 5500 //入力の最大行数

// csvデータの表示順
// (1)world_cup, (2)match_id, (3)home, (4)away, (5)h_score, (6)a_score,
// (7)match_number, (8)new_match_number, (9)date,
// (10)time,(11)stadium,(12)attendance,(13)phase,(14)year,(15)host

int main(void) {
FILE *input, *output; //ファイルポインタを宣言
char data[N][256] = {""}; //データの格納先
int i;

input = fopen("10_FIFAWC.csv", "rt"); // https://raw.githubusercontent.com/mneedham/neo4j-worldcup/master/data/import/matches.csv//2022/6/2
if (input != NULL) {
for (i = 0; i < N; i += 7) {
fscanf(input, "%[^,], %[^,], %[^,], %[^,], %[^,], %[^,], %s\n", data[i],
data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5],
data[i + 6]);
printf("%s\n", data[i]);
}
} else {
printf("入力ファイルを開けません\n");
}
fclose(input);
output = fopen("output.csv", "wt");
for (i = 0; i < N; i++) {
fprintf(output, "%s\n", data[i]);
}
fclose(output);
printf("\n処理が終了しました.入力ファイルをクローズします\n\n");
}
CSVファイル
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

そのまま出力したいなら、1行読んで、1行出力、をファイル終端まで繰り返せばいいのでは

#んで、CSVデータの処理をしたいなら、その1行の文字列をどーこ~しましょう

投稿2022/06/16 08:53

編集2022/06/16 08:54
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

printf("%s\n", data[i]);
で、data[i]しか表示していないので、1つ目の項目しか表示していません。
Nが5500になっていますが、5500/7=785行のデータでよいですか?
また貼られている画像のCSVファイルの内容正しいですか?

投稿2022/06/16 07:49

ardin

総合スコア544

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tor

2022/06/16 13:41

返信ありがとうございます。 785桁のデータだと思います。 CSVファイルの内容は正しいです。 data[i]の項目だけで[i+1]などの項目を増やせばいいということですか? プログラミングを理解していなくて申し訳ございません。
ardin

2022/06/17 05:50

出力の方はその通りです。 あと完全に見逃していましたが、1行に項目が15個あるので15個分のデータを読まなければなりません。 そうしないと次の行を読みません。 また、fscanfで%[^,]を使用していますが、今回の画像から見えるcsvファイルの内容のように カンマ間で値がない場合、正しく読み込めないため、 一気に一行読み込んでしまって、読み込んだものをカンマ区切りを軸に分割して変数に突っ込むなりするのが良いかと思います。 y_waiwaiさんが記載している通りですね。 ついでに書き込み側も1項目ずつ改行されているので、読み込んだcsvファイルの内容がカンマ抜きで縦にずらっと並ぶことになります。
tor

2022/06/17 12:50

ありがとうございます。 カンマ間で値がない場合というのはどのような状態のことでしょうか理解していなくて申し訳ございません。
ardin

2022/06/19 23:40

質問に貼られているCSVファイルの画像を見てみましょう。 1行目 2010FIFAWorldCupSouthAfrica,300061454,SouthAfrica,Mexico,1,1,1,1,11/06/2010,,JohannesburgSoccerCitySadium,,Groupmatches,2010,SouthAfrica となっていますが、 11/06/2010,,JohannesburgSoccerCitySadium,,Groupmatches ここの2ヵ所、, (カンマ)の間に値がありませんね。 これのことです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問