linux 文件 tell,FileTell - 文件函数 - MQL5参考 - 参考MetaTrader 5的算法/自动交易语言...

//+------------------------------------------------------------------+

//|                                                Demo_FileTell.mq5 |

//|                        Copyright 2013, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#propertycopyright"Copyright 2013, MetaQuotes Software Corp."

#propertylink"https://www.mql5.com"

#propertyversion"1.00"

//--- 启动脚本时显示输入参数的窗口

#propertyscript_show_inputs

//--- 输入参数

inputstringInpFileName="file.txt";// 文件名称

inputstringInpDirectoryName="Data";// 目录名称

inputintInpEncodingType=FILE_ANSI;// ANSI=32 或 UNICODE=64

//+------------------------------------------------------------------+

//| 脚本程序启动函数                                                   |

//+------------------------------------------------------------------+

voidOnStart()

{

//--- 指定生成随机数字的变量值

_RandomSeed=GetTickCount();

//--- 字符串起始点位置的变量

ulongpos[];

intsize;

//--- 重置错误值

ResetLastError();

//--- 打开文件

intfile_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType);

if(file_handle!=INVALID_HANDLE)

{

PrintFormat("%s file is available for reading",InpFileName);

//--- 接收文件中每个字符串的起始位置

GetStringPositions(file_handle,pos);

//--- 定义文件中的字符串数量

size=ArraySize(pos);

if(!size)

{

//--- 如果文件没有字符串,则停止

PrintFormat("%s file is empty!",InpFileName);

FileClose(file_handle);

return;

}

//--- 随机选择一个字符串数

intind=MathRand()%size;

//--- 字符串起始点的转换位置

FileSeek(file_handle,pos[ind],SEEK_SET);

//--- 阅读和打印ind数字的字符串

PrintFormat("String text with %d number: \"%s\"",ind,FileReadString(file_handle));

//--- 关闭文件

FileClose(file_handle);

PrintFormat("%s file is closed",InpFileName);

}

else

PrintFormat("Failed to open %s file, Error code = %d",InpFileName,GetLastError());

}

//+-------------------------------------------------------------------------------+

//| 函数定义了文件中每个字符串的起始点并在arr数组放置它                                  |

//|                                                                               |

//+-------------------------------------------------------------------------------+

voidGetStringPositions(constinthandle,ulong&arr[])

{

//--- 默认数组大小

intdef_size=127;

//--- 为数组分配内存

ArrayResize(arr,def_size);

//--- 字符串计数器

inti=0;

//--- 如果这不是文件结尾,那么至少有一个字符串

if(!FileIsEnding(handle))

{

arr[i]=FileTell(handle);

i++;

}

else

return;// 文件为空,退出

//--- 根据编码定义字节转换

intshift;

if(FileGetInteger(handle,FILE_IS_ANSI))

shift=1;

else

shift=2;

//--- 通过循环中的字符串

while(1)

{

//--- 阅读字符串

FileReadString(handle);

//--- 检查文件结尾

if(!FileIsEnding(handle))

{

//--- 存储下一个字符串的位置

arr[i]=FileTell(handle)+shift;

i++;

//--- 如果超过增加数组大小

if(i==def_size)

{

def_size+=def_size+1;

ArrayResize(arr,def_size);

}

}

else

break;// 文件结尾,退出

}

//--- 定义数组的实际大小

ArrayResize(arr,i);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值