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
Demo_FileTell - script para MetaTrader 5
- Visualizações:
- 996
- 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
Este indicador permite exibir o gráfico de um outro par de moedas na janela em separado.
Projeções Full do Daily RangePrevisão da próxima mudança de intervalo do candle diário em todas as barras do gráfico em vigor.
Cyber Cycle Adaptativa se adapta constantemente à mudança dos ciclos de um ativo financeiro do mercado.
Demo_FileSizeO script demonstra o exemplo de como usar a função FileSize().