簡體   English   中英

從用C分號分隔的文本文件中讀取不同的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM