Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 481

 
STARIJ:

Al abrir el archivo para la escritura se especificó TXT o CSV. Se trata de un archivo de texto. Léalo como una cadena, seleccione StringSubstr y conviértalo en lo que desee

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;
   }

¡Así se escribe! TCT

Lo siento, no entiendo cómo sacar exactamente elnivel B y elnivel R ahora.¡No necesito la fecha y la hora! Sin embargo, quiero escribirlos)

 
Rewerpool:

¡Así se escribe! TCT

Lo siento, no entiendo cómo sacar exactamente elnivel B y elnivel R ahora.¡No necesito la fecha y la hora! Pero quiero escribirlo)

Leer como cadena, resaltar StringSubstr y convertir a lo que necesitas. Leer como cadena, asignar StringSubstr y convertir a lo que necesites

 
STARIJ:

Leer como una cadena, asignar un StringSubstr y convertir a lo que necesites. Leer como una cadena, seleccionar StringSubstr y convertir a lo que sea

Ah ah ah ah ah, ¡¡¡lo tengo!!! ¡¡¡Eso es!!! ¡Gracias@STARIJ! Lo intentaré)

 

@STARIJ no funciona, ¡todavía no puedo averiguar dónde me equivoco! ¡Ayuda!

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 Error aquí, pero ¿qué he hecho mal?
 

¿Por qué no le gusta eso?

2

 
Rewerpool:

¿Por qué no es así?


Mira qué parámetros le pasas a la función, y cuántos, y qué devuelve.

haga clic en f1, ponga el cursor en esta función de antemano

 
Rewerpool:

@STARIJ no funciona, ¡todavía no puedo averiguar dónde me equivoco! ¡Ayuda!

Error aquí, pero ¿qué he hecho mal?
Primero leamos la última cadena
   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 Ahora ... Resalte StringSubstr y conviértalo en lo que necesite. Todo tiene que hacerse paso a paso. La prisa es un enemigo del programador.

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

Leer como cadena, asignar StringSubstr y convertir a cadena. Leer como cadena, asignar StringSubstr y convertir a cadena

 
STARIJ:
Primero leamos la última cadena

2018.02.26 12:49 1.24368 1.22581 Ahora ... asignar StringSubstr y convertirlo en lo que necesites. Hay que hacer todo paso a paso. La prisa es un enemigo del programador.

Leer como cadena, asignar StringSubstr y convertir a cadena. Leer como cadena, asignar StringSubstr y convertir a cadena

STARIJ: ¡Gracias por el desglose!

¡Redactado! Ahora los números no cuadran por alguna razón.

Los números en el archivo son así:

2018.02.26 17:44    1.24938    1.22771

Y la misma Alerta da esto:

¿De dónde sacó los ceros después de 1,2? He intentado normalizar. ¡No!

1

El código está escrito así:

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 : ¡Gracias por el desglose!
¡Redactado! Ahora los números no cuadran por alguna razón.
Los números en el archivo son:
Pero la misma Alerta da estos:
¿De dónde sacó los ceros después de 1.2? He intentado normalizar. ¡No!
Escribí el código así:

Yo tenía StringSubstr(str,20,7) y tú escribes StringSubstr(str,16,7). Resta los últimos 4 dígitos a 1,24938 y obtienes 1,2. Te lo dije: hazlo todo secuencialmente. Tenía Alert(s); - imprimir la cadena para asegurarse de que es correcta, mientras se tiene prisa por escribir ObjectSet(. La programación se basa en la paciencia, en los pequeños pasos hacia adelante, mientras se grita en el foro. Mientras esperas una respuesta, ¡¡¡cuántos pequeños pasos de confianza puedes dar!!!
 
Rewerpool:

STARIJ: ¡Gracias por el desglose!

¡Redactado! Ahora los números no cuadran por alguna razón.

Los números en el archivo son así:

Y la misma Alerta da esto:

¿De dónde sacó los ceros después de 1,2? He intentado normalizar. ¡No!

Escribí el código así:

Prueba esto.


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;
   }
Razón de la queja: