繁体   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