FAQ > 金融建模 > 第三方交互 > Excel

如何将数据通过追加模式写入到本地csv文件中    

  • A:可以通过指定写出模型WriteFile的pos参数为-1,设置为追加模式实现。
    函数说明可参考:FAQ:WriteFile

    如实现一个追加模式将数组写入到本地csv文件中:
      filepath:="D:\\test\\rdData.csv";
      data:=rand(10,array("A","B","C"));//源数据-数组
      rdo2 exportcsv(data,csvStr,0,0);//将t转成csv字符串格式存放到csvStr变量-不带列标
      //导出csvStr-追加模式
      ret := Rdo2 WriteFile(rwRaw(),'',filepath,-1,Length(csvStr),csvStr);
      if ret=1 then
        return '导出成功';
      else
        return Ret; //导出失败

    用记事本打开上述csv文件,内容如下:


    可以看到,csv格式,实质上是一种以纯文本形式存储表格数据的通用文件格式。

    因此,可以通过程序处理,将数据变成符合csv格式的字符串,再将其以追加模式写入csv文件中。

    应用示例:盘中实时写入展示

    下述示例中,FAQ:ExportCsv仅支持NG客户端;若用户使用的是非NG客户端,可自行拼接数据,可以参考FAQ:Q:如何将数据通过追加模式写入到本地txt文件中的实现。

      filepath := "D:\\test\\rdData.csv"; //导出文件
      stocks := array("SZ000002","SH600000");
      flag:=rdo2 FileExists("",filepath);//检测本地文件是否存在
      //实时计算并写出
      while timeof(now())>9.5/24 and timeof(now())<15/24 do
      begin
        t := array();
        for i,stockid in stocks do
        begin
          setsysparam(pn_stock(),stockid);
          t[i,"StockID"]:= stockid;
          t[i,"Date"]:= datetimetostr(rd(-1));
          t[i,"price"]:= rd(6);
          t[i,"amount"]:= rd(7);
          t[i,"macd"]:= floatn(MACD_MACD_v(12,26,9),6); //保留六位小数
        end;
        if flag then
          rdo2 exportcsv(t,csvStr,0,0);//本地文件存在时,只保留数据
        else
        begin
          rdo2 exportcsv(t,csvStr);//本地文件不存在时,保留表头以及数据
          flag:=1;
        end
        ret := Rdo2 WriteFile(rwRaw(),'',filepath,-1,Length(csvStr),csvStr); //此导出为追加模式
        echo "实时写出:",ret;
        sleep(10 * 1000); //等待10秒
      end;
      return "运行结束";

    打开csv文件,效果如下:


    后续文件内容读取
      filepath := "D:\\test\\rdData.csv";
      ret := rdo2 ImportFile(ftCSV(),"",filepath,data);//导入csv文件
      if ret=1 then
        return data;//导入成功,返回导入数据
      else
        return ret;//导入失败,返回异常信息