C 怎麼讀取乙個CSV檔案(自己寫函式實現)

2021-10-05 09:37:05 字數 1461 閱讀 4681

閱讀文章需要的知識:檔案指標file* 。

c語言中也經常需要檔案讀取,但是怎麼讀取半結構化的資料,比如csv檔案(以逗號分割的檔案),網上好像有相應的方法可以直接用,不過比我寫的問題還多,於是,自己瞎搞了乙個讀取這種半結構化資料的函式,當然,也會存在一些問題。這裡的逗號分割符也可以根據自己喜好換成其他的。

直接上**:

#include

#include

void

fun(

)else}}

fclose

(fp);}

intmain()

解讀:

fgets函式讀取一行內容並且存在strline陣列中,item用來存放其中乙個字段,也就是逗號之前需要拿出來的資料,我們每次只是對一行資料進行拆分。這裡需要兩個臨時變數,icnti用來遍歷整個strlinecnt用來記錄其中乙個欄位的偏移量。

這裡需要思路清晰,最難的是cnt這個變數,定義的時候賦初值為0,這個時候開始讀取strline的內容,如果讀到的字元不是",",也就是分割符號,那麼直接賦給item,但是下標呢,這裡應該是cnt,但是要立馬+1,因為下次還要繼續往裡面新增,所以我這裡簡寫為item[cnt++] = strline[i],注意每次進行這個操作,item裡面存了資料的下標其實只到了cnt-1,這個後面會用到,如果說strline裡碰到了乙個",",說明乙個字段已經收集完畢了,就可以對這個字段進行處理了,我這裡是簡單的列印輸出。這個時候需要在item的最後面(存了資料的後面)手動賦乙個』\0』,但是這個最後在item中的下標是哪個呢?注意前面經常說到,讀取完乙個字元後,cnt其實指向的是有資料的後面,就是我們需要手動賦值為』\0』的位置,所以這裡直接是item[cnt]=』\0。表示這個字元陣列的結尾,注意,這裡cnt要馬上賦值為0,因為還要進行下乙個欄位的收集了。到這裡已經處理完畢了!

不能讀取漢字,因為char是乙個位元組,而漢字儲存一般是2個位元組,這個時候如果強行將這個拆成2個字元來讀,顯然我們已經不認識了。

自己寫乙個LIST

pragma once forward declarations templateclass clistnode templateclass clist template class clistnode void insertafter t data template void clistnode ...

自己寫乙個框架

自己寫乙個框架 單入口mvc 類 庫 屬於擴充套件 乙個好的配置檔案和讀取功能 db介面 dispather.php index.php dispather 分析controller action 根據分析controller action 動態載入 引入乙個自動載入機制 controller.ph...

自己寫乙個BaseDao

通過反射可以獲得實體的屬性和類的名字我們就可以拼接處sql語句 查詢的萬能dao public static void select object o 通過物件獲取類物件 class c o.getclass 獲取類中的屬性 field fields c.getdeclaredfields 設定許可...