こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

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

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

投稿日時 - 2020-09-05 18:07:55

QNo.9794999

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

C++じゃなくて純然たるCですが、基礎的な手順だけ、ざっくり書いてみました。コンパイル時にスタックの割り当てが必要になるので、配列は縮小してあります。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#defineROWS10
#defineCOLUMNS30

int main()
{
FILE*fp;
charbuf[1024];
charvar[96];
doubleA[ROWS][COLUMNS];
inti;
intj;
intr;
intc;

// とりあえず初期化
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"

投稿日時 - 2020-09-08 22:32:51

あなたにオススメの質問