Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
- Visualizações:
- 1013
- Avaliação:
- Publicado:
- 2014.01.14 13:58
- Atualizado:
- 2016.11.22 07:33
-
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
O script abre o arquivo de texto, analisa as posições dos pontos de início das strings neste arquivo e exibe o texto string com um número aleatório. Para receber o array das posições de início para cada string no arquivo, a função GetStringPositions() é escrita. A função procura o ponto de partida das strings considerando o tipo de codificação de arquivos que podem ser especificados no parâmetro de entrada "InpEncodingType".
Além de usar a função FileTell(), o script também usa a função FileGetInteger() para obter o tipo de codificação, a função FileIsEnding() para definir o final do arquivo e a função FileSeek() para mover a posição do arquivo quando exibe a string com um número aleatório.
Código:
//--- exibir a janela dos parâmetros de entrada ao iniciar o script #property script_show_inputs //--- parâmetros de entrada input string InpFileName="arquivo.txt"; // nome do arquivo input string InpDirectoryName="Dados"; // nome do diretório input int InpEncodingType=FILE_ANSI; // ANSI=32 ou UNICODE=64 //+------------------------------------------------------------------+ //| Função iniciar do Script de programa | //+------------------------------------------------------------------+ void OnStart() { //--- especificar o valor da variável geradora de números aleatórios _RandomSeed=GetTickCount(); //--- variáveis para posições dos pontos de início das strings ulong pos[]; int size; //--- redefinir o valor de erro ResetLastError(); //--- abrir o arquivo int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType); if(file_handle!=INVALID_HANDLE) { PrintFormat("arquivo %s está disponível para leitura",InpFileName); //--- receber posição inicial para cada string no arquivo GetStringPositions(file_handle,pos); //--- definir o número de strings no arquivo size=ArraySize(pos); if(!size) { //--- parar se o arquivo não tem cordas PrintFormat("arquivo %s está vazio!",InpFileName); FileClose(file_handle); return; } //--- fazer uma seleção aleatória de um número de string int ind=MathRand()%size; //--- deslocar posição ao ponto do início da string FileSeek(file_handle,pos[ind],SEEK_SET); //--- ler e imprimir a string com o número de ind PrintFormat("Texto da String com o número %d: \"%s\"",ind,FileReadString(file_handle)); //--- fechar o arquivo FileClose(file_handle); PrintFormat("arquivo %s foi fechado",InpFileName); } else PrintFormat("falha para abrir o arquivo %s, Erro código = %d",InpFileName,GetLastError()); } //+-------------------------------------------------------------------------------+ //| A função define os pontos de partida para cada uma das strings no arquivo e | //| coloca-os em array arr | //+-------------------------------------------------------------------------------+ void GetStringPositions(const int handle,ulong &arr[]) { //--- tamanho padrão do array int def_size=127; //--- alocar memória para o array ArrayResize(arr,def_size); //--- contador de string int i=0; //--- Se este não é o fim do arquivo, então existe pelo menos uma string if(!FileIsEnding(handle)) { arr[i]=FileTell(handle); i++; } else return; // arquivo está vazio, sair //--- definem o deslocamento em bytes, dependendo da codificação int shift; if(FileGetInteger(handle,FILE_IS_ANSI)) shift=1; else shift=2; //--- passar pelas strings no loop while(1) { //--- ler a string FileReadString(handle); //--- verificar o fim do arquivo if(!FileIsEnding(handle)) { //--- armazenar posição da próxima string arr[i]=FileTell(handle)+shift; i++; //--- aumentar o tamanho do array que está transbordando if(i==def_size) { def_size+=def_size+1; ArrayResize(arr,def_size); } } else break; // fim do arquivo, sair } //--- definir o tamanho real do array ArrayResize(arr,i); }
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/1634
![CrossIndex](https://c.mql5.com/i/code/indicator.png)
Este indicador permite exibir o gráfico de um outro par de moedas na janela em separado.
![Projeções Full do Daily Range](https://c.mql5.com/i/code/indicator.png)
Previsão da próxima mudança de intervalo do candle diário em todas as barras do gráfico em vigor.
![Cyber Cycle Adaptativa](https://c.mql5.com/i/code/indicator.png)
Cyber Cycle Adaptativa se adapta constantemente à mudança dos ciclos de um ativo financeiro do mercado.
![Demo_FileSize](https://c.mql5.com/i/code/script.png)
O script demonstra o exemplo de como usar a função FileSize().