[問題] 讀 csv 問題
開發平台(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
12/20 01:43, 1F
→
12/20 01:46, , 2F
12/20 01:46, 2F
→
12/20 02:05, , 3F
12/20 02:05, 3F
→
12/20 02:08, , 4F
12/20 02:08, 4F
→
12/20 02:09, , 5F
12/20 02:09, 5F
→
12/20 02:09, , 6F
12/20 02:09, 6F
→
12/20 02:11, , 7F
12/20 02:11, 7F
→
12/20 02:13, , 8F
12/20 02:13, 8F
→
12/20 02:31, , 9F
12/20 02:31, 9F
→
12/20 02:31, , 10F
12/20 02:31, 10F
→
12/20 02:44, , 11F
12/20 02:44, 11F
→
12/20 02:47, , 12F
12/20 02:47, 12F
→
12/20 02:56, , 13F
12/20 02:56, 13F
→
12/20 02:57, , 14F
12/20 02:57, 14F
推
12/20 02:58, , 15F
12/20 02:58, 15F
→
12/20 02:58, , 16F
12/20 02:58, 16F
→
12/20 03:01, , 17F
12/20 03:01, 17F
→
12/20 03:02, , 18F
12/20 03:02, 18F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章