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=-1       // количество символов
   );

Параметры

file_handle

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

text_string

[in]  Строка.

length=-1

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

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

В случае удачи функция возвращает количество записанных байт. Файловый указатель перемещается на это же количество байт.

Примечание

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

Пример:

//+------------------------------------------------------------------+
//|                                         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"
//--- покажем окно входных параметров при запуске скрипта
#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 datetime           InpDateStart=D'2013.01.01 00:00'; // дата начала копирования данных
//--- параметры для записи данных в файл
input string             InpFileName="RSI.csv";   // имя файла
input string             InpDirectoryName="Data"// имя директории
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish; // дата конца копирования данных
   double   rsi_buff[];  // массив значений индикатора
   datetime date_buff[]; // массив дат индикатора
   int      rsi_size=0;  // размер массивов индикатора
//--- время окончания - текущее
   date_finish=TimeCurrent();
//--- получим хэндл индикатора RSI
   ResetLastError();
   int rsi_handle=iRSI(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpAppliedPrice);
   if(rsi_handle==INVALID_HANDLE)
     {
      //--- не удалось получить хэндл индикатора
      PrintFormat("Ошибка получения хэндла индикатора. Код ошибки = %d",GetLastError());
      return;
     }
//--- находимся в цикле, пока индикатор не рассчитает все свои значения
   while(BarsCalculated(rsi_handle)==-1)
      Sleep(10); // задержка, чтобы индикатор успел вычислить свои значения
//--- скопируем значения индикатора за определенный период
   ResetLastError();
   if(CopyBuffer(rsi_handle,0,InpDateStart,date_finish,rsi_buff)==-1)
     {
      PrintFormat("Не удалось скопировать значения индикатора. Код ошибки = %d",GetLastError());
      return;
     }
//--- скопируем соответствующее время для значений индикатора
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
     {
      PrintFormat("Не удалось скопировать значения времени. Код ошибки = %d",GetLastError());
      return;
     }
//--- освободим память, занимаемую индикатором
   IndicatorRelease(rsi_handle);
//--- получим размер буфера
   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