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

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

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

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Q&A

解決済

3回答

2856閲覧

C csvファイル読み込みでのエラー(expected identifier or '(')

Ann99

総合スコア3

C

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

0グッド

0クリップ

投稿2020/09/10 05:56

前提・実現したいこと

csvファイルから読み込んだ整数値を,変数に代入するプログラムを作っています.
以下のようなエラーが出てしまいどのように解決すれば良いのか分かりません.

発生している問題・エラーメッセージ

./network_20.csv:1:1: error: expected identifier or '(' 20,0,19,0,0 ^

該当のソースコード

C

1#include<stdio.h> 2#include<time.h> 3#include<math.h> 4#include"network_20.csv" 5 6#define INTBIGNUM 1000 7#define INTINFINITY 1073741822 8#define TRUE 1 9#define FALSE 0 10 11#define INDEX 0 12#define TAIL 1 13#define HEAD 2 14#define ALPHA 3 15#define BETA 4 16#define COST 5 17 18#define IN 0 19#define OUT 1 20 21int nodeNum ; 22int sourceIndex ; 23int sinkIndex ; 24int edges[INTBIGNUM][6] ; 25int edgesFirstIndex = 0; 26 27void setNetwork(char* filename) { 28 FILE* fp; 29 fp = fopen(filename, "r"); 30 if(fp == NULL){ 31 printf("file reading error\n"); 32 return; 33 } 34 35 fscanf(fp,"%d,%d,%d,,",&nodeNum,&sourceIndex,&sinkIndex); 36 printf("nodeNum = %d, sourceIndex = %d, sinkIndex = %d", nodeNum, sourceIndex, sinkIndex); 37 38 while (fscanf(fp,"%d,%d,%d,%d,%d",&edges[edgesFirstIndex][TAIL],&edges[edgesFirstIndex][HEAD], 39 &edges[edgesFirstIndex][ALPHA],&edges[edgesFirstIndex][BETA],&edges[edgesFirstIndex][COST]) != EOF) { 40 edges[edgesFirstIndex][INDEX] = edgesFirstIndex; 41 edges[edgesFirstIndex][BETA] += edges[edgesFirstIndex][ALPHA] ; 42 edgesFirstIndex++; 43 } 44 45 fclose(fp); 46} 47 48int main(){ 49 char *data = "network_20.csv" ; //辺数30 50 51 setNetwork(data); 52 53 return 0; 54} 55

読みこむcsvファイル(network_20.csv)

20 0 19 0 1 16 21 32 0 2 48 12 27 0 3 11 34 17 1 5 62 22 35 1 6 46 12 12 2 7 28 16 9 2 8 48 43 10 3 4 38 21 23 3 9 28 7 9 4 5 28 34 21 4 11 49 25 35 5 13 13 33 12 6 7 17 22 22 6 14 46 18 12 7 16 61 12 29 8 17 18 66 18 9 8 30 14 14 9 10 65 11 35 10 18 17 45 34 11 10 36 38 9 11 12 24 22 34 12 19 19 53 25 13 12 50 12 31 13 14 59 21 12 14 15 15 45 35 15 19 17 39 24 16 15 31 29 25 17 16 24 23 28 17 18 13 29 24 18 19 50 41 34

C言語初心者です.
コードではなくcsvファイルにエラーが出ているということなのでしょうか??
助言をいただけると助かります.

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

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

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

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

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

kay-ws

2020/09/10 06:19

エラーの本質ではないのでここに書きますが、 network_20.csvの中身がCSV(Comma Separated Value =カンマ(,)で区切った値)ではないですね。 タブ区切りなのかな?その場合はTSV(Tab Separated Value)といいます。
Ann99

2020/09/10 16:27

確かに,,, csvファイルをエクセルで開いてコピペしてきたものを質問に貼り付けたのですが, ここの表示ではタブ区切りになっていますね,,, 実際に自分がもっているnetwork_20.csvはちゃんとカンマ区切りだったので,アドバイス通りに修正してうまくいきました!ありがとうございました.
guest

回答3

0

ベストアンサー

#includeは指定したファイルをその場所に展開することを意味します。
つまりご提示のコードでは次のように展開され、エラーになるのは歴然ですね。

c

1#include<stdio.h> 2#include<time.h> 3#include<math.h> 420 0 19 50 1 16 21 32 60 2 48 12 27 70 3 11 34 17 8(省略) 9 10#define INTBIGNUM 1000 11(省略)

投稿2020/09/10 07:11

ttyp03

総合スコア17000

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

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

Ann99

2020/09/10 16:22

#includeはそのような意味なのですね,, わからずに書いていました. 説明いただいたおかげで理解できました! ありがとうございます.
guest

0

こんにちは。

#include句はCプログラムをコンパイルする時にヘッダーファイル等をプリプロセッサーが取り込む為のものです。
エラーメッセージはコンパイル時のものですね。
一口にエラーといっても実行時やコンパイル時・リンク時など様々です。

先ずは4行目の

C

1#include"network_20.csv"

を削除しましょう。

あとはコードをざっくりとみた感じでコメントします。

fscanf(fp,"%d,%d,%d,,",&nodeNum,&sourceIndex,&sinkIndex);

while (fscanf(fp,"%d,%d,%d,%d,%d",...以下省略
の部分ですが、それぞれ
数値3個・5個をカンマ区切りで取得しようとしていますが、CSVファイルはカンマ区切りではないですね。
多分取得できないと思います。

投稿2020/09/10 06:24

DreamTheater

総合スコア1095

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

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

Ann99

2020/09/10 16:30

なるほど,エラーメッセージにも様々な種類があるんですね,,,勉強になります. csvファイルの中身をコピペしたらここではタブ区切りのように表示されてしまったのですが, 実際のnetwork_20.csvはカンマ区切りだったので,いただいたアドバイスのように修正するとうまくいきました! 回答ありがとうございました!
guest

0

以下の部分が不要です。

C

1#include"network_20.csv"

エラーの内容は
CSVファイルの内容をC言語ソースとして読み込んだため
文法エラーですと言っているだけです。

投稿2020/09/10 06:12

編集2020/09/10 06:15
kay-ws

総合スコア106

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

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

Ann99

2020/09/10 16:21

なるほど.とてもよく分かりました! 回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問