如何读取由','分隔的数据?在C中的文本文件中

时间:2015-05-26 23:19:55

标签: c file csv text input

我想知道如何从文本文件中读取数据,该文件的数据用逗号分隔;例如,文本文件的第1行说: (名称,整数,整数)。

所以我尝试使用此代码来读取代码,但它没有工作:

while (fscanf(ifp, "%15s,%d,%d", stationName, &stationDistance, &stationDirection ) == 2) {
    strcpy(q[fileCounter].name, stationName);
    q[fileCounter].distance = stationDistance;
    q[fileCounter].direction = stationDirection;
    printf ("Station Name: %s \t Distance to Central: %d \t Direction from Central: %d \n", q[fileCounter].name, q[fileCounter].distance, q[fileCounter].direction);
    fileCounter++;
}

1 个答案:

答案 0 :(得分:2)

如果Name包含空格,那么您使用的格式说明符将停在那里并失败,您需要

while (fscanf(ifp, "%15[^,],%d,%d", 
           stationName, &stationDistance, &stationDirection) == 3)
 {
 }

[说明符与您在[]中指定的字符集匹配,例如"%[0-9]"匹配09的所有数字,{ {1}}符号告诉^匹配不是fscanf()所包含的字符并跟随[]的antything,因此您匹配除^之外的任何内容你想要的。

相比之下,,说明符消耗所有字符,直到出现15个字符或"%15s"中出现空格字符,这就是为什么我认为您的isspace(chr) != 0只匹配两个这三个价值观。

您正在比较fscanf()fscanf()的返回值,而不是2,我猜是因为它返回3而不是2而您知道,因为否则没有输入循环,这是一件非常糟糕的事情,因为你导致了未定义的行为,因为3可能尚未初始化这三个参数之一,您使用scanf()复制名称并存储整数。