[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 471

 
Axmed писал(а) >>


CSV - Comma Separated Values. Именно "," является используемым по умолчанию разделителем. Разделение с помощью ";" распространено гораздо реже, и я не уверен, что в MQL4 оно вообще поддерживается.


int FileOpen( string filename, int mode, int delimiter=';')
Открывает Файл для ввода и/или вывода. Возвращает файловый описатель открытого файла или -1 в случае неудачи. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().
Замечания: файлы могут открываться только в папке каталог_терминала\experts\files (каталог_терминала\tester\files в случае тестирования эксперта) или ее подпапках.
Нельзя одновременно использовать режимы FILE_BIN и FILE_CSV.
Если FILE_WRITE не комбинируется с FILE_READ, то будет открыт файл нулевой длины. Даже если до открытия в файле были данные, то они будут уничтожены. Если необходимо дописывать данные в существующий файл, то его нужно открывать, используя комбинацию FILE_READ | FILE_WRITE.
Если FILE_READ не комбинируется с FILE_WRITE, то файл будет открыт только в том случае, если он уже существует. Если файл не существует, то создать его можно, используя режим FILE_WRITE.
Одновременно может быть открыто не более 32 файлов в пределах одного исполняемого модуля. Описатели файлов, открытых в одном модуле, нельзя передавать в другие модули (библиотеки).
Параметры:
filename - Имя файла.
mode - Способ открытия. Это может быть одна величина или их комбинация: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE.
delimiter - Знак разделителя для csv-файлов. По умолчанию применяется символ ';'.
Пример:
  int handle;
  handle=FileOpen("my_data.csv",FILE_CSV|FILE_READ,';');
  if(handle<1)
    {
     Print("Файл my_data.dat не обнаружен, последняя ошибка ", GetLastError());
     return(false);
    }

Справку читать тоже надо.
 
Axmed >>:


Что конкретно Вам не понравилось в том что я пишу?..

Да всё не то.
";" - именно этот символ считается разделителем по умолчанию.
FileReadString - читает не всю строку, а от текущего положения указателя в файле до следующего разделителя.

 

Здравствуйте! Подскажите, пожалуйста, как можно вызвать необходимую переменную из пользовательского индикатора, пробовал GlobalVariableSet() / GlobalVariableGet() - получается вызвать из другого эксперта, а из индикатора не получается.. Заранее благодарен...

 
kara100 писал(а) >>

Здравствуйте! Подскажите, пожалуйста, как можно вызвать необходимую переменную из пользовательского индикатора, пробовал GlobalVariableSet() / GlobalVariableGet() - получается вызвать из другого эксперта, а из индикатора не получается.. Заранее благодарен...


какую именно переменную хочешь получить и из какого индикатора?
 

Price из +MP (228 строка) - мне нужны значения (ценовые) уровней

Файлы:
ymp_1.mq4  6 kb
 
kara100 писал(а) >>

Price из +MP (228 строка) - мне нужны значения (ценовые) уровней


попробуй переменную prise переместить на глобальный уровнь, а строчку GlobalVariableSet("55", prise); сразу в начале функции start() а из другой проги доставай вот так double x=GlobalVariableGet("55");

 
Techno писал(а) >>


попробуй переменную prise переместить на глобальный уровнь, а строчку GlobalVariableSet("55", prise); сразу в начале функции start() а из другой проги доставай вот так double x=GlobalVariableGet("55");


вроде пробовал... пишет, что глобальная переменная не описана, т.е. из индикатора глобальные переменные не выходят.. Ещё раз попробую..

 
kara100 писал(а) >>


вроде пробовал... пишет, что глобальная переменная не описана, т.е. из индикатора глобальные переменные не выходят.. Ещё раз попробую..


как поправишь код выложи его сюда
 
Друзья, спасибо большое, что откликнулись. уточнение, как преобразовать string в double?
StrToDouble() - не прокатывает :(

Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
if(Handle<0) // Неудача при открытии файла
{
if(GetLastError()==4103) // Если файла не существует,..
Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера
else // При любой другой ошибке..
Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
PlaySound("Bzrrr.wav"); // Звуковое сопровождение
return; // Выход из start()
}
k=0;
while(FileIsEnding(Handle)==false) // До тех пор, пока файловый ..
{ // ..указатель не в конце файла
//--------------------------------------------------------- 5 --
ss1[k] = (FileReadString(Handle));
x1[k]=StrToDouble(ss1[k]);//
ss2[k] = (FileReadString(Handle));
rr1[k] = (FileReadString(Handle));
rr2[k] = (FileReadString(Handle));
k=k+1;
if(FileIsEnding(Handle)==true) // Файловый указатель в конце
break; // Выход из чтения и рисования
}
FileClose( Handle ); // Закрываем файл
PlaySound("bulk.wav"); // Звуковое сопровождение
//-----------------------------------------------
Alert(" ", ss1[0], " ", ss2[0], " ", rr1[0], " ", rr2[0], " x1== ", x1[0] );

Строковые массивы заполняются из файла нормально. Но, необходимо преобразовать эти строки в double.
делаю это:
x1[k]=StrToDouble(ss1[k]);
но, при выводе в Алерте, x1[0] = 0, что неправильно. то есть, где-то тут ошибка в преобразовании типов...

Как такую ситуацию исправить?
 
Morzh09 >>:

Друзья, спасибо большое, что откликнулись. уточнение, как преобразовать string в double?
StrToDouble() - не прокатывает :( 
Строковые массивы заполняются из файла нормально. Но, необходимо преобразовать эти строки в double.
делаю это:
x1[k]=StrToDouble(ss1[k]);
но, при выводе в Алерте, x1[0] = 0, что неправильно. то есть, где-то тут ошибка в преобразовании типов...

Как такую ситуацию исправить?

Вы не моглы бы весь скрипт выложить? Я имею ввиду вместе с объявлениями переменных массивов и т.д.

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