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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
aridai
記事: 34
登録日時: 4年前

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

#1

投稿記事 by aridai » 3年前

以下のcsvファイルがあったとします。

・1桁、もしくは2桁の整数が並んでいる
・コンマでそれぞれの値は区切られている
・横方向に200個の値、縦方向に15個の値をもつ

このファイルを

コード:

#define WIDTH 200
#define HEIGHT 15
int num[HEIGHT][WIDTH];
という
int型の2次元配列に格納していくにはどうすればいいでしょうか。

(Windows8.1 VS2013 C)

アバター
Tatu
記事: 440
登録日時: 8年前
住所: 北海道

Re: csvファイルの読み込みについて

#2

投稿記事 by Tatu » 3年前

配列を用意。
行と列を示す変数を用意。
ファイルを開く。
一文字ずつ読み込む。
数字だったら配列の対応する要素を10倍し、読み込んだ数字を足す。
例:124という数値があったら
1文字目で1
2文字目で1*10+2=12
3文字目で12*10+4=124
となる。
コンマだったら一つ右にずれる。
改行だったら一つ下の一番左にずれる。
ファイル終端(EOF)が来たら読み込み終了。

というようにしてみてはどうでしょうか。

box
記事: 1730
登録日時: 8年前

Re: csvファイルの読み込みについて

#3

投稿記事 by box » 3年前

コード:

1,23,-4,56
78,-9,12,3
-45,6,7,89
というファイル(名前は"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;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

aridai
記事: 34
登録日時: 4年前

Re: csvファイルの読み込みについて

#4

投稿記事 by aridai » 3年前

わざわざソースまで貼っていただきありがとうございました。
無事に出来ました。

閉鎖

“C言語何でも質問掲示板” へ戻る