Любые вопросы новичков по 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;
   }

  Вот так писал! ТХТ

Я прости не пойму как теперь вытащить именно B_level и R_level. Дата и время мне не нужно! Но записывать я их хочу)

 
Rewerpool:

  Вот так писал! ТХТ

Я прости не пойму как теперь вытащить именно 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: Спасибо за разбор!
   Переделал! Теперь почему то цифры не сходятся!
В файле цифры такие:
А тот же Алерт выдаёт такие:
Где он взял нули после 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;
   }
Причина обращения: