MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 481

 
STARIJ:

書き込み用にファイルを開く 際に、TXTまたはCSVを指定しました。これはテキストファイルです。文字列として読み込み,StringSubstrを選択し,必要なものに変換する

void Write_File()
{
    int handle;
    static double BlueL,RedL;
    string B_level= DoubleToStr(BlueLine, Digits);
    string R_level= DoubleToStr(RedLine, Digits);
    string f_name = " (" + Symbol() + ")\\" + TimeToStr( LocalTime(),TIME_DATE ) + ".txt";
     
    
      if(BlueLine!=BlueL||RedLine!=RedL)
       {
       Sleep(10000);//подождем 10 сек, пока оператор меняет уровни
       
      // Открытие или создание файла и перемещение указателя в конец
      handle= FileOpen(f_name,FILE_CSV|FILE_READ|FILE_WRITE," ");
      if(handle == -1) {  Alert("Ошибка при открытии файла ",handle);  return; }
      FileSeek(handle,0,SEEK_END);

      // Если новый файл - записать имя файла и строку заголовков колонок
      if(FileSize(handle)==0)
      {
         FileWrite(handle,f_name);
         FileWrite(handle,"Изменение Уровней   BlueLine   RedLine");
      }
      // Сбор информации и запись в файл
      FileWrite(handle,TimeToStr(TimeCurrent()), "  ",B_level, "  ",R_level);
      FileClose(handle);
      BlueL=BlueLine;RedL=RedLine;
      }
      return;
   }

これが書き方だ!TCT

B_levelとR_levelを 正確に出す方法が今ひとつ理解できず、申し訳ありません。日時は必要ない!でも、書き留めたいんです)

 
Rewerpool:

これが書き方だ!TCT

B_levelとR_levelを 正確に出す方法が今ひとつ理解できず、申し訳ありません。日時は必要ない!でも、書きたいんです)

文字列として読み込み、StringSubstrを ハイライトし、必要なものに変換する。文字列として読み込み,StringSubstrを確保し,必要なものに変換する

 
STARIJ:

文字列として読み込み、StringSubstrを確保し、必要なものに変換する。文字列として読み込み,StringSubstrを選択し,任意の文字列に変換する。

それだ!!!STARIJ さん、ありがとうございます。試してみる)

 

STARIJが 動かない、どこが悪いのかまだわからない助けて

double BlueLine,RedLine;

void Read_File()
{
    int handle;
    string B_level;
    string R_level;
    static double BlueL=StrToDouble(B_level);
    static double RedL=StrToDouble(R_level);
    
    string f_name = " (" + Symbol() + ")\\" + TimeToStr( LocalTime(),TIME_DATE ) + ".txt";
     
     if(BlueL!=BlueLine||RedL!=RedLine)
     {
      // Открытие или создание файла и перемещение указателя в конец
      handle= FileOpen(f_name,FILE_CSV|FILE_READ|FILE_WRITE," ");
      if(handle == -1) {  Alert("Ошибка при открытии файла ",handle);  return; }
      FileSeek(handle,0,SEEK_END);
      
      // Чтение информации из файла
      FileReadString(handle,B_level= StringSubstr(f_name,16,7),R_level= StringSubstr(f_name,23,7));
      FileClose(handle);
      
      BlueLine=BlueL;RedLine=RedL;
      }
      return;
   }
1 間違いだ、でも何か悪いことをしたかな?
 

なぜそれが嫌なんだ?

2

 
Rewerpool:

なぜこうならないのか?


関数にどんなパラメータをいくつ渡すか、そして何を返すかを見てください。

f1をクリックし、あらかじめこの関数の上にカーソルを置いておきます。

 
Rewerpool:

STARIJが 動かない、どこが悪いのかまだわからない助けて

間違いだ、でも何か悪いことをしたかな?
まず、最後の文字列を読んでみましょう
   int handla = FileOpen("1111.txt",FILE_TXT|FILE_READ," ");   // TXT !!!!!!!
   string s;
   while(!FileIsEnding(handla))  s=FileReadString(handla,100);
   Alert(s);
   FileClose(handla);

2018.02.26 12:49 1.24368 1.22581 今 ...StringSubstrをハイライト表示し、必要なものに変換します。何事も一歩一歩進めていくことが大切です。急ぐことはプログラマーの敵である。

   double Синяя=StrToDouble(StringSubstr(s,20,7));
   double Красн=StrToDouble(StringSubstr(s,31,7));
   Alert(DoubleToStr(Синяя,5), "   ", DoubleToStr(Красн,5));

文字列として読み込み、StringSubstrを確保し、文字列に変換する。 文字列として読み込み,StringSubstrを確保し,文字列に変換する。

 
STARIJ:
まず、最後の文字列を読んでみましょう

2018.02.26 12:49 1.24368 1.22581 今 ...をStringSubstrとして確保し、必要なものに変換する。何事も一歩一歩進めていくことが大切です。急ぐことはプログラマーの敵である。

文字列として読み込み、StringSubstrを確保し、文字列に変換する。 文字列として読み込み,StringSubstrを確保し,文字列に変換する。

STARIJ:内訳の説明、ありがとうございます

リワークした!今、なぜか数字が合わない!?

ファイル内の数字はこんな感じです。

2018.02.26 17:44    1.24938    1.22771

そして、同じアラートでは、こんなことも書かれています。

1.2以降のゼロはどこから持ってきたのだろう?ノーマライゼーションに挑戦してみました。いや!

1

コードはこのように書かれています。

void Read_File()
{
    int handle;
    string str;
    static double BlueL;
    static double RedL;
    string f_name = " (" + Symbol() + ")\\" + TimeToStr( LocalTime(),TIME_DATE ) + ".txt";
     
     if(BlueL!=BlueLine||RedL!=RedLine)
     {
      // Открытие или создание файла и перемещение указателя в конец
      handle= FileOpen(f_name,FILE_READ|FILE_TXT," ");
      if(handle == -1) {  Alert("Ошибка при открытии файла ",handle);  return; }
      
       while(!FileIsEnding(handle)) //Читаем последнюю строку
       str=FileReadString(handle,60);//Чтение строки из файла
       FileClose(handle);
       BlueL=StrToDouble(StringSubstr(str,16,7));
       RedL=StrToDouble(StringSubstr(str,23,7));
       Alert(DoubleToStr(BlueL,5), "   ", DoubleToStr(RedL,5));
       ObjectSet("BlueLine",OBJPROP_PRICE1,BlueL);
       ObjectSet("RedLine",OBJPROP_PRICE1,RedL);
      }
      return;
   }
 
Rewerpool:

STARIJ :内訳の説明、ありがとうございます
リワークした!今、なぜか数字が合わない!?

しかし、同じAlertで次のように表示されます。
1.2以降のゼロはどこから来たのでしょうか?ノーマライゼーションに挑戦してみました。いや!
こんな感じでコードを書きました。

私はStringSubstr(str,20,7) で、あなたは StringSubstr(str,16,7) と書きました。 1.24938 から下4桁を引くと 1.2 になります。 すべて順番にやれと言ったはずだ。私は、Alert(s); - 文字列を表示して正しいことを確認しながら、急いでObjectSet(.プログラミングは忍耐と小さな一歩が大切です。答えを待っている間に、どれだけ小さな自信の一歩を踏み出せるか!!!
 
Rewerpool:

STARIJ:内訳の説明、ありがとうございます

リワークした!今、なぜか数字が合わない!?

ファイル内の数字はこんな感じです。

そして、同じアラートでは、こんなことも書かれています。

1.2以降のゼロはどこから持ってきたのだろう?ノーマライゼーションに挑戦してみました。いや!

こんな感じでコードを書きました。

これを試してみてください。


void Read_File()
{
    int handle;
    string str;
    static double BlueL;
    static double RedL;
    string f_name = " (" + Symbol() + ")\\" + TimeToStr( LocalTime(),TIME_DATE ) + ".txt";
     
     if(BlueL!=BlueLine||RedL!=RedLine)
     {
      // Открытие или создание файла и перемещение указателя в конец
      handle= FileOpen(f_name,FILE_READ|FILE_TXT," ");
      if(handle == -1) {  Alert("Ошибка при открытии файла ",handle);  return; }
      
       while(!FileIsEnding(handle)) //Читаем последнюю строку
       str=FileReadString(handle,60);//Чтение строки из файла
       FileClose(handle);
       BlueL=StrToDouble(StringSubstr(str,20,7));   
       RedL=StrToDouble(StringSubstr(str,31,7));    
       Alert(DoubleToStr(BlueL,5), "   ", DoubleToStr(RedL,5));
       ObjectSet("BlueLine",OBJPROP_PRICE1,BlueL);
       ObjectSet("RedLine",OBJPROP_PRICE1,RedL);
      }
      return;
   }