CSVファイルの読み込み
以下のようなCSVファイルを読み込みたいと思っています。
0.575092,0.030525
0.565324,0.018315
0.555556,0.013431
0.553114,0.013431
0.54823,0.015873
0.538462,0.013431
0.531136,0.006105
0.52381,-0.003663
0.516484,-0.010989
0.501832,-0.015873
0.489622,-0.018315
0.477412,-0.020757
0.46276,-0.020757
・
・
・
50000*2のデータで、以下のようなプログラムを使用しました。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 確保するデータ保存領域の大きさ(N行×M列) */
#define N 50000
#define M 2
/* データの区切り文字 */
#define SEP_DATA ','
int csv_read(char filename[], double csv[N][M]) {
/* ファイルオープン */
FILE *fp;
if( (fp = fopen(filename, "r")) == NULL ) {
printf(" file open error!!\n");
return -1;
}
/* 1行毎に読み出し */
char line[256], *ptr;
int i, j, k;
i=0;
while (fgets(line, 256, fp) != NULL) {
printf("*%s", line);
ptr = line; j=0;
do{
/* line[j]から次のタブ文字までを数値に変換 */
csv[i][j] = atof(ptr);
/* 次のタブ文字の位置を探す */
ptr = strchr(ptr, SEP_DATA);
/* タブ文字の次の文字を示す */
if (ptr!=NULL) { ptr++; }
j++;
}while(ptr!=NULL && j<M);
i++;
}
/* ファイルクローズ */
fclose(fp);
return 0;
}
int main(int argv, char *argc[]) {
char filename[256];
if( argv > 1){
strcpy(filename, argc[1]);
} else {
printf("Please Input Filename:");
scanf("%s", filename);
}
/* データ保存用の領域を確保 */
double (*csvdata)[M];
csvdata = (double(*)[M])malloc(sizeof(csvdata) * N);
if ( csvdata == NULL ){
return -1;
}
int i,j;
/* 配列の初期化 */
for( i=0; i<N; i++) {
for( j=0; j<M; j++) {
csvdata[i][j] = 0.0;
}
}
/* CSVデータの読み込み */
if( csv_read(filename, csvdata) < 0 ) {
return -1;
}
/* 配列の出力 */
for( i=0; i<N; i++) {
printf("%lf", csvdata[i][0]);
for( j=1; j<M; j++) {
printf("\t%lf", csvdata[i][j]);
}
printf("\n");
}
free(csvdata);
csvdata = NULL;
return 0;
}
しかし、コンパイルは通るのですが実行時にエラーが出てしまいます。
データの大きさに問題があると思うのですが、原因がわかりません。おかしな所のご指摘を頂きたいです。よろしくお願いします。
お礼
解決しました。
補足
コンパイラはVC++2005です。 = を使用すると、構造体型に変換されているようです。