FAQ > 金融建模 > 第三方交互 > 其他

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

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

    如实现一个追加模式写入到本地txt文件中的过程:
    txtF:="E:\\test\\rdData.txt";
      s:="AAA,2025-05-12 14:45:00,2.18";
      ret:=Rdo2 WriteFile(rwRaw(),'',txtF,-1,Length(s),s);
      if ret=1 then
        return '导出成功';
      else return Ret; //导出失败


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

    txtF:="E:\\test\\rdData.txt"; //导出文件
      stocks:=array("SZ000002","SH600000");
      pstr:="|";//分割符
      //文件初始化-导出表头---若不需要记录表头的,这段可省
      hStr:=array2str(array("StockID","Date","price","amount","macd"),pstr)+"\r\n";//表头-预计导出的列,方便解析
      ret:=Rdo2 WriteFile(rwRaw(),'',txtF,-1,Length(hStr),hStr);//此导出为追加模式
      echo "表头写出:",ret; //1则表示写出成功
      //实时计算并写出
      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;
        //-数组转成串
        datastr:='';
        for i,d in t do datastr+=array2str(d,pstr)+"\r\n";
        ret:=Rdo2 WriteFile(rwRaw(),'',txtF,-1,Length(datastr),datastr);//此导出为追加模式
        echo "实时写出:",ret;
        sleep(10*1000);//等待10秒
      end;
      return "运行结束";

    写出效果:


    后续文本内容读取并解析:
    txtF:="E:\\test\\rdData.txt"; //导出文件
      ret:=Rdo2 ReadFile(rwRaw(),'',txtF,0,100000,datastr);
      //解析串datastr
      data:= str2array(datastr,"\r\n") minus array('');
      data::=str2array(mcell,"|");
      //列名处理
      t:=data[1:];
      reIndex(t,nil,data[0]);
      //字符转数字
      t[:,array("price","amount","macd")]::=StrToFloat(mcell);
      return t;

    效果如下: