我的資料檔案:
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。我應該以這種格式使用什么來讀取它以及其他資料?
uj5u.com熱心網友回復:
要決議 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, "1[^,],%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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/483060.html
上一篇:隨機字符java
