[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 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 -カンマで 区切られた値。デリミタは「,」がデフォルトである。MQL4では、"; "で区切ることはあまり一般的ではありませんし、全くサポートされていないかと思われます。

何か書き方がおかしいぞ...。

私の書くものの具体的などこが気に入らないのでしょうか...?