[問題] 讀 csv 問題

看板C_and_CPP (C/C++)作者 (藍影)時間15年前 (2010/12/20 01:39), 編輯推噓2(2016)
留言18則, 3人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, Gcc, Linux, ...) vs2008 + xp 餵入的資料(Input): Name,Score1,Score2,Score3 "John",99,99,99 "Tom",100,100, "Mary",,, "Frank",50,, 程式碼(Code): (請善用置底文標色功能) #define BUF_SIZE 2000 char *ptr=NULL; char buffer[BUF_SIZE]; while(gets(buffer, BUF_SIZE)!=NULL){ ptr = strtok(buffer, ","); while(ptr!=NULL){ // printf("%s\n", ptr); ptr = strtok(NULL, ","); } } 補充說明(Supplement): (1) strtok 限制 如上範例與原始檔,使用 strtok 時, 如果出現連續的分隔符號其實判斷不出來, 我想知道有沒有其它辦法可以判斷有些欄位是沒有填東西的。 (2) 其它 "想像" 中的方法 目前我想用 strchr 方式去做類似的事 ptr1 = strchr(buffer, ','); ptr2 = strchr(ptr1+1, ','); printf("%s\n", buffer); while(ptr1!=NULL){ // printf("%s\n", ptr2-ptr1); // 想做類似上面這行這種事,但不知該如何表示, // 還是只能用 memcpy 方式先複製到另一 buffer,再印出來? ptr1 = strchr(ptr1+1, ','); if(ptr1!=NULL) ptr2 = strchr(ptr1+1, ','); } (3) 若 csv 裡面欄位還有雙引號+逗號(逗號必在雙引內)的話.. Name,Age,Comment "John",18," "年輕" " ---> 第三欄有雙引 " "Mary" ",6, "太,小" ---> 第一欄有雙引,第三欄有逗號 " "Frank" ", 30, " ""年輕,力壯"" " ---> 第一欄一次雙引, 第三欄二次雙引+逗號 如果要去分出來的話,目前我想到的也只是逐字去讀 + stack 方式, 不知是否有人有更好的想法?不一定要是用 string.h 的東西 用 C++ 的 stringstream 也可以!! 以上,請各位先進不吝賜教,感激不盡!! -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.142 ※ 編輯: tropical72 來自: 180.177.76.142 (12/20 01:42)

12/20 01:43, , 1F
寫lex吧 自己爆的話我可能嘗試畫PDMA
12/20 01:43, 1F

12/20 01:46, , 2F
嗯,便是lex問題,好奇是否大多lex都是逐字去讀?
12/20 01:46, 2F

12/20 02:05, , 3F
stack 也不差阿 XD
12/20 02:05, 3F

12/20 02:08, , 4F
耶..我知道用stack這方法不差,只是覺得逐字去讀效率很
12/20 02:08, 4F

12/20 02:09, , 5F
差,所以才請教上面提到的csv特例問題,是不是要逐字去讀
12/20 02:09, 5F

12/20 02:09, , 6F
(如果是逐字讀的話,stack的確是較方便實做的我同意)
12/20 02:09, 6F

12/20 02:11, , 7F
讀進 string 再一個個檢查並不慢吧?
12/20 02:11, 7F

12/20 02:13, , 8F
所以 love 大應也是覺得逐字去讀就可以了吧?
12/20 02:13, 8F

12/20 02:31, , 9F
如果只是簡單的分辨 '"' 還有 ',', stack 就很夠了,
12/20 02:31, 9F

12/20 02:31, , 10F
複雜下去沒好處, 而且我也快寫好了 XD
12/20 02:31, 10F

12/20 02:44, , 11F
花時間在部署上, 也太不划算 0.0
12/20 02:44, 11F

12/20 02:47, , 12F
不知道有沒有理解錯誤...http://ppt.cc/Vsw5
12/20 02:47, 12F

12/20 02:56, , 13F
12/20 02:56, 13F

12/20 02:57, , 14F
oh!! sorry!! 貼錯了 XD
12/20 02:57, 14F

12/20 02:58, , 15F
@_@ ?
12/20 02:58, 15F

12/20 02:58, , 16F
http://ppt.cc/XQd7 .. 我找一下問題在哪..
12/20 02:58, 16F

12/20 03:01, , 17F
我沒有處理前後有空白的~ 你需要trim一下
12/20 03:01, 17F

12/20 03:02, , 18F
謝謝協助,我消化一下,感激不盡
12/20 03:02, 18F
文章代碼(AID): #1D3aDRVS (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1D3aDRVS (C_and_CPP)