问题引出:
(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