Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Visualizações:
996
Avaliação:
(33)
Publicado:
2014.01.14 13:58
Atualizado:
2016.11.22 07:33
\MQL5\Files\Data\
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 CrossIndex

Este indicador permite exibir o gráfico de um outro par de moedas na janela em separado.

Projeções Full do Daily Range Projeções Full do Daily Range

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 Cyber Cycle Adaptativa

Cyber Cycle Adaptativa se adapta constantemente à mudança dos ciclos de um ativo financeiro do mercado.

Demo_FileSize Demo_FileSize

O script demonstra o exemplo de como usar a função FileSize().