FileWriteStruct

Inscrit au fichier bin le contenu de la structure, transmise à titre du paramètre de la position courante de l'indicateur de fichier.

uint  FileWriteStruct(
   int          file_handle,       // handle du fichier
   const void&  struct_object,     // lien à l'objet
   int          size=-1            // taille pour enregistrement en bytes
   );

Paramètres

file_handle

[in]   Le descripteur de fichier rendu par la fonction FileOpen().

struct_object

[in]  Le lien à l'objet de la structure indiquée. La structure ne doit pas contenir les chaînes, les tableaux dynamiques et les fonctions virtuelles.

size=-1

[in]  Le nombre de bytes, lesquels il faut lire. Si la dimension n'est pas spécifiée ou le nombre de bytes plus que la taille de la structure est indiqué, on enregistre toute la structure.

La valeur rendue

En cas de succès la fonction rend le nombre de bytes lus. L'indicateur de fichier est déplacé par le même nombre de bytes.

Exemple:

//+------------------------------------------------------------------+
//|                                          Demo_FileWiteStruct.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"
//--- montrons la fenêtre des paramètres d'entrée au lancement du script
#property script_show_inputs
//--- les paramètres pour la réception des données du terminal
input string          InpSymbolName="EURUSD";           // la paire de devise
input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_H1;        // le temps trame
input datetime        InpDateStart=D'2013.01.01 00:00'; // la date de commencement du copiage des données
//--- les paramètres pour l'enregistrement des données au fichier
input string          InpFileName="EURUSD.txt";         // le nom du fichier
input string          InpDirectoryName="Data";          // le nom du répertoire
//+------------------------------------------------------------------+
//| La structure pour stocker des données de la bougie                               |
//+------------------------------------------------------------------+
struct candlesticks
  {
   double            open;  // le prix de l'ouverture 
   double            close; // le prix de la clôture
   double            high;  // le prix maximum
   double            low;   // le prix minimum
   datetime          date;  // la date
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime     date_finish=TimeCurrent();
   int          size;
   datetime     time_buff[];
   double       open_buff[];
   double       close_buff[];
   double       high_buff[];
   double       low_buff[];
   candlesticks cand_buff[];
//--- oblitérons la valeur de l'erreur
   ResetLastError();
//--- recevrons le temps de l'apparition des barres de la gamme
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
     {
      PrintFormat("On n'a pas réussi de copier les valeurs du temps. Le code de l'erreur = %d",GetLastError());
      return;
     }
//--- recevrons les prix maximals des barres de la gamme
   if(CopyHigh(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,high_buff)==-1)
     {
      PrintFormat(On n'a pas réussi de copier les valeurs des prix maximales. Le code de l'erreur = %d",GetLastError());
      return;
     }
//--- recevrons les prix minimales des barres de la gamme
   if(CopyLow(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,low_buff)==-1)
     {
      PrintFormat("On n'a pas réussi de copier les valeurs des prix minimales. Le code de l'erreur = %d",GetLastError());
      return;
     }
//--- recevrons les prix de l'ouverture des barres de la gamme
   if(CopyOpen(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,open_buff)==-1)
     {
      PrintFormat("On n'a pas réussi de copier les valeurs des prix de l'ouverture. Le code de l'erreur = %d",GetLastError());
      return;
     }
//--- recevrons les prix de la clôture des barres de la gamme
   if(CopyClose(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,close_buff)==-1)
     {
      PrintFormat("On n'a pas réussi de copier les valeurs des prix de la clôture. Le code de l'erreur = %d",GetLastError());
      return;
     }
//--- définirons la dimension des tableaux
   size=ArraySize(time_buff);
//--- sauvegardons toutes les structures données dans le tableau
   ArrayResize(cand_buff,size);
   for(int i=0;i<size;i++)
     {
      cand_buff[i].open=open_buff[i];
      cand_buff[i].close=close_buff[i];
      cand_buff[i].high=high_buff[i];
      cand_buff[i].low=low_buff[i];
      cand_buff[i].date=time_buff[i];
     }
 
//--- ouvrirons le fichier pour l'enregistrement du tableau de la structure au fichier (s'il n'existe pas, il sera créé automatiquement) 
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN|FILE_COMMON);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("Le fichier %s est ouvert pour l'enregistrement",InpFileName);
      PrintFormat("La voie vers le fichier: %s\\Files\\",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
      //--- préparerons le compteur de la quantité des octets
      uint counter=0;
      //---enregistrons les valeurs du tableau dans le cycle 
      for(int i=0;i<size;i++)
         counter+=FileWriteStruct(file_handle,cand_buff[i]);
      PrintFormat(" %d octets de l'information sont enregistrés au fichier %s",InpFileName,counter);
      PrintFormat("Au total octets: %d * %d * %d = %d, %s",size,5,8,size*5*8,size*5*8==counter ? "Juste" : "L'erreur");
      //--- fermons le fichier
      FileClose(file_handle);
      PrintFormat("Les données sont enregistrées, le fichier %s est fermé",InpFileName);
     }
   else
      PrintFormat("On n' a pas réussi à ouvrir le fichier %s, le code de l'erreur = %d",InpFileName,GetLastError());
  }

Voir aussi

Les structures et les classes