一个空格引发的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值