FileReadInteger

Liest den Wert des Typs int, short oder char aus der binären Datei abhängig von der angegebenen Länge in Bytes. Das Lesen wird von der laufenden Position des Dateianzeigers durchgeführt.

int  FileReadInteger(
   int  file_handle,        // Datei-Handle
   int  size=INT_VALUE      // die Größe des ganzzahligen Typs in Bytes
   );

Parameter

file_handle

[in]  Dateiattribut, das durch die Funktion FileOpen() zurückgegeben wird.

size=INT_VALUE

[in]  Die Anzahl der Bytes (bis zu 4), die Sie lesen möchten. Die folgenden Konstanten sind verfügbar: CHAR_VALUE=1, SHORT_VALUE=2 und INT_VALUE=4, so kann die Funktion den ganzzahligen Wert des Typs char, short oder int lesen.

Rückgabewert

Ein Wert vom Typ int. Das Ergebnis dieser Funktion muss deutlich in den Zieltyp, d.h. in den Typ, den Sie lesen möchten, geführt werden. Da der Rückgabewert vom Typ int ist, dann kann er leicht an jede Integer-Wert umgewandelt werden. Der Dateizeiger wird durch die Anzahl der gelesenen Bytes verschoben.

Hinweis

Wenn weniger als 4 Bytes gelesen werden, wird das Ergebnis immer positiv sein. Wenn ein oder zwei Bytes gelesen werden, können Sie das Vorzeichen durch eine explizite Umwandlung bzw. in den Typ char (1 Byte) oder short (2 Byte) bestimmen. Bestimmung vom Verzeichnis für die Drei-Byte-Zahl ist nicht trivial, da es keine entsprechenden Basiswerttyp gibt.

Beispiel (die Datei wird verwendet, die infolge der Arbeit des Beispiels für die Funktion FileWriteInteger bekommen ist)

//+------------------------------------------------------------------+
//|                                         Demo_FileReadInteger.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_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "Trends"
#property indicator_type1   DRAW_SECTION
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- Parameter zum Lesen von Daten
input string InpFileName="Trend.bin"// der Dateiname
input string InpDirectoryName="Data"// der Verzeichnisname
//--- globale Variablen
int      ind=0;
int      size=0;
datetime time_buff[];
//--- indicator buffers
double   buff[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   int def_size=100;
//--- trennen Sie den Speichern für den Arrays
   ArrayResize(time_buff,def_size);
//--- öffnen Sie die Datei
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s Datei ist zum Lesen geöffnet",InpFileName);
      PrintFormat("Pfad zur Datei: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- Hilfsvariablen
      int    arr_size;
      uchar  arr[];
      //--- lesen Sie die Dateidaten
      while(!FileIsEnding(file_handle))
        {
         //--- erkennen Sie wieviele Symbole dienen für Zeiterfassung 
         arr_size=FileReadInteger(file_handle,INT_VALUE);
         ArrayResize(arr,arr_size);
         for(int i=0;i<arr_size;i++)
            arr[i]=(char)FileReadInteger(file_handle,CHAR_VALUE);
         //--- merken Sie den Zeitwert
         time_buff[size]=StringToTime(CharArrayToString(arr));
         size++;
         //--- die Größe des Arrays zu erhöhen, wenn sie überfüllt sind
         if(size==def_size)
           {
            def_size+=100;
            ArrayResize(time_buff,def_size);
           }
        }
      //--- schließen Sie die Datei
      FileClose(file_handle);
      PrintFormat("Die Daten sind gelesen, die Datei %s geschlossen",InpFileName);
     }
   else
     {
      PrintFormat("Fehler beim Öffnen der Datei %s, Fehlercode = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//--- Arrays-Bindung zum Indikator Puffers
   SetIndexBuffer(0,buff,INDICATOR_DATA);
//---- erstellen Sie die Indikatorwerte, die im Diagramm nicht sichtbar sein werden
   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);
   ArraySetAsSeries(close,false);
//--- der Zyklus für die noch unbearbeiteten Bars
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- die Voreinstellung 0
      buff[i]=0;
      //--- prüfen Sie, ob es noch Daten gibt
      if(ind<size)
        {
         for(int j=ind;j<size;j++)
           {
            //--- wenn die Daten identisch sind, dann verwenden Sie den Wert aus einer Datei
            if(time[i]==time_buff[j])
              {
               //--- erhalten Sie einen Preis
               buff[i]=close[i];
               //--- vergrößern Sie den Zähler
               ind=j+1;
               break;
              }
           }
        }
     }
//--- den Wert prev_calculated für den nächsten Anruf zurückgeben
   return(rates_total);
  }

Sehen Sie auch

IntegerToString, StringToInteger, Ganzzahlige Typen, FileWriteInteger