【问题标题】:Reading from csv file and separating into variables in C从 csv 文件读取并在 C 中分离成变量
【发布时间】:2015-12-24 13:01:01
【问题描述】:

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

我有这个 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 方面的经验很少,所以这就是我要攻击你的原因。有人可以帮忙吗?

【问题讨论】:

    标签: c file csv variables input


    【解决方案1】:
    sscanf(ch, "% [^;]%[^;]", tmp1, tmp2); // parsing whole char *ch into 
    puts(tmp1,tmp2);
    fscanf(soubor, "%c [^;]%s [^;]", tmp3,tmp4); 
    

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

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

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

    注意-您还应该检查 return 的值 sscanf 和 fscanf 函数。

    【讨论】:

      猜你喜欢
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      相关资源
      最近更新 更多