Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 481

 
STARIJ:

Quando si apre il file per la scrittura si specifica TXT o CSV. Questo è un file di testo. Leggilo come una stringa, seleziona StringSubstr e convertilo in ciò che vuoi

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

Questo è il modo di scrivere! TCT

Mi dispiace di non capire come ottenere esattamenteB_level eR_level ora.Non ho bisogno di data e ora! Però voglio scriverli)

 
Rewerpool:

Questo è il modo di scrivere! TCT

Mi dispiace di non capire come ottenere esattamenteB_level eR_level ora.Non ho bisogno di data e ora! Ma voglio scriverlo)

Leggere come stringa, evidenziare StringSubstr e convertire in ciò che serve. Leggere come stringa, allocare StringSubstr e convertire in qualsiasi cosa sia necessario

 
STARIJ:

Leggi come una stringa, alloca una StringSubstr e la converte in quello che ti serve. Leggere come una stringa, selezionare StringSubstr e convertire in qualsiasi

Ah ah ah ah ah ah, capito !!! Questo è tutto!!! Grazie@STARIJ! Farò un tentativo)

 

@STARIJ non funziona, non riesco ancora a capire dove sbaglio! Aiuto!

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 Errore qui, ma cosa ho fatto di male?
 

Perché non gli piace?

2

 
Rewerpool:

Perché non è così?


Guardate quali parametri passate alla funzione, e quanti, e cosa restituisce.

cliccare su f1, mettere prima il cursore su questa funzione

 
Rewerpool:

@STARIJ non funziona, non riesco ancora a capire dove sbaglio! Aiuto!

Errore qui, ma cosa ho fatto di male?
Prima leggiamo l'ultima stringa
   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 Ora ... Evidenziate StringSubstr e convertite in ciò che vi serve. Tutto deve essere fatto passo dopo passo. La fretta è un nemico del programmatore.

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

Leggere come stringa, allocare StringSubstr e convertire in stringa. Leggere come stringa, allocare StringSubstr e convertire in ciò che serve.

 
STARIJ:
Prima leggiamo l'ultima stringa

2018.02.26 12:49 1.24368 1.22581 Ora ... allocare StringSubstr e convertire in quello che vi serve. Bisogna fare tutto passo dopo passo. La fretta è un nemico del programmatore.

Leggere come stringa, allocare StringSubstr e convertire in stringa. Leggere come stringa, allocare StringSubstr e convertire in una stringa

STARIJ: Grazie per la ripartizione!

Rielaborato! Ora i conti non tornano per qualche motivo!

I numeri nel file sono così:

2018.02.26 17:44    1.24938    1.22771

E lo stesso Alert dà questi:

Dove ha preso gli zeri dopo 1,2? Ho provato a normalizzare. No!

1

Il codice è scritto così:

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 : Grazie per la ripartizione!
Rielaborato! Ora i conti non tornano per qualche motivo!
I numeri nel file sono:
Ma lo stesso Alert dà questi:
Dove ha preso gli zeri dopo 1.2? Ho provato a normalizzare. No!
Ho scritto il codice in questo modo:

Io avevo StringSubstr(str,20,7) e tu scrivi StringSubstr(str,16,7). Sottrai le ultime 4 cifre da 1,24938 e ottieni 1,2. Ti ho detto - fai tutto in sequenza. Avevo Alert(s); - stampare la stringa che avete letto per assicurarvi che sia corretta, mentre avete fretta di scrivere ObjectSet(. La programmazione è tutta una questione di pazienza, di piccoli passi in avanti - mentre si grida sul forum. Mentre aspettate una risposta - quanti piccoli passi fiduciosi potete fare!!!
 
Rewerpool:

STARIJ: Grazie per la ripartizione!

Rielaborato! Ora i conti non tornano per qualche motivo!

I numeri nel file sono così:

E lo stesso Alert dà questi:

Dove ha preso gli zeri dopo 1,2? Ho provato a normalizzare. No!

Ho scritto il codice in questo modo:

Prova questo.


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