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;//导入失败,返回异常信息
