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
无法解析空字段
我的数据文件:
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
无法解析空字段