本组函数用于处理文件。
存放工作文件的三个目录(含子目录)分别是:
/HISTORY/<当前经纪商> – 特别提供的FileOpenHistory函数:
/EXPERTS/FILES – 公用目录;
/TESTER/FILES – 测试专用。
禁止访问来自于其他目录的工作文件。
FileClose() – 关闭文件
FileDelete() – 删除文件
FileFlush() – 清除文件缓冲区并存盘
FileIsEnding() – 判断文件指针是否到文件尾
FileIsLineEnding() – 判断文件指针是否指向行尾
FileOpen() – 打开文件
FileOpenHistory() – 打开历史目录下文件
FileReadArray() – 文件读取到数组
FileReadDouble() – 从文件读取浮点型数据
FileReadInteger() – 从文件读取整型数据
FileReadNumber() – 从文本文件读取数值
FileReadString() – 从文件读取字符串
FileSeek() – 移动文件指针
FileSize() – 获取文件大小
FileTell() – 获取文件指针位置
FileWrite() – 写入CSV文件
FileWriteArray() – 数组内容写入文件
FileWriteDouble() – 双精度数值写入文件
FileWriteInteger() – 整型数值写入文件
FileWriteString() – 字符串写入文件
void FileClose(int handle)
关闭之前用FileOpen()函数打开的文件。
参数:handle - FileOpen() 函数 返回的文件句柄
示例:
int 句柄 = FileOpen("filename", FILE_CSV|FILE_READ);
if( 句柄 >0){
//。。。一些工作...
FileClose(句柄);
}
void FileDelete(string filename)
删除指定的文件。
如果想获取详细的错误信息,请调用 GetLastError() 函数。如果文件是在terminal_ dir\experts\files日录(在测试情况下,terminal_ directory\tester\files)或它的子目录,仅仅删除这个文件。
参数:filename - 目录和文件名。
示例:
// 将目录 terminal_dir\experts\files directory 下的 my_table.csv 文件删除
FileDelete("my_table.csv");
int 错误 =GetLastError();
if( 错误 !=ERR_NOERROR){
Print("当删除 my_table.csv文件时发生了一个错误 (", 错误 ,") ");
return(0);
}
void FileFlush(int handle)
清除缓存中数据并存到磁盘上。
注: 该函数只能在文件读写操作中调用。
文件关闭时,数据将自动保存到磁盘,因此,在调用 FileClose() 函数之前没有必要调用 FileFlush() 函数。
参数:handle - FileOpen()函数 返回的文件句柄。
示例:
int 总棒数= Bars;
int 句柄= FileOpen("K线数据.csv", FILE_CSV|FILE_WRITE);
if(句柄>0){
FileWrite(句柄, "第#","开盘价","收盘价","最高价","最低价");
for(int i=0; i<总棒数; i++)
FileWrite(句柄, i+1, Open[i], Close[i], High[i], Low[i]);
FileFlush(句柄);
...
for(int i=0; i<总棒数; i++)
FileWrite(句柄, i+1, Open[i], Close[i], High[i], Low[i]);
FileClose(句柄);
}
bool FileIsEnding(int handle)
判断文件指针是否到文件尾
如果文件指针是在文件尾,返回true,否则,返回false。
如果想获取详细的错误信息,请调用 GetLastError() 函数。如果文件指针在只读期间到达文件尾,GetLastError() 函数将 返回错误 ERR_END_OF_FILE(4099)。
参数:handle - FileOpen()函数 返回的文件句柄。
示例:
if(FileIsEnding(h1))
{
FileClose(h1);
return(false);
}
bool FileIsLineEnding(int handle)
判断文件指针是否指向行尾
如果CSV文件指针指向行末,返回true,否则,返回false。
如果想获取详细的错误信息,请调用 GetLastError() 函数。
参数:handle - FileOpen()函数 返回的文件句柄。
示例:
if(FileIsLineEnding(h1))
{
FileClose(h1);
return(false);
}
int FileOpen( string filename, int mode, void delimiter)
为输入或输出信息而打开文件。如果打开文件成功,返回句柄,否则,返回-1。如果想获取详细的错误信息,请调用 GetLastError() 函数。
注:文件只能在terminal_ directory\experts\files文件夹(智能交易测试在terminal_directory\tester\files目录)或子目录内被打开。
FILE_BIN 和 FILE_CSV 格式不能同时使用。
如果FILE_WRITE 与FILE_READ不组合使用,打开的文件长度为零。如果文件包含数据,它们能被删除。如果有必要向现存文件中添加数据,必须使用FILE_WRITE 与FILE_READ组合打开文件。
如果FILE_WRITE 与FILE_READ不组合使用,只能打开现存文件。如果文件不存在,可以使用 FILE_WRITE 模式创建。
在一个模块内最多能够同时打开32个文件。在同个模块内文件打开的句柄不能传递给其它模块(库)。
参数:
filename - 文件名称
mode - 打开模式。可以是以下的一种或是多种组合: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE。
delimiter - csv 文件的限定符。默认为 ';' 符号。
示例:
int handle;
handle=FileOpen("my_data.csv",FILE_CSV|FILE_READ,';');
if(handle<1)
{
Print("未找到 my_data.dat 文件,错误", GetLastError());
return(false);
}
int FileOpenHistory(string filename, int mode, void delimiter)
从当前历史目录(terminal_directory\history\server_name)或子目录内打开文件。
如果打开成功,返回文件句柄,如果函数失败,返回-1。如果想获取详细的错误信息,请调用GetLastError() 函数。
注:客户端有可能连接到不同经纪公司的服务器。每个经纪公司的历史数据(HST文件)会存储在terminal_ directory\history相对应的子目录内。
文件在离线时同样可以打开,不必输入新数据就能把它制成图表。
参数:
filename - 文件名称
mode - 打开模式。可以是以下的一种或是多种组合: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE。
delimiter - csv 文件的限定符。默认为 ';' 符号。
示例:
int handle=FileOpenHistory("USDX240.HST",FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("不能创建 USDX240.HST文件");
return(false);
}
// 运行文件
// ...
FileClose(handle);
int FileReadArray(int handle, void array[], int start, int count)
从二进制文件读取指定数量的内容到数组中。读取之前,确认数组要足够大。函数返回实际读取内容的数量。如果想获取详细的错误信息,请调用GetLastError() 函数。
参数:
handle - 用 FileOpen()函数返回的句柄。
array[] - 写入的数组。
start - 在数组中存储的开始位置。
count - 读取内容个数。
示例:
int 句柄;
double 数组容器[10];
句柄= FileOpen("filename.dat", FILE_BIN | FILE_READ);
if(句柄>0){
FileReadArray(句柄, 数组容器, 0, 10);
FileClose(句柄);
}
double FileReadDouble(int handle, void size=DOUBLE_VALUE)
从二进制文件当前位置读取浮点型双精度数据。数值格式长度可以是8byte的double型或者是4byte的float型。
如果想获取详细的错误信息,请调用GetLastError() 函数
参数:
handle - 用 FileOpen()函数返回的句柄。
size - 数值格式大小,DOUBLE_VALUE(8 bytes) 或者 FLOAT_VALUE(4 bytes)。
示例:
int handle;
double value;
handle= FileOpen("mydata.dat",FILE_BIN);
if(handle>0)
{
value= FileReadDouble(handle,DOUBLE_VALUE);
FileClose(handle);
}
int FileReadInteger(int handle, void size)
从二进制文件当前位置读取整型数据。数值格式长度可以是1,2,4字节,如果格式大小不指定,系统设法读4字节的值。
如果想获取详细的错误信息,请调用GetLastError() 函数。
参数:
handle - 用 FileOpen()函数返回的句柄。
size - 数值格式大小,CHAR_VALUE(1 byte), SHORT_VALUE(2 bytes) 或者 LONG_VALUE(4 bytes)。
示例:
int handle;
int value;
handle=FileOpen("mydata.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
value=FileReadInteger(h1,2);
FileClose(handle);
}
double FileReadNumber(int handle)
在文件当前位置读取分隔符之前的数值。只能为CSV文件。
如果想获取详细的错误信息,请调用GetLastError() 函数。
参数:
handle - 用 FileOpen()函数返回的句柄。
示例:
int handle;
int value;
handle=FileOpen("filename.csv", FILE_CSV, ';');
if(handle>0)
{
value=FileReadNumber(handle);
FileClose(handle);
}
string FileReadString(int handle, void length)
本函数从文件当前位置读取字符串,适用于CSV和二进制文件。对于文本文件,读取在分隔符之前字符串。对于二进制文件,将读取指定个数的字符串。
如果想获取详细的错误信息,请调用GetLastError() 函数。
参数:
handle - 用 FileOpen()函数返回的句柄。
length - 要读取的字符串长度
示例:
int handle;
string str;
handle=FileOpen("filename.csv", FILE_CSV|FILE_READ);
if(handle>0)
{
str=FileReadString(handle,100);
FileClose(handle);
}
bool FileSeek(int handle, int offset, int origin)
本函数可以从文件头、文件尾或当前位置按字节移动文件指针到一个偏移的新位置。接下来读写操作就在一个新位置开始。
如果文件指针移动成功了,本函数返回TRUE,否则,返回FALSE。
如果想获取详细的错误信息,请调用GetLastError() 函数。
参数:
handle - 用 FileOpen()函数返回的句柄。
offset - 按字节数相对原点的偏移量。
origin - 初始位置。其值可以是以下任意常数:
SEEK_CUR - 当前位置,
SEEK_SET - 文件头
SEEK_END - 文件尾
示例:
int handle=FileOpen("filename.csv", FILE_CSV|FILE_READ|FILE_WRITE, ';');
if(handle>0)
{
FileSeek(handle, 0, SEEK_END);
//----在文件末端添加数据
FileWrite(handle, data1, data2);
FileClose(handle);
handle=0;
}
int FileSize(int handle)
本函数返回文件大小(字节数)。
如果想获取详细的错误信息,请调用 GetLastError() 函数。
参数:
handle - 用 FileOpen()函数返回的句柄。
示例:
int handle;
int size;
handle=FileOpen("my_table.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
size=FileSize(handle);
Print("my_table.dat 大小为 ", size, " bytes");
FileClose(handle);
}
int FileSize(int handle)
本函数返回文件指针的当前位置。
如果想获取详细的错误信息,请调用 GetLastError() 函数。
参数:
handle - 用 FileOpen()函数返回的句柄。
示例:
int handle;
int pos;
handle=FileOpen("my_table.dat", FILE_BIN|FILE_READ);
// 读取数据
pos=FileTell(handle);
Print("current position is ", pos);
Back to Top
FileWrite() – 写入CSV文件
int FileSize(int handle,...)
本函数用于向CSV文件写入数据,并自动插入数据分隔符。在写入文件后,每行的尾端将会添加"\r\n"回车换行符。数值将会转变成文本(参看 Print() 函数)。
本函数返回写入的字符个数,如果写入出错,返回一个负数。
参数:
handle - 用 FileOpen()函数返回的句柄。
... - 用户写入的数据用逗号分隔,最多支持63个参数。int型和double型数据自动转换
成字符串,但不自动转换颜色型、日期时间型、布尔型数据,他们被当作数值写入
文件。数组不能作为参数传递。
示例:
int handle;
datetime orderOpen=OrderOpenTime();
handle=FileOpen("filename", FILE_CSV|FILE_WRITE, ';');
if(handle>0)
{
FileWrite(handle, Close[0], Open[0], High[0], Low[0], TimeToStr(orderOpen));
FileClose(handle);
}
int FileWriteArray(int handle,object array[], int start, int count)
本函数将数组内容写入一个二进制文件。整型、布尔型、日期时间型和颜色型数组元素作为4字节整数写入文件;双精度型数组元素作为8字节浮点数写入文件;字符串型数组直接写入文件;并在每串末尾自动添加 "\r\n” 回车换行符。
本函数返回写入内容的个数,如果写入出错,返回负值。
参数:
handle - 用 FileOpen()函数返回的句柄。
array[] - 要写入文件的数组。
start - 写入数据的开始位置(写入文件的第一个元素的数组下标)。
count - 要写入文件数组元素的个数。
示例:
int handle;
double BarOpenValues[10];
// 复制前十个柱体(K线)到数组
for(int i=0;i<10; i++)
BarOpenValues[i]=Open[i];
// 将数组数据写入到文件
handle=FileOpen("mydata.dat", FILE_BIN|FILE_WRITE);
if(handle>0)
{
FileWriteArray(handle, BarOpenValues, 3, 7); // 写入最后7个元素
FileClose(handle);
}
int FileWriteDouble(int handle, double value, void size)
本函数将双精度数写入二进制文件。如果格式被指定为FLOAT_VALUE,值将作为4字节浮点数写入(浮点型),否则,它以8字节浮点数格式写入(双精度型)。
返回实际写入的字节数,如果写入出错,返回负值。
参数:
handle - 用 FileOpen()函数返回的句柄。
value - 要写入文件的数值。
size - 选择格式。可以是以下的任意值:
DOUBLE_VALUE (8 字节,默认值)
FLOAT_VALUE (4 字节)
示例:
int handle;
double var1=0.345;
handle=FileOpen("mydata.dat", FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("不能打开文件错误-",GetLastError());
return(0);
}
FileWriteDouble(h1, var1, DOUBLE_VALUE);
//...
FileClose(handle);
int FileWriteInteger(int handle, int value, void size)
本函数将整型数值写入二进制文件。如果格式被指定为SHORT_VALUE,值将作为2字节整型(短整型),如果格式被指定为CHAR_VALUE,值将作为1字节整型(字符型),否则,它以4字节整型格式(长整型)写入。
返回实际写入的字节数,如果写入出错,返回负值。
参数:
handle - 用 FileOpen()函数返回的句柄。
value - 要写入文件的数值。
size - 选择格式。可以是以下的任意值:
CHAR_VALUE (1 字节)
SHORT_VALU (2 字节)
LONG_VALUE (4 字节,默认值)
示例:
int handle;
int value=10;
handle=FileOpen("filename.dat", FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("不能打开文件错误-",GetLastError());
return(0);
}
FileWriteInteger(handle, value, SHORT_VALUE);
//...
FileClose(handle);
int FileWriteString(int handle, string value, int length)
本函数将字符串写入二进制文件的当前位置。
本函数返回实际写入的字节数,如果写入出错,返回负值。
参数:
handle - 用 FileOpen()函数返回的句柄。
value - 要写入文件的字符串。
length - 写入的字符串长度。如果字符串长度超出给定的值,多余部分将被截掉。
如果它较短,不足部分将用二进制0填充到给定的长度。
示例:
int handle;
string str="some string";
handle=FileOpen("filename.bin", FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("不能打开文件错误-",GetLastError());
return(0);
}
FileWriteString(h1, str, 8);
FileClose(handle);