FileReadLong

Lee un entero de tipo long (8 bytes) desde la posición actual de un archivo binario.

Lee de un archivo CSV una cadena desde la posición actual hasta el separador (o hasta el final de la línea de texto) y convierte la cadena leída en un valor de tipo long.

long  FileReadLong(
   int  file_handle      // manejador del archivo
   );

Parámetros

file_handle

[in]  Descriptor de archivo devuelto por la función FileOpen().

Valor devuelto

Valor de tipo long.

Nota

Para obtener información sobre el error, hay que llamar a la función GetLastError().

Equivale a llamar a la función FileRead con un parámetro de tipo long. Para leer de forma garantizada datos de tipo ulong, se recomienda usar FileRead con el parámetro correspondiente.

long long_value;
FileRead(file_handle,long_value);
ulong ulong_value;
FileRead(file_handle,ulong_value);

Ejemplo (se utiliza el archivo conseguido como resultado de trabajo del ejemplo para la función FileWriteLong)

//+------------------------------------------------------------------+
//|                                            Demo_FileReadLong.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_buffers 1
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "Volume"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrYellow
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
#property indicator_separate_window
//--- parámetros para la lectura de datos
input string InpFileName="Volume.bin"; // nombre del archivo
input string InpDirectoryName="Data";  // nombre de la carpeta
//--- variables globales
int      ind=0;
int      size=0;
long     volume_buff[];
datetime time_buff[];
//--- indicator buffers
double   buff[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- abrimos el archivo
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("Archivo %s abierto para la escritura",InpFileName);
      PrintFormat("Ruta del archivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- primero leemos cuántos datos contiene el archivo en total
      size=(int)FileReadLong(file_handle);
      //--- adjudicamos la memoria para los arrays
      ArrayResize(volume_buff,size);
      ArrayResize(time_buff,size);
      //--- leemos los datos desde el archivo
      for(int i=0;i<size;i++)
        {
         time_buff[i]=(datetime)FileReadLong(file_handle);
         volume_buff[i]=FileReadLong(file_handle);
        }
      //--- cerramos el archivo
      FileClose(file_handle);
      PrintFormat("Datos leídos, archivo %s cerrado",InpFileName);
     }
   else
     {
      PrintFormat("Fallo al abrir el archivo %s, Código del error = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//--- enlace del array al búfer de indicadores con el índice 0
   SetIndexBuffer(0,buff,INDICATOR_DATA);
//---- establecimiento de valores del indicador que no van a mostrarse en el gráfico
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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);
//--- ciclo para las barras no procesadas todavía
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- por defecto 0
      buff[i]=0;
      //--- prueba de que si hay más datos
      if(ind<size)
        {
         for(int j=ind;j<size;j++)
           {
            //--- si las fechas coinciden, utilizamos el valor desde el archivo
            if(time[i]==time_buff[j])
              {
               buff[i]=(double)volume_buff[j];
               ind=j+1;
               break;
              }
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Véase también

Tipos enteros, FileReadInteger, FileWriteLong