FileWriteString

La funzione scrive il valore di un parametro di tipo-stringa in un file BIN, CSV o TXT a partire dalla posizione corrente del puntatore del file. Quando si scrive in un file CSV o TXT: se c'è un simbolo nella stringa '\n' (LF) senza carattere precedente '\r' (CR), allora prima di '\n' viene agginto il '\r' mancante.

uint  FileWriteString(
   int           file_handle,    // File handle
   const string  text_string,    // Stringa da scrivere
   int           length=-1       // Numero di simboli
   );

Parametri

file_handle

[in] Il descrittore di file restituito da FileOpen().

text_string

[in]  String.

length=-1

[in] Il numero di caratteri che si desidera scrivere. Questa opzione è necessaria per scrivere una stringa in un file BIN. Se la dimensione non è specificata, allora viene scritta l'intera stringa senza il trailer 0. Se si specifica una dimensione inferiore alla lunghezza della stringa, allora viene scritta una parte della stringa senza il trailer 0. Se si specifica una dimensione maggiore della lunghezza della stringa, la stringa è riempita con il numero appropriato di zeri. Per i file di tipo CSV e TXT, questo parametro viene ignorato e la stringa viene scritta interamente.

Valore restituito

In caso di successo la funzione restituisce il numero di byte scritti. Il puntatore del file viene spostato dello stesso numero di byte.

Nota

Si noti che quando si scrive in un file aperto dal flag FILE_UNICODE (o senza un flag FILE_ANSI), allora il numero di byte scritti sarà due volte più grande del numero di caratteri stringa scritti. Quando si registra su un file aperto con il flag FILE_ANSI, il numero di byte scritti coinciderà con il numero di caratteri della stringa scritta.

Esempio:

//+--------------------------------------------------------------------------------+
//|                                                       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"
//--- mostra la finestra dei parametri di input quando si lancia lo script
#property script_show_inputs
//--- parametri per la ricezione dei dati dal terminale
input string             InpSymbolName="EURUSD";           // coppia di valute
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_H1;        // time frame
input int                InpMAPeriod=14;                   // periodo MA
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // tipo di prezzo
input datetime           InpDateStart=D'2013.01.01 00:00'; // data di inizio copiatura dati
//--- parameters for writing data to the file
input string             InpFileName="RSI.csv";   // nome file
input string             InpDirectoryName="Data"// nome directory
//+--------------------------------------------------------------------------------+
//| Funzione di avvio del programma Script |
//+--------------------------------------------------------------------------------+
voidOnStart()
  {
   datetime date_finish; // data di fine copiatura dati
   double   rsi_buff[];  // array dei valori indicatore
   datetime date_buff[]; // array delle date indicatore
   int      rsi_size=0;  // grandezza degli array indicatore
//--- l'orario di fine è quello corrente
   date_finish=TimeCurrent();
//--- riceve l'handle dell'indicatore RSI
   ResetLastError();
   int rsi_handle=iRSI(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpAppliedPrice);
   if(rsi_handle==INVALID_HANDLE)
     {
      //--- fallimento nel ricevere l'handle dell'indicatore
      PrintFormat("Errore quando si è ricevuto l'handle indicatore. Codice Errore = %d",GetLastError());
      return;
     }
//--- è in loop, finchè l'indicatore calcola tutti i suoi valori
   while(BarsCalculated(rsi_handle)==-1)
      Sleep(10); // una pausa per consentire all'indicatore di calcolare tutti i suoi valori
//--- copia i valori dell'indicatore per un certo periodo di tempo
   ResetLastError();
   if(CopyBuffer(rsi_handle,0,InpDateStart,date_finish,rsi_buff)==-1)
     {
      PrintFormat("Fallimento nel copiare i valori indicatore. Codice Errore = %d",GetLastError());
      return;
     }
//--- copia l'orario appropriato per i valori indicatore
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
     {
      PrintFormat("Fallimento nel copiare i valori temporali. Codice Errore = %d",GetLastError());
      return;
     }
//--- libera la memoria occupata per l'indicatore
   IndicatorRelease(rsi_handle);
//--- riceve la grandezza del buffer
   rsi_size=ArraySize(rsi_buff);
//--- apre il file per la scrittura dei valori indicatore (se il file è assente, verrà creato automaticamente)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("il file %s è disponibile per la scrittura",InpFileName);
      PrintFormat("Percorso file: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- prepara le variabili aggiuntive
      string str="";
      bool   is_formed=false;
      //--- scrive i dati per formare aree overbought ed oversold
      for(int i=0;i<rsi_size;i++)
        {
         //--- controlla i valori indicatore
         if(rsi_buff[i]>=70 || rsi_buff[i]<=30)
           {
            //--- se il valore è il primo in quest'area
            if(!is_formed)
              {
               //--- aggiunge il valore e la 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];
            //--- sposta alla prossima iterazione del loop
            continue;
           }
         //--- controlla il flag
         if(is_formed)
           {
            //--- la stringa è formata, viene scritta nel file
            FileWriteString(file_handle,str+"\r\n");
            is_formed=false;
           }
        }
      //--- chiude il file
      FileClose(file_handle);
      PrintFormat("I dati vengono scritti, il file %s è chiuso",InpFileName);
     }
   else
      PrintFormat("Fallimento nell'aprire il file %s, Codice errore = %d",InpFileName,GetLastError());
  }

Vedi anche

Tipo Stringa, StringFormat