作者tropical72 (藍影)
看板C_and_CPP
標題Re: [問題] 讀 csv 問題
時間Mon Dec 20 07:15:20 2010
原文恕刪.. 在此先再次感謝 love 大協助處理!!
說聲抱歉的是,一開始竟然對 csv 的特性沒抓準。
確認符號: 單引號(') 雙引號(") 逗號(,)
以下是我直接從 M$ excel 存成 csv 結果之整理:
1. 若為純文字、數字,且其中不包含雙引號、單引號、逗號,
則直接以逗號分隔。
2. 若該格無任何內容,則直接跳過該格,即會出現連續二個逗號。
(這點和 wiki 上不同, wiki 指明,若無內容會以 ,"", 方式存)
3. 若該格內容有雙引號或逗號,則將為該儲存格加上雙引號,
同時用 notepad 檔開啟結果,會發現原本的雙引號會以 2個雙引表示
ex: 12"27"53(excel 顯示) ---> "12""27""53"(csv文本)
4. 若該格內容「開頭」有單引號,excel 存完後開頭之單引都將不見
ex: '12'34'(excel 也無法顯示第一個單引號)
----> 12'34'(csv 文本儲存)
整理上述四點,FSM 狀態大致上長這樣:
CurrentState ch NextState Action
IDLE - First -
--------------------------------------------
First , NOTHING -
First " Quote0 -
First 0 ReadEnd - #end
First else PureText -
---------------------------------------------
PureText , IDLE -
PureText else PureText Output ch
----------------------------------------------
NOTHING - IDLE - (or output NULL)
----------------------------------------------
Quote0 " Quote1 -
Quote0 else Quote0 Output ch
----------------------------------------------
Quote1 " Quote0 Output "
Quote1 , IDLE -
----------------------------------------------
花了一點小時間畫了 FSM (
http://ppt.cc/tsJ6 )
由於沒經驗,畫得也真的有點小亂(也是醜啦)
不知對於這張 FSM 是否有其它建議?
這種方式在效率而言是否會慢許多?
(沒問題的話晚上我再 coding 出來跟大家做分享)
亦或差不了多少?謝謝各位版友不吝指教,再次感謝!!
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: tropical72 來自: 180.177.76.142 (12/20 07:37)
推 nowar100:這篇FSM值得留存下來 :) 12/20 11:56
→ loveme00835:原來你是要做還原喔 囧rz 12/20 11:56
推 Yshuan:推這篇~ 原po厲害~ 12/20 13:04
推 loveme00835:我的話, 還是會把 ',' 的部份分開來做, 欄位切出來再 12/20 13:22
→ loveme00835:做第二次處理, FSM也會比較簡單 12/20 13:22
→ loveme00835:剛發現到的問題, 第三點是不是即為: 將欄位中的 ""取 12/20 13:40
→ loveme00835:代成 ", 之後再將頭尾的 " 去掉? 12/20 13:41
→ tropical72:!! 是的,就是 loveme00835 大所說的,之前還沒想到說. 12/20 18:11
→ tropical72:不過如果先把','分開的話,那可能會有這種情形 ,",", 也 12/20 18:16
→ tropical72:就是內容本身就是逗號,所以我覺得這樣的話就沒很準了. 12/20 18:16
→ loveme00835:每個欄位容許偶數個 ", 上一篇我就是這樣做 XD 12/20 20:16
→ tropical72:加上上面的條件的確簡單蠻多的. 12/20 20:54
→ liang1:期待原po的code分享 12/28 01:31