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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

14229閲覧

CSVからデータを読み込んでその数値を用いたい.

rosbergf1

総合スコア13

CSV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/08/31 17:06

編集2018/08/31 18:11

前提・実現したいこと

CSVファイルを読み込んで, 読み込んだ値を変数に代入したい.

CSVファイルからデータを読み込んで, 読み込んだ値を代入したいのですが, いまいち方法がわかりません.
CSVファイルのフォーマットは, 1分ごとのデータ(177項目, 最後の項目のあとは改行されている)が1440個となっていて
この中から, 分毎に1~12, 40, 41, 43, 51, 53, 72, 80, 82, 92項目目(計21項目)の値を代入したいです.
(つまり, 1440×21個のデータを用いたい)

発生している問題

csvファイルの中の値を用いたいが, どのようにすればよいかわからない.

### ソースコードの一部 //TS[i][j]はiが時間, jがj項目目としています. while( (t = fscanf(fp, "%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf", &f[0],&f[1],&f[2],&f[3],&f[4],&f[5],&f[6],&f[7],&f[8],&f[9],&f[10],&f[11],&f[12],&f[13],&f[14],&f[15],&f[16],&f[17],&f[18],&f[19],&f[20])) != EOF ){ TS[i][j] = f[j]; j++; if(j == 21) { if(i == 1440-1) break; j = 0; i++; } } ```C++ ### 試したこと csvファイルを必要なデータだけに編集して, fscanfでやってみましたが, csvファイル自体が100個近くあり, 現実的でありません. また, fscanfもfscanf("%lf,%lf,.....,%lf")となり, これまた現実的でないような気がしました.

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

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

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

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

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

guest

回答2

0

「一行分を文字列として読みこみ、カンマで切り分ける」を繰り返す。

コレが参考になるかな?

投稿2018/08/31 20:54

episteme

総合スコア16614

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

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

rosbergf1

2018/09/04 14:10

回答有り難うございます。 1行分を文字列として読み込むということを利用して、試行錯誤した結果うまくいきました。
guest

0

自己解決

C++

1/*csvファイルを読み込み*/ 2void csvload(char filename[], std::vector<double>& TS) { 3 int i; 4 char c[10000]; 5 char *c1; 6 char *ends; 7 char s[] = " ,\n";//カンマ、スペース、改行 8 /*ファイルオープン*/ 9 FILE *fp; 10 if ((fp = fopen(filename, "r")) == NULL) { 11 printf("Can't open file.\n"); 12 abort(); 13 } 14 //1行分を文字列としてcに読み込む 15 while ( (fgets(c, sizeof(c), fp)) != NULL) { 16 //c1にカンマ、スペース、改行で区切った文字列を代入 17 c1 = strtok(c, s); 18 while(c1 != NULL) { 19 //TSにc1の文字列をdoubleに型変換して代入 20 TS.push_back(strtod(c1, &ends)); 21 //NULL文字で終わり 22 c1 = strtok(NULL, s); 23 } 24 } 25 fclose(fp); 26}

投稿2018/09/04 14:15

rosbergf1

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問