Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 481

 
STARIJ:

Beim Öffnen der Datei zum Schreiben haben Sie TXT oder CSV angegeben. Dies ist eine Textdatei. Lesen Sie es als String, wählen Sie StringSubstr und konvertieren Sie es in das gewünschte Format

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

Das ist die richtige Art zu schreiben! TCT

Es tut mir leid, aber ich verstehe nicht, wie man jetzt genauB_level undR_level herausbekommt.Ich brauche kein Datum und keine Uhrzeit! Ich möchte sie aber aufschreiben)

 
Rewerpool:

Das ist die richtige Art zu schreiben! TCT

Es tut mir leid, aber ich verstehe nicht, wie man jetzt genauB_level undR_level herausbekommt.Ich brauche kein Datum und keine Uhrzeit! Aber ich will es aufschreiben)

Als String lesen, StringSubstr markieren und in das gewünschte Format konvertieren. Einlesen als String, Zuweisung von StringSubstr und Konvertierung in das gewünschte Format

 
STARIJ:

Einlesen als String, Zuweisen eines StringSubstr und Konvertieren in das gewünschte Format. Als String einlesen, StringSubstr auswählen und in einen beliebigen Wert konvertieren

Ah ah ah ah ah ah, ich hab's!!! Das war's!!! Danke@STARIJ! Ich werde es ausprobieren)

 

@STARIJ funktioniert nicht, ich kann noch nicht herausfinden, wo ich falsch liege! Hilfe!

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 Ich habe einen Fehler gemacht, aber was habe ich falsch gemacht?
 

Warum mag er das nicht?

2

 
Rewerpool:

Warum ist es nicht so?


Achten Sie darauf, welche und wie viele Parameter Sie an die Funktion übergeben und was sie zurückgibt.

Klicken Sie auf f1, setzen Sie den Cursor vorher auf diese Funktion

 
Rewerpool:

@STARIJ funktioniert nicht, ich kann noch nicht herausfinden, wo ich falsch liege! Hilfe!

Ich habe einen Fehler gemacht, aber was habe ich falsch gemacht?
Lesen wir zunächst die letzte Zeichenkette
   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 Jetzt ... Markieren Sie StringSubstr und konvertieren Sie es in das, was Sie brauchen. Alles muss Schritt für Schritt gemacht werden. Eile ist der Feind des Programmierers.

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

Lesen als String, Zuweisung von StringSubstr und Konvertierung in String. Als String einlesen, StringSubstr zuweisen und in das gewünschte Format konvertieren.

 
STARIJ:
Lesen wir zunächst die letzte Zeichenkette

2018.02.26 12:49 1.24368 1.22581 Jetzt ... allokieren Sie StringSubstr und konvertieren Sie in das, was Sie brauchen. Man muss alles Schritt für Schritt machen. Eile ist der Feind des Programmierers.

Lesen als String, Zuweisung von StringSubstr und Konvertierung in String. Als String einlesen, StringSubstr zuweisen und in einen String umwandeln

STARIJ: Danke für die Aufschlüsselung!

Überarbeitet! Jetzt gehen die Zahlen aus irgendeinem Grund nicht mehr auf!

Die Zahlen in der Datei sehen folgendermaßen aus:

2018.02.26 17:44    1.24938    1.22771

Und derselbe Alert gibt diese:

Woher hat er die Nullen nach 1,2? Ich habe versucht zu normalisieren. Nein!

1

Der Code ist wie folgt geschrieben:

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 : Danke für die Aufschlüsselung!
Überarbeitet! Jetzt gehen die Zahlen aus irgendeinem Grund nicht mehr auf!
Die Zahlen in der Datei lauten:
Aber derselbe Alert gibt folgende Zahlen aus:
Woher kommen die Nullen nach 1,2? Ich habe versucht zu normalisieren. Nein!
Ich habe den Code wie folgt geschrieben:

Ich hatte StringSubstr(str,20,7) und du schreibst StringSubstr(str,16,7). Subtrahiere die letzten 4 Ziffern von 1,24938 und erhalte 1,2. Ich habe dir gesagt, du sollst alles der Reihe nach machen. I had Alert(s); - die gelesene Zeichenkette ausdrucken, um sich zu vergewissern, dass sie korrekt ist, während man in Eile ist, ObjectSet(. Beim Programmieren geht es um Geduld, um kleine Schritte nach vorn - solange man im Forum schreit. Während Sie auf eine Antwort warten - wie viele kleine, zuversichtliche Schritte können Sie machen!!!
 
Rewerpool:

STARIJ: Danke für die Aufschlüsselung!

Überarbeitet! Jetzt gehen die Zahlen aus irgendeinem Grund nicht mehr auf!

Die Zahlen in der Datei sehen folgendermaßen aus:

Und derselbe Alert gibt diese:

Woher hat er die Nullen nach 1,2? Ich habe versucht zu normalisieren. Nein!

Ich habe den Code wie folgt geschrieben:

Versuchen Sie dies.


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;
   }
Grund der Beschwerde: