FileWriteArray

La funzione scrive array di qualsiasi tipo ad eccezione di stringa ad un file BIN (può essere un array di strutture che non contengono stringhe o array dinamici).

uint  FileWriteArray(
   int          file_handle,         // File handle
   const void&  array[],             // Array
   int          start=0,             // Indice start nell'array
   int          count=WHOLE_ARRAY    // Numero di elementi
   );

Parametri

file_handle

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

array[]

[out] Array per la registrazione.

start=0

[in] Indice iniziale nell' array (numero del primo elemento registrato).

count=WHOLE_ARRAY

[in]  Numero di elementi da scrivere (WHOLE_ARRAY significa che tutti gli elementi iniziano con il numero start fino alla fine dell'array, verranno scritti).

Valore restituito

Numero di elementi registrati.

Nota

Array di stringhe possono essere registrati in un file TXT. In questo caso, le stringhe vengono automaticamente chiuse dai caratteri di fine riga "\r\n". A seconda del tipo di file ANSI o UNICODE, le stringhe sono o convertite in codifica-ansi o meno.

Esempio:

//+--------------------------------------------------------------------------------+
//|                                                        Demo_FileWriteArray.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"
//--- parametri di input
input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
//+--------------------------------------------------------------------------------+
//| Struttura per memorizzare i dati dei prezzi |
//+--------------------------------------------------------------------------------+
struct prices
  {
   datetime          date; // date
   double            bid;  // prezzo bid
   double            ask;  // prezzo ask
  };
//--- variabili globali
int    count=0;
int    size=20;
string path=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione dell' Expert                                   |
//+--------------------------------------------------------------------------------+
int OnInit()
  {
//--- alloca la memoria per l'array
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+--------------------------------------------------------------------------------+
//| Funzione deinizializzazione Expert                                 |
//+--------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- scrive le stringhe di conteggio rimanenti se count<n
   WriteData(count);
  }
//+--------------------------------------------------------------------------------+
//| Funzione tick dell'Expert                                             |
//+--------------------------------------------------------------------------------+
void OnTick()
  {
//--- salva i dati nell'array
   arr[count].date=TimeCurrent();
   arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- mostra i correnti dati
   Print("Date = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask);
//--- incrementa il contatore
   count++;
//--- se l'array è riempito, scrive i dati nel file e lo azzera
   if(count==size)
     {
      WriteData(size);
      count=0;
     }
  }
//+--------------------------------------------------------------------------------+
//| Scrive n elementi dell'array nel file                            |
//+--------------------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- apre il file
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- scrive i dati array alla fine del file
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- chiude il file
      FileClose(handle);
     }
   else
      Print("Fallimento nell'aprire il file, errore",GetLastError());
  }

Vedi anche

Variabili, FileSeek