在MT4的EA或者脚本编写中,往往会用到文件的读取。
文件作为数据中转,是比较传统,也是比较直接的方式,当然对比于数据库还是不能相提并论的。目前市面上比较流行的跟单软件恰恰就是用的文件来存储数据,其实效率是很难保证的。
今天主要讲解一下如何读取CSV 文件中的数据
文件内容如下,这是一个csv 格式的文件内容,一般csv 用"," 作为间隔符是最好的,因为用Excel就能直接打开,今天用"*"来进行间隔。
174599633*USDJPY*0*0.04*0*0**0*1661526746*136.981*0.72952763
174596735*USDJPY*0*0.02*0*0*from #174596731*0*1661523219*136.883*0.72952763
174596504*USDJPY*0*0.01*0*0**0*1661522825*136.885*0.72952763
以上就是跟单软件中的信号源写入持仓单子的文件,如果要读取每一行,应该怎么读取呢?
直接上代码:
void read_file()
{
int closefile_handle;
closefile_handle=FileOpen("10018175666.csv",FILE_CSV|FILE_READ|FILE_SHARE_WRITE|FILE_SHARE_READ,"\n");
string xinhaoyuan_closeneirong="";
if(closefile_handle>0)
{
int closestr_size;
string close_neirong;
int jishuqi =0;
while(!FileIsEnding(closefile_handle))
{
//--- 找到这个文件的大小
closestr_size=FileReadInteger(closefile_handle,INT_VALUE);
//--- 读取所有的字符串
close_neirong=FileReadString(closefile_handle,closestr_size);
//---进行录入
xinhaoyuan_closeneirong = xinhaoyuan_closeneirong+close_neirong+",";
jishuqi++;//---记录行数
}
Alert(jishuqi);
FileClose(closefile_handle);
Alert(xinhaoyuan_closeneirong);
}
}
int OnInit()
{
read_file();
return(INIT_SUCCEEDED);
}
结果:
174599633*USDJPY*0*0.04*0*0**0*1661526746*136.981*0.72952763,174596735*USDJPY*0*0.02*0*0*from,#174596731*0*1661523219*136.883*0.72952763,174596504*USDJPY*0*0.01*0*0**0*1661522825*136.885*0.72952763,
再对这个结果进行解析就好了
一定要注意:
closefile_handle=FileOpen("10018175666.csv",FILE_CSV|FILE_READ|FILE_SHARE_WRITE|FILE_SHARE_READ,"\n");
这一行代码用的 间隔符 是"\n";这个就是以行为单位进行分割。如果用的"*"进行分割,那得到的就是每一项。
得到每一行的信息,才是我们需要的