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

 
iliaalyoshin >>:


Разные приёмы? Какие, например?

if (NormalizeDouble(a, 4)==NormalizeDouble(b, 4)) { ... }

 
sergeev >>:

if (NormalizeDouble(a, 4)==NormalizeDouble(b, 4)) { ... }


Так тоже пробовал, и на всякий случай вместо Digits писал 4, потом 5, потом 6... Не работает!
 


Спасибо! Действительно, статья очень познавательна. Но в MetaEditor я не нашел функции bool CompareDoubles...
 


Или, видимо, я не совсем понимаю, а точнее, совсем не понимаю, что такое библиотека?
 
iliaalyoshin писал(а) >>


Или, видимо, я не совсем понимаю, а точнее, совсем не понимаю, что такое библиотека?


Функция для сравнения действительных чисел
//+------------------------------------------------------------------+
//| correct comparison of 2 doubles                                  |
//+------------------------------------------------------------------+
bool CompareDoubles(double number1,double number2)
  {
   if(NormalizeDouble(number1-number2,8)==0) return(true);
   else return(false);
  }
 
Товарищи профи, выручайте.
Подскажите, пожалуйста, как тут быть.

хочу из файла прочитать числа в соответствующие массивы.

числа в файле имеют вид: 1.2121;1.2323;1.3434;1.4545

завожу для них массивы: double s1[], s2[], r1[], r2[]

на этапе инициализации читаю так:

k=0;
//----------------------------------------------

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;
}
while(FileIsEnding(Handle)==false) // До тех пор, пока файловый ..
{ // ..указатель не в конце файла
//--------------------------------------------------------- 5 --
S_1 =StrToDouble(FileReadString(Handle));//
R_1 =StrToDouble(FileReadString(Handle));
S_2 =StrToDouble(FileReadString(Handle));
R_2 =StrToDouble(FileReadString(Handle));
s1[k]=S1; s2[k]=S_2; r1[k]=R_1; r2[k]=R_2;
k=k+1;
if(FileIsEnding(Handle)==true) // Файловый указатель в конце
break; // Выход из чтения и рисования
//--------------------------------------------------------- 6 --
}
FileClose( Handle ); // Закрываем файл
PlaySound("bulk.wav"); // Звуковое сопровождение

но, массивы, к сожалению, не заполняются...

Посоветуйте, как тут быть....
 

Посоветуйте, как тут быть....

Во-первых, в csv файлах элементы разделяются знаком "," а не ";"
Во-вторых, массивы у Вас должны заполняться первым элементом каждой строки файла, т.к. Вы сначала извлекаете всю строку коммандой FileReadString, затем преобразуете ее в одно вещественное число, а следующая комманда FileRead уже работает со следующей строкой файла.

Можно организовать чтение так:

for(;;) {
str=FileReadString(Handle);
s1[k] =StrToDouble(StringSubstr(str,0,6));
s2[k] =StrToDouble(StringSubstr(str,7,6));
r1[k] =StrToDouble(StringSubstr(str,14,6));
r2[k] =StrToDouble(StringSubstr(str,21,6));
k++;
if(FileIsEnding(Handle)) break;
}


Должно работать... но не факт :)

 
Axmed писал(а) >>

Во-первых, в csv файлах элементы разделяются знаком "," а не ";"
Во-вторых, массивы у Вас должны заполняться первым элементом каждой строки файла, т.к. Вы сначала извлекаете всю строку коммандой FileReadString, затем преобразуете всю строку в одно вещественное число, а следующая комманда FileRead уже работает со следующей строкой файла.

Можно организовать чтение так:

for(;;) {
str=FileReadString(Handle);
s1[k] =StrToDouble(StringSubstr(str,0,6));
s2[k] =StrToDouble(StringSubstr(str,7,6));
r1[k] =StrToDouble(StringSubstr(str,14,6));
r2[k] =StrToDouble(StringSubstr(str,21,6));
k++;
if(FileIsEnding(Handle)) break;
}


Должно работать... но не факт :)


Разделитель по умолчанию ";", хотя можно использовать любой.
 
Axmed писал(а) >>

Что-то вы не то пишите...

 
Vinin писал(а) >>


Разделитель по умолчанию ";", хотя можно использовать любой.


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

Что-то вы не то пишите...

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