Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 481

 
STARIJ:

Lors de l'ouverture du fichier pour l'écriture, vous avez spécifié TXT ou CSV. Il s'agit d'un fichier texte. Lisez-le comme une chaîne, sélectionnez StringSubstr et convertissez-le en ce que vous voulez.

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

C'est comme ça qu'il faut écrire ! TCT

Je suis désolé, je ne comprends pas comment obtenir exactement leniveau B_level etR_level maintenant.Je n'ai pas besoin de la date et de l'heure ! Mais j'ai envie de les écrire)

 
Rewerpool:

C'est comme ça qu'il faut écrire ! TCT

Je suis désolé, je ne comprends pas comment obtenir exactement leniveau B_level etR_level maintenant.Je n'ai pas besoin de la date et de l'heure ! Mais je veux l'écrire)

Lire en tant que chaîne, mettre en évidence StringSubstr et convertir en ce dont vous avez besoin. Lire en tant que chaîne, allouer StringSubstr et convertir en ce dont vous avez besoin.

 
STARIJ:

Lisez comme une chaîne de caractères, allouez un StringSubstr et convertissez en ce dont vous avez besoin. Lire en tant que chaîne de caractères, sélectionner StringSubstr et convertir en n'importe quel format.

Ah ah ah ah ah ah, ça y est ! !! C'est ça ! !! Merci@STARIJ! Je vais faire un essai)

 

@STARIJ ne fonctionne pas, je n'arrive pas encore à trouver où je me trompe ! Au secours !

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 Erreur ici, mais qu'est-ce que j'ai fait de mal ?
 

Pourquoi n'aime-t-il pas ça ?

2

 
Rewerpool:

Pourquoi ça n'est pas comme ça ?


Regardez les paramètres que vous passez à la fonction, leur nombre, et ce qu'elle renvoie.

cliquez sur f1, mettez votre curseur sur cette fonction au préalable

 
Rewerpool:

@STARIJ ne fonctionne pas, je n'arrive pas encore à trouver où je me trompe ! Au secours !

Erreur ici, mais qu'est-ce que j'ai fait de mal ?
Lisons d'abord la dernière chaîne
   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 Maintenant ... Mettez en évidence StringSubstr et convertissez-le en ce dont vous avez besoin. Tout doit être fait étape par étape. La hâte est l'ennemi du programmeur.

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

Lire en tant que chaîne, allouer StringSubstr et convertir en chaîne. Lire en tant que chaîne, allouer StringSubstr et convertir en ce dont vous avez besoin.

 
STARIJ:
Lisons d'abord la dernière chaîne

2018.02.26 12:49 1.24368 1.22581 Maintenant ... allouer StringSubstr et le convertir en ce dont vous avez besoin. Vous devez tout faire étape par étape. La hâte est l'ennemi du programmeur.

Lire en tant que chaîne, allouer StringSubstr et convertir en chaîne. Lire en tant que chaîne de caractères, allouer StringSubstr et convertir en chaîne de caractères.

STARIJ: Merci pour le détail !

Je l'ai retravaillé ! Maintenant, les chiffres ne s'additionnent pas pour une raison quelconque !

Les chiffres du fichier sont les suivants :

2018.02.26 17:44    1.24938    1.22771

Et la même Alerte donne ceux-ci :

Où a-t-il trouvé les zéros après 1,2 ? J'ai essayé de normaliser. Non !

1

Le code est écrit comme ceci :

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 : Merci pour le détail !
Je l'ai retravaillé ! Maintenant, les chiffres ne s'additionnent pas pour une raison quelconque !
Les chiffres dans le fichier sont :
Mais le même Alert donne ceux-ci :
Où a-t-il trouvé les zéros après 1.2 ? J'ai essayé de normaliser. Non !
J'ai écrit le code comme ceci :

J'avais StringSubstr(str,20,7) et vous écrivez StringSubstr(str,16,7). Soustrayez les 4 derniers chiffres de 1.24938 et obtenez 1.2. Je vous l'ai dit - faites tout séquentiellement. J'avais Alert(s) ; - imprimer la chaîne de caractères que vous avez lue pour vous assurer qu'elle est correcte, alors que vous êtes pressé d'écrire ObjectSet(. La programmation est une question de patience, de petits pas en avant - tant que vous avez des cris sur le forum. Pendant que vous attendez une réponse - combien de petits pas confiants vous pouvez faire !!!
 
Rewerpool:

STARIJ: Merci pour le détail !

Je l'ai retravaillé ! Maintenant, les chiffres ne s'additionnent pas pour une raison quelconque !

Les chiffres du fichier sont les suivants :

Et la même Alerte donne ceux-ci :

Où a-t-il trouvé les zéros après 1,2 ? J'ai essayé de normaliser. Non !

J'ai écrit le code comme ceci :

Essayez ça.


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