2017-01-23 59 views
1

現在、C言語の配列に.csvファイルを読み込もうとしています。私はこの問題にどのように接近していくのかについては多少の違いがあります。私は多くのフォーラムや関連トピックを見てきましたが、私はまだそれを把握することはできません。誰かが私を見せたり、できるだけ簡単に分解したりすることができたら。それは非常に高く評価されます。ちなみに、.csvファイルの内容は次のとおりです。配列は、アルファベットと数字だけで構成されている必要があります。私は2-D配列を使うことを考えていました。それは適切な解決策ですか?あなたのデータ構造を定義することでC言語の配列に.csvファイルを読み込む

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

はい、それは多少の重複問題だ、と私はこの1つを作る前にフォーラムを見てみました。私はまだそれを取得しません。 – 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次元配列、各行に1つを持っています。

+0

行のエントリ数が異なる場合はどうすればよいですか? –

+0

@Pluutoniumsmuggler:各行に 'std :: vector 'を格納することができます。 –

+0

Cにはstd :: vectorsがありません。私はCを意味しませんでした。++(質問によると) –

0

説明されている他の答えと同じように、構造体の配列を作成できます。

あなたはstruct定義したら:

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

を次にあなたがこのような構造体の配列を作成することができます。

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

を2次元配列を使用すると、不要になり、文字と数字を包むよう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; 
} 
関連する問題