簡體   English   中英

從csv文件讀取並分離為C中的變量

[英]Reading from csv file and separating into variables in C

我一直在這里尋找答案,但是沒有找到針對此特定問題的解決方案。

我有這個csv文件

在此處輸入圖片說明

為了發揮想象力,我應該從.csv文件中創建曲棍球運動員,如下所示:

enum POZICE { UTOCNIK = 'U', OBRANCE = 'O', BRANKAR = 'B' };

typedef struct hrac {

int cislo;
char jmeno[50];
enum POZICE pozice;
int utocnaSila;
int obrannaSila;
struct hrac *dalsi;
} tHrac;

球員的編號,姓名,位置(守門員,防守者等),他的進攻能力,防守能力以及與下一位球員的聯系。

創建方法:

tHrac* vytvorHrace(int cislo, char* jmeno, enum Pozice pozice, int utocnaSila, int obrannaSila) {

tHrac* hrac = (tHrac*)malloc(sizeof(tHrac));
hrac->cislo = cislo;
strcpy(hrac->jmeno, jmeno);
hrac->pozice = pozice;
hrac->utocnaSila = utocnaSila;
hrac->obrannaSila = obrannaSila;
hrac->dalsi = NULL;

}

現在我問題的核心是加載方法

void nactiSeznamHracu() {
char *tmp1[30];
char *tmp2[30];
char *tmp3[30];
char *tmp4[30];
char *ch[255];

int a = 0;

FILE* soubor = fopen(SEZNAM, "r");

fgets(ch, sizeof(ch), soubor);
fputs(ch, stdout);

sscanf(ch, "% [^;]%[^;]", tmp1, tmp2); // parsing whole char *ch into smaller pieces, wont work
puts(tmp1,tmp2);

fscanf(soubor, "%c [^;]%s [^;]", tmp3,tmp4); // without saving first line into ch, and cutting it right away
puts(tmp3);

//token = strtok(ch, "\n");
//puts(token);

}

我可以成功加載第一行,但是當我嘗試以某種方式將行切成較小的部分(例如Number,Name,Attack,Deffence,Position)時,它將行不通(或僅將標題切成較小的部分),我嘗試了很多方法,比我在這里做的要多,但是結果總是一樣的(img的前兩行無關,只是測試了tHrac,創建和編寫) 在此處輸入圖片說明

我的意圖是創建一個周期,在該周期中它將加載第一行,將其單獨加載到變量中,我將使用該變量來創建tHrac,然后跳入下一行和同一件事...

但是我在C方面的經驗很低,所以這就是為什么我要向你求婚。 有人可以幫忙嗎?

sscanf(ch, "% [^;]%[^;]", tmp1, tmp2); // parsing whole char *ch into 
puts(tmp1,tmp2);
fscanf(soubor, "%c [^;]%s [^;]", tmp3,tmp4); 

tmp1tmp2和所有都是char指針的數組30 ,傳遞錯誤的參數將導致未定義的行為。

如果在分配內存給它們之后需要使用這些數組的各個指針

或將它們用作charchar *數組,在后一種情況下,您需要分配內存,然后將它們傳遞給sscanffscanf

–同樣,您還應該檢查sscanffscanf函數的return值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM