как считать данные с файла в массив MQL5

 

Привет форумчане! Внизу привожу пример небольшого скрипта и собственно вопрос там выделен. На форумах ответа не нашел, по справке не могу разобраться. может тут поможете?

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

struct prices
  {
   datetime          date1;   // дата
   double            price1;  // цена
   datetime          date2;   // дата
   double            price2;  // цена
  };
prices arr[];
void OnStart()
  {
//------------ ЗАПИСЬ ФАЙЛА --------------
     string file_name="TEST\\test.txt";
     int file_handle=FileOpen(file_name,FILE_READ|FILE_WRITE);
     FileSeek(file_handle,0,SEEK_END);
     //--- записываем дату и low перовго и второго бара (просто для примера)
     FileWrite(file_handle,iTime(NULL,0,1),iLow(NULL,0,1),iTime(NULL,0,2),iLow(NULL,0,2));
     FileClose(file_handle);
   
//--------------- ЧТЕНИЕ ФАЙЛА --------------
   file_handle=FileOpen(file_name,FILE_READ);
   if(file_handle!=INVALID_HANDLE)
     {
      while(!FileIsEnding(file_handle))
        {
         string str=FileReadString(file_handle); 
         // -- ВОПРОС - КАК ЗДЕСЬ СЧИТАТЬ ЗНАЧЕНИЯ В МАССИВ arr[] ?
        }
      FileClose(file_handle);
      PrintFormat("Данные прочитаны, файл закрыт");
     }
   else
      PrintFormat("Не удалось открыть файл , Код ошибки = %d",GetLastError());
  }



 
Tango_X:

Привет форумчане! Внизу привожу пример небольшого скрипта и собственно вопрос там выделен. На форумах ответа не нашел, по справке не могу разобраться. может тут поможете?



А не лучше писать в .bin файл FileWriteArray? Пишет и массив структур с таким-же успехом. Проблема только в том, что не открывается блокнотом…

https://www.mql5.com/ru/docs/files/filereadarray
 
Alexey Viktorov #:

А не лучше писать в .bin файл FileWriteArray? Пишет и массив структур с таким-же успехом. Проблема только в том, что не открывается блокнотом…

https://www.mql5.com/ru/docs/files/filereadarray

Спасибо, все получилось! Было не правильное понимание принципа работы с файлами

 
Еще не большой вопрос. Файл создается из индикатора. Как правильно теперь мониторить содержимое файла из советника? Получается на каждом тике надо открывать и закрывать файл для просмотра данных? Суть в следующем - появились данные в файле - советник их считал и удалил(как удалять строки из файла еще не разобрался) и так по кругу.
 
Строки удалять не нужно. При помощи FileWriteArray весь массив перезаписывается полностью. Предупредить об изменении файла можно напрямую из индикатора в советник при помощи EventChartCustom, для этого необходимо знать ИД окна советника. (Советник может записать в глобальную переменную терминала ИД своего окна).
 
Aleksei Stepanenko #:
Строки удалять не нужно. При помощи FileWriteArray весь массив перезаписывается полностью. Предупредить об изменении файла можно напрямую из индикатора в советник при помощи EventChartCustom, для этого необходимо знать ИД окна советника. (Советник может записать в глобальную переменную терминала ИД своего окна).

я отследил изменнеие файл, прочел и запомнил в нем данные  FileReadArray и тепербь мне эти данные не нужны в этом файле. Как их оттуда убрать?  FileWriteArray - записывать пустой массив?

 
Удалите файл. Нет файла, значит нет новых данных. Или запишите пустой массив.
 
Aleksei Stepanenko #:
Удалите файл. Нет файла, значит нет новых данных. Или запишите пустой массив.

ок, спасибо!

 
Tango_X #:
Еще не большой вопрос. Файл создается из индикатора. Как правильно теперь мониторить содержимое файла из советника? Получается на каждом тике надо открывать и закрывать файл для просмотра данных? Суть в следующем - появились данные в файле - советник их считал и удалил(как удалять строки из файла еще не разобрался) и так по кругу.

Читать файл на каждом тике совсем не обязательно

FILE_ACCESS_DATE

Дата последнего доступа к файлу


Индикатор пишет новый файл, время меняется. Советник увидел, что произошли изменения, читает весь массив, удаляет ненужные строки и опять его записывает.

Причина обращения: