1. 程式人生 > >一個空格引發的Bug! ----CSV輸出和CSV讀入

一個空格引發的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"

,",","Low\n"])

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