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