FileReadFloat

Legge un numero a singola-precisione floating point (float) dalla corrente posizione del file binario.

float  FileReadFloat(
   int  file_handle    // File handle
   );

Parametri

file_handle

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

Valore restituito

Il valore di tipo float.

Nota

Per più dettagli riguardo l'errore, chiamare GetLastError().

Esempio (il file ottenuto dopo l'esecuzione dell'esempio per la funzione FileWriteFloat è qui usato)

//+--------------------------------------------------------------------------------+
//|                                                         Demo_FileReadFloat.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"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "CloseLine"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrRed,clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- parametri per la lettura dei dati 
input string InpFileName="Close.bin"// nome del file
input string InpDirectoryName="Data"// nome della directory
//--- variabili globali
int      ind=0;
int      size=0;
double   close_buff[];
datetime time_buff[];
//--- buffers indicatore
double   buff[];
double   color_buff[];
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione Indicatore Personalizzato                         |
//+--------------------------------------------------------------------------------+
int OnInit()
  {
   int def_size=100;
//--- alloca la memoria per gli array
   ArrayResize(close_buff,def_size);
   ArrayResize(time_buff,def_size);
//--- apre il file
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s il file è disponibile per la lettura",InpFileName);
      PrintFormat("Percorso file: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- legge i dati dal file
      while(!FileIsEnding(file_handle))
        {
         //--- legge i valori di tempo e di prezzo
         time_buff[size]=(datetime)FileReadDouble(file_handle);
         close_buff[size]=(double)FileReadFloat(file_handle);
         size++;
         //--- incrementa la grandezza dell'array se non viene riempito
         if(size==def_size)
           {
            def_size+=100;
            ArrayResize(close_buff,def_size);
            ArrayResize(time_buff,def_size);
           }
        }
      //--- chiude il file
      FileClose(file_handle);
      PrintFormat("I dati vengono letti, il file %s è chiuso",InpFileName);
     }
   else
     {
      PrintFormat("Fallimento nell'aprire il file %s, Codice errore = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//--- lega gli array ai buffer indicatore
   SetIndexBuffer(0,buff,INDICATOR_DATA);
   SetIndexBuffer(1,color_buff,INDICATOR_COLOR_INDEX);
//---- imposta i valori dell'indicatore che non saranno visibili sul chart
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//---
   return(INIT_SUCCEEDED);
  }
//+--------------------------------------------------------------------------------+
//| Funzione di iterazione indicatore personalizato                                |
//+--------------------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   ArraySetAsSeries(time,false);
//--- il loop per la barra che non è stata ancora maneggiata
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- 0 per default
      buff[i]=0;
      color_buff[i]=0; // colore rosso per default
      //--- controlla se ci sono ancora dati presenti
      if(ind<size)
        {
         for(int j=ind;j<size;j++)
           {
            //--- se le date coincidono, viene usato il valore dal file
            if(time[i]==time_buff[j])
              {
               //--- riceve il prezzo
               buff[i]=close_buff[j];
               //--- se il prezzo corrente eccede quello previsto, il colore è blu
               if(buff[i-1]>buff[i])
                  color_buff[i]=1;
               //--- incrementa il contatore
               ind=j+1;
               break;
              }
           }
        }
     }
//--- restituisce il valore di prev_calculated per la prossima chiamata
   return(rates_total);
  }

Vedi anche

Tipi reali (double, float), FileReadDouble, FileWriteFloat