Бета-тестирование MetaTrader 5 началось! - страница 82

 
m_o_jul писал(а) >>

Добрый день. Вопрос MQL5 - запись данных в файл.

Как дописать данные в файл? Пробовала открыть с помощью команды FileOpen("SomeFile.txt",FILE_BIN|FILE_SHARE_READ|FILE_ANSI); - файл открывается. Хэндл - 1. Но при записи в файл (FileWriteString(lnFHW,"Some String"); - данные не пишутся. Если же открыть файл с флагом FILE_WRITE - файл открывается нулевой длины, т.е. ранее записанные данные пропадают. Это так и задумано или ошибка в программе?

Всего доброго.

FILE_READ|FILE_WRITE

 
m_o_jul >>:

Добрый день. Вопрос MQL5 - запись данных в файл.

Как дописать данные в файл? Пробовала открыть с помощью команды FileOpen("SomeFile.txt",FILE_BIN|FILE_SHARE_READ|FILE_ANSI); - файл открывается. Хэндл - 1. Но при записи в файл (FileWriteString(lnFHW,"Some String"); - данные не пишутся. Если же открыть файл с флагом FILE_WRITE - файл открывается нулевой длины, т.е. ранее записанные данные пропадают. Это так и задумано или ошибка в программе?

Всего доброго.

Разобралась, нужно писать сразу при открытии и FILE_WRITE|FILE_READ. Только тогда не понятно назначение параметра FILE_BIN.

 
m_o_jul писал(а) >>

Разобралась, нужно писать сразу при открытии и FILE_WRITE|FILE_READ. Только тогда не понятно назначение параметра FILE_BIN.

FILE_BIN указывает на то, что числа, вещественные и целые, записываются в файл как есть, в двоичном формате, без преобразования в текстовый формат.

 
m_o_jul >>:

Разобралась, нужно писать сразу при открытии и FILE_WRITE|FILE_READ. Только тогда не понятно назначение параметра FILE_BIN.

Вы выбрали не самый очевидный способ открытия файла на чтение и запись.

Флаги открытия файлов

Значения флагов, определяющих режим работы с файлом. Флаги определены следующим образом:

Идентификатор

Описание

FILE_READ

Файл открывается для чтения

FILE_WRITE

Файл открывается для записи

FILE_BIN

Двоичный режим чтения-записи (без преобразования из строки и в строку)

FILE_CSV

Файл типа csv (все записанные элементы преобразуются к строкам соответствующего типа, unicode или ansi, и разделяются разделителем)

FILE_TXT

Простой текстовый файл (тот же csv, однако разделитель не принимается во внимание)

FILE_ANSI

Строки типа ANSI (однобайтовые символы)

FILE_UNICODE

Строки типа UNICODE (двухбайтовые символы)

FILE_SHARE_READ

Совместный доступ по чтению со стороны нескольких программ

FILE_SHARE_WRITE

Совместный доступ по записи со стороны нескольких программ

FILE_REWRITE

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

FILE_COMMON

Расположение файла в общей папке всех клиентских терминалов

 
m_o_jul >>:

Добрый день. Вопрос MQL5 - запись данных в файл.

Как дописать данные в файл? Пробовала открыть с помощью команды FileOpen("SomeFile.txt",FILE_BIN|FILE_SHARE_READ|FILE_ANSI); - файл открывается. Хэндл - 1. Но при записи в файл (FileWriteString(lnFHW,"Some String"); - данные не пишутся. Если же открыть файл с флагом FILE_WRITE - файл открывается нулевой длины, т.е. ранее записанные данные пропадают. Это так и задумано или ошибка в программе?

Всего доброго.


Если сильно не ломать голову то сначала считываем содержимое файла (открыв его при помощи FILE_SHARE_READ),а затем создаем новый файл и пишем в него все что нужно (при помощи FILE_WRITE).


PS

Хотя по логике вещей кроме FileOpen, FileCopy и FileDelete следует предусмотреть и FileCreate.

При этом так чтобы FileOpen открывал уже существующий файл для чтения и записи (без удаления содержимого), а FileCreate создавал/переписывал файл...

 
Как там вопрос с проблемами при применении "OBJPROP_CORNER" в ObjectSetInteger?
 
Interesting >>:

Или я что-то не понимаю или для объекта "Label" не корректно работает вот этот код



Руками проверил, корректно работает только "CORNER_LEFT_UPPER".


PS

Билд 212....

В разделе "Справочник MQL5 / Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки " есть пример скрипта, который расставляет метки по четырем углам. Запустите его у себя.

void CreateLabel(long   chart_id,
                 string name,
                 int    chart_corner,
                 string text_label,
                 int    x_ord,
                 int    y_ord)
  {
//---
   ObjectCreate(chart_id,name,OBJ_LABEL,0,0,0);
   ResetLastError();
   if(!ObjectSetInteger(chart_id,name,OBJPROP_CORNER,chart_corner))
      Print("Не удалось установить угол привязки для объекта",
            name,", ошибка",GetLastError());
   ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,x_ord);
   ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,y_ord);
   ObjectSetString(chart_id,name,OBJPROP_TEXT,text_label);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int height=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
   int width=ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
   string arrows[4]={"LEFT_UPPER","RIGHT_UPPER","RIGHT_LOWER","LEFT_LOWER"};
   CreateLabel(0,arrows[0],CORNER_LEFT_UPPER,"0",50,50);
   CreateLabel(0,arrows[1],CORNER_RIGHT_UPPER,"1",50,50);
   CreateLabel(0,arrows[2],CORNER_RIGHT_LOWER,"2",50,50);
   CreateLabel(0,arrows[3],CORNER_LEFT_LOWER,"3",50,50);
  }
 
 

А еще не мешало бы добавить OBJPROP_WIDTH и OBJPROP_HEIGHT для button, label, и др. подобных объектов.

Для полноценности. Отсутствие этих свойств сильно ограничивает возможности.

 
Rosh >>:

В разделе "Справочник MQL5 / Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки " есть пример скрипта, который расставляет метки по четырем углам. Запустите его у себя.

Спасибо, разобрался. Не сразу обратил внимание на все параметры у Label (в старом коде отсутствовал OBJPROP_ANCHOR и другие приятные мелочи).....

 
pronych >>:

А еще не мешало бы добавить OBJPROP_WIDTH и OBJPROP_HEIGHT для button, label, и др. подобных объектов.

Для полноценности. Отсутствие этих свойств сильно ограничивает возможности.

OBJPROP_XSIZE и OBJPROP_YSIZE

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