[英]Reading different data from a textfile delimited with semicolons in C
如何將用分號分隔的不同數據記錄讀入C數組中?
來自文本文件: 文本一; 12.25; 文本二; 5; 案文三; 1.253
fopen ...
for(i = 0; i < nrRecords; i++) {
fscanf(myFile, " %[^;];", myRecords[i].firstText); /* Ok first text*/
fscanf(myFile, "%lf", &myRecords[i].myDouble1); /* But goes wrong with first double */
fscanf(myFile, " %[^;];", myRecords[i].secondText);
fscanf(myFile, "%d", &myRecords[i].myInt1);
fscanf(myFile, " %[^;];", myRecords[i].thirdText);
fscanf(myFile, "%lf",&myRecords[i].myDouble2);
}
fclose...
通常的建議是先讀取整行,然后使用sscanf或strtok或其他任何內容對其進行解析。 如果直接從文件中掃描,那么很容易在輸入文件中丟失位置。 (即,第一次不匹配時,您需要一種跳過它的方法,除非您想在那里放棄。)
我將使用fgets
從文件中讀取一行,使用strtok
在分號上將其斷開,使用strcpy
復制字符串,使用strtod
轉換為double並使用strtol
轉換為long(然后轉換為整數)。
或者,閱讀該行並使用狀態機遍歷每個字符並執行正確的操作。 例如,將要復制每個字符到firstText,直到到達分號為止,然后使用strtod
來吃掉double字符,跳過分號,將字節復制到secondText等。
或者,使用單個scanf格式字符串將行分為所有字段
fscanf(myFile, " %[^;];%lf;%[^;];%d;%[^;];%lf",
myRecords[i].firstText,
&myRecords[i].myDouble1,
myRecords[i].secondText,
&myRecords[i].myInt1,
myRecords[i].thirdText,
&myRecords[i].myDouble2);
並且,正如其他人所述,檢查fscanf
的返回值。
我更喜歡一次閱讀一行,以免出現一條壞的一行搞亂了隨后的所有轉換。
一種方法是使用strtok 。 然后以int或float形式轉換結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.