C:使用scanf读取CSV文本文件

时间:2014-10-14 15:25:54

标签: c csv scanf

我正在尝试使用scanf()读取CSV文件中的一些值,用于我正在编写的程序。以下是我目前的工作方式:

int i, j, id, time1, time2, time3, type, value;

scanf("%d,%d,%d,%d,%d,%d", &id, &time1, &time2, &time3, &type, &value);
printf("%d", value);

例如,让我们查看此CSV行5, 14:09:01, 1, 1013

scanf()正确地读入idtime1,但之后我得到了其他变量的一些奇怪的值。例如,value显示为32767time2显示为4195536。 有谁知道我做错了什么?

P.S。 :无论如何不是使用time1,time2和time3来获取时间,我可以将其打印为字符串以避免这些额外的变量吗?

1 个答案:

答案 0 :(得分:1)

文件x.csv只包含一行:

5, 14:09:01, 1, 1013

这个简单的代码将为您完成工作 - 时间将作为字符串读入char数组。请注意,这将读取逗号,因此您需要删除它。

#include <stdio.h>
#include <string.h>

int main(void)
{
    int id, type, value;
    char time[100];
    FILE* f = fopen("x.csv", "r");
    fscanf(f, "%d, %s %d, %d", &id, time, &type, &value);
    size_t len = strlen(time);
    time[len-1] = '\0';  // get rid of comma
    printf("%d %s %d %d\n", id, time, type, value);
    fclose(f);
    return 0;
}

输出:

5 14:09:01 1 1013