FileWriteString

Inscrit au fichier comme BIN, CSV ou TXT la valeur du paramètre du type string de la position courante du pointeur de fichier. A l'enregistrement au fichier comme CSV ou TXT, si dans la ligne il y a un symbole '\n' (LF) sans symbole précédant '\r' (CR), devant le symbole '\n' on écrit le symbole manquant '\r'.

uint  FileWriteString(
   int           file_handle,    // handle du fichier
   const string  text_string,    // chaîne enregistrée
   int           length=-1       // nombre de symboles
   );

Paramètres

file_handle

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

text_string

[in] La chaîne.

length=-1

[in]  Le nombre de caractères, qu'il faut enregistrer. Le paramètre est nécessaire à l'enregistrement de la chaîne au fichier du type BIN. Si la taille n'est pas indiqué, s'inscrit toute la chaîne sans le 0 terminant. Si la taille indiquée est plus petite que la longueur de la chaîne, on s'inscrit toute la chaîne sans le 0 terminant. Si on indique  la taille plus que la longueur de la chaîne, la chaîne s'enregistre par le nombre correspondant de zéros. Pour les fichiers comme CSV et TXT ce paramètre est ignoré et la ligne est enregistrée entièrement.

La valeur rendue

En cas du succès la fonction rend le nombre inscrit des bytes. L'indicateur de fichier se déplace sur le même nombre de bytes.

Note

Il faut avoir en vue que pendant l'enregistrement au fichier ouvert avec le drapeau FILE_UNICODE (ou sans le drapeau FILE_ANSI), le nombre inscrit de bytes sera au 2 fois plus de nombre de caractères inscrits de la chaîne. A l'enregistrement au fichier ouvert avec le drapeau FILE_ANSI, le nombre de bytes enregistrés coïncidera avec le nombre de caractères inscrits de la chaîne.

Exemple:

//+------------------------------------------------------------------+
//|                                         Demo_FileWriteString.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 int                InpMAPeriod=14;                   // la période de la moyenne glissant
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // le type du prix
input datetime           InpDateStart=D'2013.01.01 00:00'; // la date du commencement du copiage des données
//--- les paramètres pour l'enregistrement des données au fichier
input string             InpFileName="RSI.csv";   // le nom du fichier
input string             InpDirectoryName="Data"// le nom du répertoire
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish; // la date de la fin du copiage des données
   double   rsi_buff[];  // le tableau des valeurs de l'indicateur
   datetime date_buff[]; // le tableau des dates de l'indicateur
   int      rsi_size=0;  // la taille des tableaux de l'indicateur
//--- le temps de la fin - courant
   date_finish=TimeCurrent();
//--- recevrons le handle de l'indicateur RSI
   ResetLastError();
   int rsi_handle=iRSI(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpAppliedPrice);
   if(rsi_handle==INVALID_HANDLE)
     {
      //--- on n'a pas réussi de recevoir le hadle de l'indicateur
      PrintFormat("L'erreur de la réception du handle de l'indicateur. Le code de l'erreur = %d",GetLastError());
      return;
     }
//---on se trouve dans le cycle, pendant que l'indicateur ne compte pas toutes ses valeurs
   while(BarsCalculated(rsi_handle)==-1)
      Sleep(10); // le retard pour que l'indicateur puisse de calculer ses valeurs
//--- copions les valeurs de l'indicateur pour la période définie
   ResetLastError();
   if(CopyBuffer(rsi_handle,0,InpDateStart,date_finish,rsi_buff)==-1)
     {
      PrintFormat("On n'a pas réussi de copier les valeurs de l'indicateur. Le code de l'erreur = %d",GetLastError());
      return;
     }
//--- copions le temps correspondant pour les valeurs de l'indicateur
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
     {
      PrintFormat("On n'a pas réussi de copier les valeurs du temps. Le code de l'erreur = %d",GetLastError());
      return;
     }
//---désallouons la mémoire occupée par l'indicateur
   IndicatorRelease(rsi_handle);
//--- recevrons la taille du tampon
   rsi_size=ArraySize(rsi_buff);
//--- ouvrirons le fichier pour l'enregistrement des valeurs de l'indicateur (s'il n'existe pas, il sera créé automatiquement)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI);
   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_DATA_PATH));
      //--- préparerons les variables auxiliaires
      string str="";
      bool   is_formed=false;
      //--- écrirons les dates sur les zones de surachat et de survente
      for(int i=0;i<rsi_size;i++)
        {
         //--- la vérification des valeurs de l'indicateur
         if(rsi_buff[i]>=70 || rsi_buff[i]<=30)
           {
            //--- si c'est la première valeur dans cette zone
            if(!is_formed)
              {
               //--- ajoutons la valeur et la date
               str=(string)rsi_buff[i]+"\t"+(string)date_buff[i];
               is_formed=true;
              }
            else
               str+="\t"+(string)rsi_buff[i]+"\t"+(string)date_buff[i];
            //--- le passage à l'itération suivante du cycle
            continue;
           }
         //--- la vérification du drapeau
         if(is_formed)
           {
            //---la ligne est formée, enregistrons au fichier
            FileWriteString(file_handle,str+"\r\n");
            is_formed=false;
           }
        }
      //--- fermons le fichier
      FileClose(file_handle);
      PrintFormat("Les données sont enregistrés, le fichier %s est fermé",InpFileName);
     }
   else
      PrintFormat("Les données sont inscrites, le fichier %s est fermé = %d",InpFileName,GetLastError());
  }

Voir aussi

Le type string, StringFormat