C言語関係掲示板

過去ログ

No.383.CSV形式のファイルを構造体に入れたい

[戻る] [ホームページ]
No.2565

ファイルから読み込んだデータを構造体に入れるには
投稿者---健一(2002/09/02 23:43:09)


ファイルから読み込んだデータを構造体に入れたいのですが
どうすればよいのですか。
カンマで区切られたCSV形式のファイルで、以下の様な形式です。
A00001,,2002.09.02
A00002,,2002.09.02
000003,AA,2002.09.02
000004,22,2002.09.02

#define MAX_DATA 100
typedef struct {
char user_no[7] ;
char code[3] ;
char mk_date[11] ;
} TMEP_DATA ;

TEMP_DATA temp_data[MAX_DATA] ;

構造体にファイルから1レコードずつ読み込んで、設定したい
のですが、どうすればよいのですか。

No.2568

Re:ファイルから読み込んだデータを構造体に入れるには
投稿者---かずま(2002/09/03 10:37:46)

#include <stdio.h>

#define MAX_DATA 100

typedef struct {
    char user_no[7];
    char code[3];
    char mk_date[11];
} TEMP_DATA;

TEMP_DATA temp_data[MAX_DATA];

char *setvalue(char *s, char *t, int size)
{
    char *e = t + size - 1;
    while (t < e && *s != '\0'  && *s != ',' && *s != '\n')
        *t++ = *s++;
    *t = '\0';
    return s;
}

int main()
{
    char buf[1024], *p;  int i, n;

    for (n = 0; n < MAX_DATA && fgets(buf, sizeof buf, stdin); n++) {
        p = setvalue(buf, temp_data[n].user_no, 7);
        if (*p != ',') break;
        p = setvalue(p+1, temp_data[n].code, 3);
        if (*p != ',') break;
        p = setvalue(p+1, temp_data[n].mk_date, 11);
        if (*p != '\n') break;
    }
    for (i = 0; i < n; i++) printf(":%-6s:%-2s:%-10s:\n",
        temp_data[i].user_no, temp_data[i].code, temp_data[i].mk_date);
    return 0;
}