以下のcsvファイルがあったとします。
・1桁、もしくは2桁の整数が並んでいる
・コンマでそれぞれの値は区切られている
・横方向に200個の値、縦方向に15個の値をもつ
このファイルを
という
int型の2次元配列に格納していくにはどうすればいいでしょうか。
(Windows8.1 VS2013 C)
csvファイルの読み込みについて
Re: csvファイルの読み込みについて
配列を用意。
行と列を示す変数を用意。
ファイルを開く。
一文字ずつ読み込む。
数字だったら配列の対応する要素を10倍し、読み込んだ数字を足す。
例:124という数値があったら
1文字目で1
2文字目で1*10+2=12
3文字目で12*10+4=124
となる。
コンマだったら一つ右にずれる。
改行だったら一つ下の一番左にずれる。
ファイル終端(EOF)が来たら読み込み終了。
というようにしてみてはどうでしょうか。
行と列を示す変数を用意。
ファイルを開く。
一文字ずつ読み込む。
数字だったら配列の対応する要素を10倍し、読み込んだ数字を足す。
例:124という数値があったら
1文字目で1
2文字目で1*10+2=12
3文字目で12*10+4=124
となる。
コンマだったら一つ右にずれる。
改行だったら一つ下の一番左にずれる。
ファイル終端(EOF)が来たら読み込み終了。
というようにしてみてはどうでしょうか。
Re: csvファイルの読み込みについて
というファイル(名前は"test.csv")を読んでその内容を出力するサンプルコードです。
行・列を適当に拡張したりファイル名を適切に変更したりしてください。
行・列を適当に拡張したりファイル名を適切に変更したりしてください。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define WIDTH (4)
#define HEIGHT (3)
#define LENGTH (500) // 適切に決める
void openFile(FILE **fp)
{
*fp = fopen("test.csv", "r");
if (*fp == NULL) {
puts("file open error");
exit(1);
}
}
void readFile(FILE *fp, int (*num)[WIDTH])
{
char s[LENGTH], *dlm = ",", *p, *q;
int i, j;
for (i = 0; i < HEIGHT; i++) {
fgets(s, LENGTH, fp);
for (j = 0, q = s; j < WIDTH; q = NULL, j++) {
p = strtok(q, dlm);
num[i][j] = strtol(p, NULL, 10);
}
}
}
void printData(int (*num)[WIDTH])
{
int i, j;
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
printf("%d%s", num[i][j], (j == WIDTH - 1) ? "" : ",");
}
putchar('\n');
}
}
void closeFile(FILE *fp)
{
fclose(fp);
}
int main(void)
{
int num[HEIGHT][WIDTH];
FILE *fp;
openFile(&fp);
readFile(fp, num);
printData(num);
closeFile(fp);
return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。