看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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)
Yshuan:寫lex吧 自己爆的話我可能嘗試畫PDMA 12/20 01:43
tropical72:嗯,便是lex問題,好奇是否大多lex都是逐字去讀? 12/20 01:46
loveme00835:stack 也不差阿 XD 12/20 02:05
tropical72:耶..我知道用stack這方法不差,只是覺得逐字去讀效率很 12/20 02:08
tropical72:差,所以才請教上面提到的csv特例問題,是不是要逐字去讀 12/20 02:09
tropical72:(如果是逐字讀的話,stack的確是較方便實做的我同意) 12/20 02:09
loveme00835:讀進 string 再一個個檢查並不慢吧? 12/20 02:11
tropical72:所以 love 大應也是覺得逐字去讀就可以了吧? 12/20 02:13
loveme00835:如果只是簡單的分辨 '"' 還有 ',', stack 就很夠了, 12/20 02:31
loveme00835:複雜下去沒好處, 而且我也快寫好了 XD 12/20 02:31
loveme00835:花時間在部署上, 也太不划算 0.0 12/20 02:44
loveme00835:不知道有沒有理解錯誤...http://ppt.cc/Vsw5 12/20 02:47
tropical72:http://ppt.cc/H@3Z XD 12/20 02:56
tropical72:oh!! sorry!! 貼錯了 XD 12/20 02:57
loveme00835:@_@ ? 12/20 02:58
tropical72:http://ppt.cc/XQd7 .. 我找一下問題在哪.. 12/20 02:58
loveme00835:我沒有處理前後有空白的~ 你需要trim一下 12/20 03:01
tropical72:謝謝協助,我消化一下,感激不盡 12/20 03:02