【问题标题】:How to read data separated by a ',' in a text file in C [duplicate]如何在C的文本文件中读取由“,”分隔的数据[重复]
【发布时间】:2015-08-08 20:07:27
【问题描述】:

我想知道如何从以逗号分隔数据的文本文件中读取数据;例如文本文件的第 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++;
}

【问题讨论】:

    标签: c file csv text input


    【解决方案1】:

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

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

    [ 说明符匹配您在 [] 中指定的字符集,例如 "%[0-9]" 匹配从 0 到 9 的所有数字,^ 符号告诉 fscanf() 匹配 antything那不是[] 所包含的字符和^ 之后的字符,所以你匹配除了你想要的, 之外的任何字符。

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

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

    【讨论】:

    • 哇,你教了我这么多,我不知道你能做到这一点,非常感谢你,但是由于某种原因它现在没有进入循环?跨度>
    • 然后我需要你从输入文件中发布数据。
    • 数据如下:"Taren Point,10,S" -> 下一行"Ashfield,6,W"
    • 最后一个值不是整数,"%d"读不出来,为什么字段是整数?
    • 非常感谢,愚蠢的错误
    猜你喜欢
    • 2015-07-22
    • 2010-11-07
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多