一個空格引發的Bug! ----CSV輸出和CSV讀入
問題引出:
(1) 為了維護一個巨大的資料表的完整性,前期由於資料表中有缺損,不全,所以把資料表進行重新被全。
做法:把不全的表的資料先匯入,然後再讀出需要補充的資料,然後並表,再輸出成CSV, 供平時呼叫。
(2)由於原來維護全是用MATLAB去維護,JULIA中輸出CSV的報表,不再進行讀入操作,所以一直沒有注意。此次換成JULIA讀入原JULIA輸出的CSV,結果發現有問題。
問題:
1、一切看起來非常正常,看似完美的輸出CSV,開啟CSV的格式,每個欄位都非常正常,全是數值格式。
2、但是,讀入CSV時,就發現,裡面有一些欄位既不是Float64, 也不是String, 而是SubString! 而我需要用parsefloat()進行轉換也一直報錯,因為只接受String型別!
後來查了N久,發現是在CSV輸出函式中,多寫了一個空格。
write(stream,",")# ""中不留空格!否則可以讀出來不能正常轉成FLOAT64!
附:輸出CSV函式:---已修正!
###############################
functionwriteBarDataToInputFormatCSV(filepath::String,data::Array{kBarData,1})
#bar格式:kb=kBarData(Code,DateTime,Close,Open,High,Low,PreClose,OpenInterest,Volume,Amount)
#StockCode[1]DateTime[2]Close[3] Open[4]PreClose[5]Amount[6]Volume[7]High[8]Low[9]
stream=open(filepath,"w")
#kBarData(Code,DateTime,Close,Open,High,Low,PreClose,OpenInterest,Volume,Amount)
write(stream,["Code",",","DateTime",",","Close", ",","Open",",","PreClose",",","Amount",",","Volume", ",","High"
for kbar in data
write(stream,kbar.Code)
write(stream,",")#‘’中不留空格!否則可以讀出來不能正常轉成FLOAT64!
write(stream,getStandardDateTimeString(kbar.DateTime))#標準的輸出方式
write(stream,",")
write(stream,string(kbar.Close))
write(stream,",")
write(stream,string(kbar.Open))
write(stream,",")
write(stream,string(kbar.PreClose))
write(stream,",")
write(stream,string(kbar.Amount))
write(stream,",")
write(stream,string(kbar.Volume))
write(stream,",")
write(stream,string(kbar.High))
write(stream,",")
write(stream,string(kbar.Low))
write(stream,"\n")
end
close(stream)
end