• 締切済み

C++でのcsvファイル読み込みについて

C++でのcsvファイル読み込みについて質問です. 読み込みcsvファイルの規模は300*1000として,その情報をdouble型の2次元配列に格納したいですが,ネットでいろいろ調べたり自分でコードを作ってみてもabort()has been calledなどいくつかエラーが表示されてしまい先に進めません. csvファイル名をa.csv,格納したい2次元配列をA[300][1000]などとしてサンプルコードを提供してくださいますと幸いです. 質問前に散々調べましたがプログラミング初心者でして今現在の力では対応できませんでした.申し訳ありませんが何卒ご教示お願いします.

みんなの回答

  • hymat
  • ベストアンサー率58% (95/162)
回答No.1

C++じゃなくて純然たるCですが、基礎的な手順だけ、ざっくり書いてみました。コンパイル時にスタックの割り当てが必要になるので、配列は縮小してあります。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define ROWS 10 #define COLUMNS 30 int main() { FILE *fp; char buf[1024]; char var[96]; double A[ROWS][COLUMNS]; int i; int j; int r; int c; // とりあえず初期化 for (i = 0; i < ROWS; i++) { for (j = 0; j < COLUMNS; j++) { A[i][j] = 0.0; } } // csvファイル読み込み r = 0; c = 0; fopen_s(&fp,"a.csv", "r"); while (!feof(fp)) { fgets(&buf,sizeof(buf), fp); j = 0; // 1文字ずつ取り込む for (i = 0; i< sizeof(buf); i++) { if (buf[i] == ',' || buf[i] <= 0x0d) { // コンマまたは改行コードがあった時 var[j] = 0; A[r][c] = atof(var); c++; j = 0; if (buf[i] <= 0x0d) { c = 0; break; } } else { if (buf[i] == '"') { ; // 無視 } else { var[j] = buf[i]; j++; } } } r++; } fclose(fp); // 読み込んだデータの表示 for (i = 0; i < ROWS && i<r; i++) { for (j = 0; j < COLUMNS; j++) { printf("%f", A[i][j]); if (j + 1 == COLUMNS) { } else { printf(","); } } printf("\n"); } } ---a.csv "101.5","102.5","103.5","104.5","105.5","106.5","107.5","108.5","109.5","1010.5","1011.5","1012.5","1013.5","1014.5","1015.5","1016.5","1017.5","1018.5","1019.5","1020.5" "111.5","112.5","113.5","114.5","115.5","116.5","117.5","118.5","119.5","1110.5","1111.5","1112.5","1113.5","1114.5","1115.5","1116.5","1117.5","1118.5","1119.5","1120.5" "121.5","122.5","123.5","124.5","125.5","126.5","127.5","128.5","129.5","1210.5","1211.5","1212.5","1213.5","1214.5","1215.5","1216.5","1217.5","1218.5","1219.5","1220.5"

関連するQ&A