c - 从 csv 文件读取并分成 C 中的变量

标签 c file csv variables input

我一直在这里寻找答案,但没有找到这个特定问题的解决方案。

我有这个 csv 文件

enter image description here

出于想象力,我应该从此 .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);

}

我可以成功加载第一行,但是当我尝试以某种方式将行切成更小的部分,例如数字,名称,攻击,防御,位置时,它不起作用(或仅将标题切成更小的部分),我尝试过有很多方法,比我这里的方法多,但结果总是相同的...(img 的前两行是不相关的,只是测试 tHrac、创建和编写) enter image description here

我的目的是创建 for 循环,它将加载第一行,将其单独加载到我将用来创建 tHrac 的变量中,然后它跳到下一行和同样的事情......

但是我对 C 的经验很少,所以这就是我攻击你的原因。有人可以帮忙吗?

最佳答案

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

tmp1tmp2 都是指向 char 的指针数组 30 ,传递错误的参数会导致未定义的行为。

如果您需要在为这些数组分配内存后使用它们的单独指针

或者将它们用作 charchar * 的数组,在后一种情况下您需要分配内存,然后将它们传递给 sscanf或fscanf。

注意 - 您还应该检查 sscanffscanf 函数的返回值。

关于c - 从 csv 文件读取并分成 C 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34453211/

相关文章:

c - 为作为结构一部分的字符指针分配内存

Java 从 URL 下载文件名未知的文件

python csv阅读器忽略空白行

python - 将大量数据写入 .csv 文件时,是否经常打开和关闭文件更好?

c - pthread_once_t 变量是否需要互斥体?

c - 在 C 中为 3D 数组分配连续内存

将字符串复制到C中的字符指针

java - 导出后 Eclipse 插件项目中的 ASCII 文件不可见

python - 类型错误 : float() argument must be a string or a number for python

mysql - 由于编码原因,从 CSV 导入 mysql 时省略了行