2017-01-23 1 views
1

현재 C의 배열에 .csv 파일을 읽으려고합니다. 문제를 해결하는 방법에 대해 다소 신경을 쓰고 있습니다. 나는 많은 포럼과 관련 주제를 살펴 봤지만 아직도 이해할 수는 없다. 누군가가 나를 보여 주거나 가능한 한 간단하게 무너 뜨릴 수 있다면. 그것은 크게 감사 할 것입니다. 그런데 .csv 파일의 내용은 다음과 같습니다. 배열은 알파벳과 숫자로 구성되어야합니다. 2 차원 배열을 사용하려고 생각했습니다. 그게 적절한 해결책입니까? 데이터 구조를 정의하여.csv 파일을 C 배열에 저장

A,1 
B,2 
C,3 
.... 
+0

예는 다소 중복 질문, 그리고 난이 일을하기 전에 포럼을 살펴했다. 나는 아직도 그것을 얻지 않는다. – mac

답변

1

시작 :

struct my_record { 
    char name; 
    int value; 
}; 

그런 다음 당신은 다음과 같이 읽을 수는 :

FILE* my_file = fopen(...); 
struct my_record records[100]; 
size_t count = 0; 
for (; count < sizeof(records)/sizeof(records[0]); ++count) 
{ 
    int got = fscanf(my_file, "%c,%d", &records[count].name, &records[count].value); 
    if (got != 2) break; // wrong number of tokens - maybe end of file 
} 
fclose(my_file); 

이제 구조체의 1 차원 배열, 각 행에 대해 하나 있습니다.

+0

행의 항목 수가 다른 경우 어떻게해야합니까? –

+0

@Pluutoniumsmuggler : 그러면 각 줄에'std :: vector '을 저장할 수 있습니다. –

+0

C에는 std :: vectors가 없습니다. 나는 C가 아니라는 것을 의미했다. ++ (질문에서 밝히듯) –

0

설명 된 다른 대답과 마찬가지로 구조체 배열을 만들면됩니다.

당신은 struct 정의 일단 : 문자와 숫자를 포장 등의 불필요한 것 2 차원 배열을 사용하여

record_t records[26]; /* 26 letters in alphabet, can be anything you want */ 

:

typedef struct { 
    char letter; 
    int number; 
} record_t; 

그런 다음이 같은 구조체의 배열을 만들 수 있습니다 struct의 경우 처리하기가 쉽습니다.

파일을 읽는 측면에서 값을 찾을 수 없을 때까지 fscanf()으로 읽을 수 있습니다. 여기

당신이 사용할 수있는 몇 가지 기본 코드 :

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

#define NUMLETTERS 26 

typedef struct { 
    char letter; 
    int number; 
} record_t; 

int main(void) { 
    FILE *fp; 
    record_t records[NUMLETTERS]; 
    size_t count = 0; 

    fp = fopen("letters.csv", "r"); 
    if (fp == NULL) { 
     fprintf(stderr, "Error reading file\n"); 
     return 1; 
    } 

    while (fscanf(fp, " %c,%d", &records[count].letter, &records[count].number) == 2) { 
     count++; 
    } 

    for (size_t i = 0; i < count; i++) { 
     printf("%c,%d\n", records[i].letter, records[i].number); 
    } 

    fclose(fp); 

    return 0; 
}