fscanf 以相同的方式读取另一种格式 file.csv

fscanf read another format in same file.csv

我的数据文件:

name/month/date/year
1.Moore Harris,12/9/1995
2.Ragdoll Moore,11/5/2022
3.Sax,Smart,3/1/2033
4.Robert String,9/7/204
bool success = fscanf(fptr, "%[^,]", nameEmploy) == 1;
bool success = fscanf(fptr, ",%d", &month) == 1;

我只能读到1,2,4然后程序就跳过了No.3。 我应该使用这种格式将其与其他数据一起读取吗?

解析CSV文件,建议使用fgets()一次读取一行,使用sscanf()一次解析所有字段:

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

struct data {
    char name[32];
    int month, day, year;
};

int parse_csv(FILE *fp) {
    char buf[256];
    char c[2];
    struct data entry;
    int count = 0;

    while (fgets(buf, sizeof buf, fp)) {
        if (sscanf(buf, "%31[^,],%d/%d/%d%1[\n]",
                   entry.name, &entry.month, &entry.day, &entry.year, c) == 5) {
            add_entry(&entry);
            count++;
        } else {
            printf("invalid line: %.*s\n", (int)strcspn(buf, "\n"), buf);
        }
    }
    return count; 
}

但是请注意这些缺点:

  • 超过 254 字节的行将导致错误
  • 字段不能被引用
  • name 字段不能包含 ,
  • sscanf
  • 无法解析空字段