Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 10.03.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard Config Zeilen als Befehle ausführen

Ich versuche Einstellungen über eine Textdatei zu speichern und anzuwenden, aber irgendwo ist noch ein Fehler. (Anmerkung: ne Textdatei deshalb, weil es einfach zu viele sind, sonst würde ich über GlobalVariables gehen.)

Ausgangslage: Benutzereingaben vom Typ bool, integer und string
Code:
extern bool   ShowHistory = false;   // old, historic lines (false)
extern int    StartDay    = 1;       // start day (1=Monday)
extern string EarliestTim = "07:00"; // begin trading day (DElocal 08:00)
Einstellungssicherung:
Code:
 
string ConfigFile=_Symbol+indName+".cfg";
void WriteConfigFile()
{
   int handle;   
   handle = FileOpen(ConfigFile,FILE_READ|FILE_WRITE|FILE_TXT,0);   //FileName,r|w|format,NoDelimiter
   FileWrite(handle,"ShowHistory="+IntegerToString(ShowHistory)+";\n", //bools
                    "StartDay="+IntegerToString(StartDay)+";\n",       //integers
                    "EarliestTim= \""+EarliestTim +"\" ;\n",           //strings
            );
   FileClose(handle);                                               //CloseTheFile
   if(handle<1) 
      { Print(ConfigFile," not found, error code=", GetLastError());  }
}
Das Auslesen der Datei geschieht in OnInit:
Code:
if( FileIsExist(ConfigFile,0) )  ReadConfigFile();
Code:
bool ReadConfigFile()
{
   int handle;
   handle = FileOpen(ConfigFile,FILE_READ|FILE_TXT|FILE_ANSI); //ReadTextAnsi
   if(handle!=INVALID_HANDLE)                                  //ValidOpenedFile
   {
      string FoundLine;                                        //KeepingTheLine
      while(!FileIsEnding(handle))                             //AsLongAsWeHaveAnotherLine
      {
         FoundLine=FileReadString(handle);                     //ReadUntil"\r\n"
         Print(FoundLine);                                     //PrintWhatWeRead
      }
      FileClose(handle);                                       //FinallyCloseFile
   }
   else 
      { Print(ConfigFile," open error, code=", GetLastError()); return(false); }
   return(true);
}
Die Ergebnisdatei sieht so aus:
Code:
ShowHistory=0;
StartDay=1;
EarliestTim= "07:00" ;
Da der Typ bereits in extern angegeben ist, sind die Zeilen gültige Befehle, das heißt ständen sie so in OnInit, würden sie ausgeführt.
Das aber werden sie nicht - ich habe immer noch die Benutzereinstellungen.
Die "FoundLine=FileReadString(handle);" scheint mir der Knackpunkt zu sein, aber auch wenn ich nur "FileReadString(handle);" benutze, komme ich nicht zum Ziel.
Wie kann ich den MT dazu zwingen, die Zeilen als Befehle auszuführen (so was wie 'exec Line')?
Danke. AVT