FileWriteString

A função escreve o valor de um parâmetro do tipo string em um arquivo BIN, CSV ou TXT começando a partir da posição atual do ponteiro de arquivo. Quando escrever para um arquivo CSV ou TXT: se existe um símbolo na string '\n' (LF) sem caractere anterior '\r' (CR), então antes de '\n' desaparecer '\r' é adicionado.

uint  FileWriteString(
   int           file_handle,    // Manipular arquivo
   const string  text_string,    // string para escrever
   int           length=-1       // número de símbolos
   );

Parâmetros

file_handle

[in]  Descritor de arquivo retornado pelo FileOpen().

text_string

[in]  Seqüência.

length=-1

[in] O número de caracteres que você quer escrever. Esta opção é necessária para escrever uma string em um arquivo BIN. Se o tamanho não for especificado, então a string inteira, sem o trailer 0 (zero) é escrita. Se você especificar um tamanho menor do que o comprimento da string, então uma parte da string sem o trailer 0 (zero) é escrita. Se você especificar um tamanho maior do que o comprimento da string, a string é preenchido por um número apropriado de zeros. Para arquivos do tipo CSV e TXT, este parâmetro é ignorado e a string é escrita inteiramente.

Valor do Retorno

Se for bem sucedido, a função retorna o número de bytes escritos. O ponteiro do arquivo é deslocado pelo mesmo número de bytes.

Observação

Note que quando se escreve para um arquivo aberto pela bandeira FILE_UNICODE (ou sem uma bandeira FILE_ANSI), então o número de bytes escrito será duas vezes tão grande como o número de cadeia de string escritas. Quando gravar para um arquivo aberto com a bandeira FILE_ANSI, o número de bytes escritos irá coincidir com o número de caracteres de string escritas.

Exemplo:

//+------------------------------------------------------------------+
//|                                         Demo_FileWriteString.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- mostrar a janela de parâmetros de entrada quando do lançamento do script
#property script_show_inputs
//--- parâmetros para a recepção de dados a partir do terminal
input string             InpSymbolName="EURUSD";           // par de moedas
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_H1;        // período de tempo
input int                InpMAPeriod=14;                   // período de média móvel
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // tipo de preço
input datetime           InpDateStart=D'2013.01.01 00:00'; // data de início da cópia dos dados
//--- parâmetros para escrever dados no arquivo
input string             InpFileName="RSI.csv";   // nome do arquivo
input string             InpDirectoryName="Data"// nome do diretório
//+------------------------------------------------------------------+
//| Programa Script da função start (iniciar)                        |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish; // copiando dados com a data final
   double   rsi_buff[];  // array do valor do indicador
   datetime date_buff[]; // array da data do indicador
   int      rsi_size=0;  // tamanho de arrays de indicadores
//--- tempo final é o atual
   date_finish=TimeCurrent();
//--- receber a manipulação do indicador RSI
   ResetLastError();
   int rsi_handle=iRSI(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpAppliedPrice);
   if(rsi_handle==INVALID_HANDLE)
     {
      //--- falha para receber a manipulação do indicador
      PrintFormat("Erro quando recebe a manipulação do indicador. Código de erro = %d",GetLastError());
      return;
     }
//--- fica no loop, até que o indicador calcula todos os seus valores
   while(BarsCalculated(rsi_handle)==-1)
      Sleep(10); // pausa para permitir que o indicador calcule os respectivos valores
//--- copiar os valores do indicador para um determinado período de tempo
   ResetLastError();
   if(CopyBuffer(rsi_handle,0,InpDateStart,date_finish,rsi_buff)==-1)
     {
      PrintFormat("Falha para copiar valores do indicador. Código de erro = %d",GetLastError());
      return;
     }
//--- copiar o tempo apropriado para os valores do indicador
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
     {
      PrintFormat("Falha para copiar valores de tempo. Código de erro = %d",GetLastError());
      return;
     }
//--- libera a memória ocupada pelo indicador
   IndicatorRelease(rsi_handle);
//--- receber o tamanho do buffer
   rsi_size=ArraySize(rsi_buff);
//--- abrir o arquivo para escrever os valores do indicador (se o arquivo estiver ausente, ele será criado automaticamente)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s arquivo está disponível para ser escrito",InpFileName);
      PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- preparar variáveis adicionais
      string str="";
      bool   is_formed=false;
      //--- escrever datas de formação das áreas de sobre-compra e sobre-venda 
      for(int i=0;i<rsi_size;i++)
        {
         //--- verifique os valores dos indicadores
         if(rsi_buff[i]>=70 || rsi_buff[i]<=30)
           {
            //--- se o valor é o primeiro nesta área
            if(!is_formed)
              {
               //--- adicionar o valor e a data
               str=(string)rsi_buff[i]+"\t"+(string)date_buff[i];
               is_formed=true;
              }
            else
               str+="\t"+(string)rsi_buff[i]+"\t"+(string)date_buff[i];
            //--- mover para a próxima iteração do loop
            continue;
           }
         //--- verificar a flag
         if(is_formed)
           {
            //--- a string é formada, escrevê-lo para o arquivo
            FileWriteString(file_handle,str+"\r\n");
            is_formed=false;
           }
        }
      //--- fechar o arquivo
      FileClose(file_handle);
      PrintFormat("Os dados são escritos, %s arquivo esta fechado",InpFileName);
     }
   else
      PrintFormat("Falha para abrir %s arquivo, Código de erro = %d",InpFileName,GetLastError());
  }

Também Veja

Tipo string, StringFormat