MetaTrader 5 herunterladen

FileWriteInteger

Schreibt in eine bin-Datei den Wert des Parameters des Typs int von der angegebenen Position des Dateianzeigers.

uint  FileWriteInteger(
   int  file_handle,        // Datei-Handle
   int  value,              // geschriebener Wert
   int  size=INT_VALUE      // Größe in Bytes
   );

Parameter

file_handle

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

value

[in]  Gazzahliger Wert.

size=INT_VALUE

[in]  Anzahl der Bytes (bis 4 einschliesslich), die geschrieben werden müssen. Entsprechende Konstanten werden vorausgesehen: CHAR_VALUE=1, SHORT_VALUE=2 und INT_VALUE=4, so kann die Funktion den ganzzahligen Wert des Typs char, uchar, short, ushort, int oder uint schreiben.

Rückgabewert

Im Erfolgsfall gibt die Funktion die Anzahl der geschriebenen Bytes zurück. Dateianzeiger wird um dieselbe Anzahl der Bytes verschoben.

Beispiel:

//+------------------------------------------------------------------+
//|                                        Demo_FileWriteInteger.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"
//--- Beim Starten des Scripts zeigen Sie den Fenster mit den Eingabeparametern an
#property script_show_inputs
//--- die Parameter für das Erhalten der Daten aus dem Terminal
input string             InpSymbolName="EURUSD";           // Währungspaar
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_H1;        // Zeitspanne
input datetime           InpDateStart=D'2013.01.01 00:00'; // das Anfangsdatum zum Kopieren von Daten
//--- die Parameter für die Aufzeichnung der Daten in die Datei
input string             InpFileName="Trend.bin"// der Dateiname
input string             InpDirectoryName="Data"// der Verzeichnisname
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish=TimeCurrent();
   double   close_buff[];
   datetime time_buff[];
   int      size;
//--- stürzen Sie den Fehlerwert
   ResetLastError();
//--- Kopieren Sie der Schlußpreis für jede Bar
   if(CopyClose(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,close_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren von Werte des Schlußpreises. Fehlercode = %d",GetLastError());
      return;
     }
//--- Kopieren Sie die Zeit für jede Bar
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren von Zeitwerte. Fehlercode = %d",GetLastError());
      return;
     }
//--- erhalten Sie die Größe des Buffers
   size=ArraySize(close_buff);
//--- öffnen Sie die Datei zum Schreiben die Werte (wenn nicht, dann sie automatisch erstellt werden wird)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|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));
      //--- 
      int   up_down=0; // Die Fahne der Tendenz
      int   arr_size;  // die Größe des Arrays arr
      uchar arr[];     // das Array vom Typ uchar
      //--- schreiben Sie die Zeitwerte in die Datei
      for(int i=0;i<size-1;i++)
        {
         //--- Vergleichen Sie die Schlußpreis an den aktuellen und folgenden Bars
         if(close_buff[i]<=close_buff[i+1])
           {
            if(up_down!=1)
              {
               //--- schreiben Sie den Datumswert in einer Datei mit FileWriteInteger
               StringToCharArray(TimeToString(time_buff[i]),arr);
               arr_size=ArraySize(arr);
               //--- schreiben Sie zuerst die Anzahl der Symbolen im Array
               FileWriteInteger(file_handle,arr_size,INT_VALUE);
               //--- schreiben Sie die Symbole selbst
               for(int j=0;j<arr_size;j++)
                  FileWriteInteger(file_handle,arr[j],CHAR_VALUE);
               //--- ändern Sie die Fahne der Tendenz
               up_down=1;
              }
           }
         else
           {
            if(up_down!=-1)
              {
               //--- schreiben Sie den Datumswert in einer Datei mit FileWriteInteger
               StringToCharArray(TimeToString(time_buff[i]),arr);
               arr_size=ArraySize(arr);
               //--- schreiben Sie zuerst die Anzahl der Symbolen im Array
               FileWriteInteger(file_handle,arr_size,INT_VALUE);
               //--- schreiben Sie die Symbole selbst
               for(int j=0;j<arr_size;j++)
                  FileWriteInteger(file_handle,arr[j],CHAR_VALUE);
               //--- ändern Sie die Fahne der Tendenz
               up_down=-1;
              }
           }
        }
      //--- schließen Sie die Datei
      FileClose(file_handle);
      PrintFormat("Die Daten sind aufgezeichnet, die Datei %s geschlossen",InpFileName);
     }
   else
      PrintFormat("Fehler beim Öffnen der Datei %s, Fehlercode = %d",InpFileName,GetLastError());
  }

Sehen Sie auch

IntegerToString, StringToInteger, Ganzzahlige Typen