[算表] VBA 如何匯入資料本身包含逗號的csv檔?

作者: foolkids (翼をください)   2018-06-08 16:08:02
軟體:Office Excel VBA
版本:2010
原本是透過 Line Input將csv檔逐行讀入,並透過Split指令拆成陣列
但是現在的問題是來源資料本身包含逗號,導致Split指令出錯。
目前來源資料如下:
"aaaa","bbbb","cc,cc",1.23,0,"",500,"eee"
字串前後會有""夾住,數字不會有,有逗號的字串出現位置不定...
請問有前輩友好建議的嗎?
作者: soyoso (我是耀宗)   2018-06-08 17:52:00
因要分割的逗號前雙引號的個數為偶數如無合適的方法的話,可迴圈(逐字或逗號),判斷逗號前雙引號個數是否為偶數,是的話,置換其他分割字元。最後再以以新的分割字元來split
作者: foolkids (翼をください)   2018-06-08 17:59:00
謝謝SO大,可是資料筆數不少,不知道這樣會不會影響效能但是我還是會試試看,謝謝!
作者: soyoso (我是耀宗)   2018-06-08 22:13:00
覺得以迴圈和判斷是會影響的如不以迴圈判斷的話,也可以正規表示將,[0-9]和雙引號,取代逗號為其他分隔符號
作者: foolkids (翼をください)   2018-06-08 23:13:00
我有試著想要取代,但是逗號出現的位置沒有規律,所以不知道怎麼取代比較好。像是前後都是數字的逗號跟字串內的逗號其實就分不出來了
作者: soyoso (我是耀宗)   2018-06-08 23:20:00
回文的正規表示是可以將字串內的逗號排除的只針對,數字0-9或,"的部分來取代
作者: foolkids (翼をください)   2018-06-09 05:37:00
呃… 我想不出來怎麼取代,SO大可以解惑嗎? QQhttp://discuz.bestdaylong.com/thread-37799-1-1.html是這個嗎?Pattern?
作者: soyoso (我是耀宗)   2018-06-09 09:32:00
類似該網頁,pattern內以括號包住條件可於取代以$1方式取出;需加上global為truepattern條件會是",([0-9""])";取代為";$1";split以";"
作者: cancelpc (阿吉)   2018-06-15 12:40:00
這個問題是一堆人都沒按照正常 csv 規範產檔。csv 規範中都有這些意外狀況的處理方式。隨便自己寫產出 csv 檔,遇到分隔符號有衝突,就自己亂訂分隔符號,甚至用多個字元當分隔符號。csv 規範中有提到資料裡有 , 時,該怎麼處理。有 " 引號時該怎麼處理。(當然分隔符號可以自訂,但至少規範中都有考慮到,只是遇到很多人只做半套,遇到問題就改定分隔符號,沒去處理。導致一些工具無法處理這些自訂的 csv 格式)

Links booklink

Contact Us: admin [ a t ] ucptt.com