FileRead

Lettura di dati da un file di qualsiasi tipo.

uint FileRead(
 int file_handle, // Handle del file
 ... // Elenco dei parametri da leggere
 );

Parametri

file_handle

[in] Descrittore del file restituito da FileOpen().

...

[in] Elenco separato da virgole dei parametri da leggere dal file. Ogni parametro viene passato per riferimento. Il numero di parametri non deve superare 256. Le variabili devono essere di tipi base; array, strutture, matrici e vettori non sono consentiti.

Valore restituito

Numero di variabili lette. Se sono state lette meno variabili del previsto, l'errore di lettura può essere analizzato usando GetLastError(). Se durante la lettura da un file CSV viene incontrata la fine di una riga, la lettura viene interrotta, ma non viene generato alcun errore.

Nota

FileRead è speculare alla funzione FileWrite. La funzione è universale e legge da file di qualsiasi tipo: CSV, TXT o BIN.

FileRead non può leggere dati di tipo string da un file binario, perché la lunghezza della stringa da leggere non è nota in anticipo.

Durante la lettura da un file binario, in ogni variabile viene letto il numero di byte corrispondente al tipo di dato (char - 1, int - 4, long - 8, double - 8, ecc.).

Durante la lettura da un file di testo, l'intera riga viene letta in una variabile di tipo string fino alla sua fine, senza i caratteri finali di fine riga.

Durante la lettura da un file CSV, vengono prima lette le stringhe contenenti la rappresentazione testuale del tipo corrispondente, quindi la stringa viene convertita in una variabile del tipo corrispondente (per esempi, vedere FileReadNumber, FileReadBool, FileReadDateTime).

Esempio:

//+------------------------------------------------------------------+
//|                                                 TestFileRead.mq5 |
//|                                  Copyright 2026, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   uint     written,read;
//--- 13 variabili di tipi diversi
   bool     bool_value=true;
   char     char_value=123;
   short    short_value=12345;  
   int      int_value=1234567;
   long     long_value=5000000000;
   float    float_value=FLT_EPSILON;
   double   double_value=M_PI;
   color    color1_value=clrAquamarine;
   color    color2_value=C'111,0,222';
   datetime datetime_value=TimeCurrent();
   complex  complex_value=1.1+0.1i;
   complexf complexf_value=5.5+0.5i;
   string   string_value="the quick brown fox jumps over the lazy dog";
//--- aprire un file CSV in scrittura
   int file_handle=FileOpen("test.csv",FILE_CSV|FILE_WRITE|FILE_ANSI);
//--- scrivere 13 variabili di tipi diversi
   written=FileWrite(file_handle,bool_value,char_value,short_value,int_value,long_value,float_value,double_value,color1_value,color2_value,datetime_value,string_value,complex_value,complexf_value);
   bool_value=false;
   char_value=124;
   short_value=12347;  
   int_value=1234569;
   long_value=5001000000;
//--- scrivere 13 variabili nella seconda riga del file CSV
   written+=FileWrite(file_handle,bool_value,char_value,short_value,int_value,long_value,float_value,double_value,color1_value,color2_value,datetime_value,string_value,complex_value,complexf_value);
   bool_value=false;
   char_value=125;
   short_value=12349;  
   int_value=1234571;
   long_value=5002000000;
//--- scrivere 13 variabili nella terza riga del file CSV
   written+=FileWrite(file_handle,bool_value,char_value,short_value,int_value,long_value,float_value,double_value,color1_value,color2_value,datetime_value,string_value,complex_value,complexf_value);
   FileClose(file_handle);
   Print(written," bytes written");
   bool     bool_value2;
   char     char_value2;
   short    short_value2;  
   int      int_value2;
   long     long_value2;
   float    float_value2;
   double   double_value2;
   color    color1_value2;
   color    color2_value2;
   datetime datetime_value2;
   complex  complex_value2;
   complexf complexf_value2;
   string   string_value2;
   string   string2_value="untouched string";
//--- aprire in lettura il file CSV scritto
   file_handle=FileOpen("test.csv",FILE_CSV|FILE_READ|FILE_ANSI);
//--- provare a leggere 1 variabile in più di quelle presenti nella riga
   read=FileRead(file_handle,bool_value2,char_value2,short_value2,int_value2,long_value2,float_value2,double_value2,color1_value2,color2_value2,datetime_value2,string_value2,complex_value2,complexf_value2,string2_value);
   FileClose(file_handle);
   Print("read ",read," variables");
   Print(bool_value2," ",char_value2," ",short_value2," ",int_value2," ",long_value2," ",float_value2," ",double_value2," ",color1_value2," ",color2_value2," ",datetime_value2," ",string_value2," ",complex_value2," ",complexf_value2," ",string2_value);
   string txt_line1,txt_line2,txt_line3;
//--- aprire il file scritto come file di testo
   file_handle=FileOpen("test.csv",FILE_TXT|FILE_READ|FILE_ANSI);
//--- leggere 3 righe dal file di testo
   read=FileRead(file_handle,txt_line1,txt_line2,txt_line3);
   Print("\nread ",read," lines");
   FileClose(file_handle);
//--- verificare visivamente che siano le stesse righe scritte
   Print(txt_line1);
   Print(txt_line2);
   Print(txt_line3);
//--- aprire un file binario in scrittura
   file_handle=FileOpen("test.bin",FILE_BIN|FILE_WRITE);
//--- scrivere 12 variabili di tipi diversi, eccetto string
   written=FileWrite(file_handle,bool_value,char_value,short_value,int_value,long_value,float_value,double_value,color1_value,color2_value,datetime_value,complex_value,complexf_value);
   FileClose(file_handle);
   Print("");
   Print(written," bytes written");
   bool     bool_value3;
   char     char_value3;
   short    short_value3;  
   int      int_value3;
   long     long_value3;
   float    float_value3;
   double   double_value3;
   color    color1_value3;
   color    color3_value3;
   datetime datetime_value3;
   complex  complex_value3;
   complexf complexf_value3;
//--- aprire in lettura il file binario scritto
   file_handle=FileOpen("test.bin",FILE_BIN|FILE_READ);
//--- leggere 12 variabili degli stessi tipi
   read=FileRead(file_handle,bool_value3,char_value3,short_value3,int_value3,long_value3,float_value3,double_value3,color1_value3,color3_value3,datetime_value3,complex_value3,complexf_value3);
   FileClose(file_handle);
   Print("read ",read," variables");
//--- verificare visivamente che i dati siano stati letti correttamente
   Print(bool_value3," ",char_value3," ",short_value3," ",int_value3," ",long_value3," ",float_value3," ",double_value3," ",color1_value3," ",color3_value3," ",datetime_value3," ",complex_value3," ",complexf_value3);
  }

Output nel journal Experts

554 bytes written
read 13 variables
true 123 12345 1234567 5000000000 1.1920928955078125e-07 3.141592653589793 clrAquamarine 111,0,222 2026.09.25 14:44:25 the quick brown fox jumps over the lazy dog (1.1,0.1) (5.5,0.5) untouched string
 
read 3 lines
true 123 12345 1234567 5000000000 1.1920928955078125e-07 3.141592653589793 clrAquamarine 111,0,222 2026.09.25 14:44:25 the quick brown fox jumps over the lazy dog (1.1,0.1) (5.5,0.5)
false 124 12347 1234569 5001000000 1.1920928955078125e-07 3.141592653589793 clrAquamarine 111,0,222 2026.09.25 14:44:25 the quick brown fox jumps over the lazy dog (1.1,0.1) (5.5,0.5)
false 125 12349 1234571 5002000000 1.1920928955078125e-07 3.141592653589793 clrAquamarine 111,0,222 2026.09.25 14:44:25 the quick brown fox jumps over the lazy dog (1.1,0.1) (5.5,0.5)
 
68 bytes written
read 12 variables
false 125 12349 1234571 5002000000 1.1920928955078125e-07 3.141592653589793 clrAquamarine 111,0,222 2026.09.25 14:44:25 (1.1,0.1) (5.5,0.5)

Vedi anche

FileWrite, FileReadNumber, FileReadBool, FileReadDateTime