簡體   English   中英

如何在C中讀取.csv文件

[英]How to read a .csv file in C

我知道關於此主題還有其他問題,但是我仍然找不到解決問題的方法。

我正在嘗試使用fscanf()函數在C中讀取.csv文件。

如果我使用文本編輯器打開csv文件,它看起來像這樣:

578,2.2212e+05,223,0,243,0,0,0.09,0,0,0,3
633,2.2222e+05,223,0,243,0,0,-0.04,0,0,0,3
688,2.2232e+05,223,0,243,0,0,0.07,0,0,0,3
740,2.2242e+05,223,0,243,0,0,0.04,0,0,0,3
793,2.2252e+05,224,0,244,0,0.01,0.16,0,0,0,3
848,2.2262e+05,223,0,717,0.060985,0.02,0.08,0,0,0,4
902,2.2272e+05,223,0,721,0.084618,0.03,0.24,0,0,0,5
955,2.2282e+05,223,0,730,0.12825,0.05,0.34,0,0,0,4

我剛剛報告了前幾行,但其中包含的內容更多。

然后,我使用以下代碼讀取文件:

FILE* stream = fopen("./filelog.csv", "r");
if(stream == NULL) {      
       printf("\n file opening failed ");      
       return -1 ;   
} 
int values[8];
int count;
for(count = 0; count < 8; count++) {

    int u = fscanf(stream, "%i", &values[count]);
    printf("%i\n", values[count]);
}

我得到的輸出如下:

578
32697
0 
0
1
0
4199901
0

我們可以看到只有第一個值被正確讀取。 如何讀取整個文件並將其存儲到矩陣中? 我在任何地方都找不到任何解決方案。 非常感謝您的提前答復!

您的格式字符串%i解析一個整數,但整數之后的下一個內容是逗號,而您沒有對此進行解析。 在使用返回值之前,應始終檢查返回值,以確保解析成功。

您需要一個與文件的實際內容匹配的格式字符串,例如:

if (fscanf(stream, " %d,%f,%d,%d,%d,%d,%d,%f,%d,%d,%d,%d", ...) == 12)
{
}

在上面的代碼中, ...意思是“在此處放置指向正確類型的12個變量的指針”。 格式字符串前面的空格旨在幫助“消耗”流中的空格(例如換行符)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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