Русский

Справочник MQL4 Файловые операции FileWriteString

Справка MQL4 одним файлом:

FileWriteString

Записывает в файл типа BIN, CSV или TXT значение параметра типа string с текущего положения файлового указателя. При записи в файл типа CSV или TXT, если в строке присутствует символ '\n' (LF) без предшествующего символа '\r' (CR), то перед символом '\n' дописывается отсутствующий символ '\r'.

uint  FileWriteString(
   int           file_handle,    // handle файла
   const string  text_string,    // записываемая строка
   int           length=0        // количество символов
   );

Параметры

file_handle

[in]  Файловый описатель, возвращаемый функцией FileOpen().

text_string

[in]  Строка.

length=0

[in]  Количество символов, которые нужно записать. Параметр необходим для записи строки в файл типа BIN. Если размер не указан, то записывается вся строка без завершающего 0. Если указан размер меньший, чем длина строки, то записывается часть строки без завершающего 0. Если указан размер больший, чем длина строки, то строка дописывается соответствующим количеством нулей. Для файлов типа CSV и TXT этот параметр игнорируется и строка записывается полностью.

Возвращаемое значение

В случае удачи функция возвращает количество записанных байт или 0 в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Файловый указатель перемещается на это же количество байт.

Примечание

Следует иметь в виду, что при записи в файл, открытый с флагом FILE_UNICODE (либо без флага FILE_ANSI), количество записанных байт будет в 2 раза больше количества записанных символов строки. При записи в файл, открытый с флагом FILE_ANSI, количество записанных байт будет совпадать с количеством записанных символов строки.

Пример:

//+------------------------------------------------------------------+
//|                                         Demo_FileWriteString.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- параметры для получения данных из терминала
input string             InpSymbolName="EURUSD";      // Валютная пара
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_H1;   // Таймфрейм
input int                InpMAPeriod=14;              // Период скользящей средней
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE// Тип цены
//--- параметры для записи данных в файл
input string             InpFileName="RSI.csv";       // Имя файла
input string             InpDirectoryName="Data";     // Имя каталога
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double   rsi_buff[];  // массив значений индикатора
   datetime date_buff[]; // массив дат индикатора
   int      rsi_size=0;  // размер массивов индикатора
//--- установим для массивов признак таймсерии
   ArraySetAsSeries(rsi_buff,true);
   ArraySetAsSeries(date_buff,true);
//--- сбросим код ошибки
   ResetLastError();
//--- скопируем таймсерию,содержащую время открытия последних 1000 баров
   int copied=CopyTime(NULL,0,0,1000,date_buff);
   if(copied<=0)
     {
      Print("Не удалось скопировать времена открытия за последние 1000 баров");
      return;
     }
//--- подготовим массив rsi_buff
   ArrayResize(rsi_buff,copied);
//--- скопируем значения индикатора iRSI
   for(int i=0;i<copied;i++)
     {
      rsi_buff[i]=iRSI(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpAppliedPrice,i);
     }
//--- получим размер буфера
   rsi_size=ArraySize(rsi_buff);
//--- откроем файл для записи значений индикатора (если его нет, то создастся автоматически)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("Файл %s открыт для записи",InpFileName);
      PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- подготовим вспомогательные переменные
      string str="";
      bool   is_formed=false;
      //--- запишем даты формирования зон перекупленности и перепроданности
      for(int i=0;i<rsi_size;i++)
        {
         //--- проверка значений индикатора
         if(rsi_buff[i]>=70 || rsi_buff[i]<=30)
           {
            //--- первое ли значение в этой зоне
            if(!is_formed)
              {
               //--- добавляем значение и дату
               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];
            //--- переход на следующую итерацию цикла
            continue;
           }
         //--- проверка флага
         if(is_formed)
           {
            //--- строка сформирована, запишем ее в файл
            FileWriteString(file_handle,str+"\r\n");
            is_formed=false;
           }
        }
      //--- закрываем файл
      FileClose(file_handle);
      PrintFormat("Данные записаны, файл %s закрыт",InpFileName);
     }
   else
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
  }

Смотри также

Тип string, StringFormat()