Programm als *txt-File einlesen
-
Noch ein Problem...
Ich habe eine Software geschrieben mit der ich eine Relaiskarte ansteuern kann. Funktioniert prima.
Jetzt möchte ich aber aus dieser Software ein txt-file aufrufen können in der die Ablaufsteuerung der Relais steht.
Das Textfile sollte z.B. so aussehen:
CloseRelay(1,3) //Relais 1+3 schliessen
Delay(2) //Verzögerung 2s
OpenRelay(3) //Relais 3 öffnen
...Der Hintergrund ist das eine Person ohne Programmierkenntnisse ein Textfile schreiben kann um eine einfache Steuerung zu realisieren.
-
wo ist jetzt dein problem?
-
Momentan schreibe ich diese Befehle ja in den Quellcode rein und compiliere das ganze zur *.exe. Dazu brauche ich immer den C++ Builder.
Wenn jetzt eine unerfahrene Person ein solches Textfile schreibt, muß ich es ja irgendwie einlesen können?!
Sonst müsste ich es ja wieder in den Quellcode reinschreiben und neu compilieren, oder?
Sehe ich da was falsch? Bin ein unerfahrener "Hobbyprogrammierer"
-
Hallo,
na - das einfachste ist, Du öffnest die Textdatei mit fopen(char * filename), und ließt deine Werte dann irgendwie aus - z.b. könntest du zeilenweise prüfen, ob da OpenRelay oder CloseRelay (strcmp) steht und welche Zahlen übergeben werden.
Wenn du keine Ahnung von fopen und string-Funktionen hast, dann poste es, dann schreib ich dir einen kleinen Beispielcode...
-
Ich suche die einfachste und unkomlizierteste Lösung. Wenn du der Meinung bist das man es auf diese Art lösen sollte, werde ich es mal versuchen.
Wenn jemand noch andere Vorschläge hat...
her damit...
-
Zum reinen einlesen des Textes solltest Du mal einen Blick auf TStringList werfen. Eignet sich auch hervorragende zum zeilenweisen auswerten eines eingelesenen Textfiles.
-
jo, das ist die andere Frage...
ich glaube man kann dazu die fgets ganz gut nutzen:
char *temp, chPruef; // ich glaub der c++-builder kann das direkt so // sauberer wäre: // temp = malloc(100); // 50 Zeichen // ich bitte hier um korrektur/hinweise von anderen nutzern! FILE *fTxt; int i[4], iCnt, pos, j; bool bTest; fTxt = fopen("aktionen.txt"); while(fgets(temp, 50, fTxt) != NULL) // solange Zeilen der Datei einlesen, bis das Ende erreicht wurde; s. Hilfe "fgets" { if(strstr(temp, "OpenRelais") != NULL) { // wenn OpenRelais vorkommt, gehen wir an Position 11: temp += 11; iCnt = 1; i[0] = (int) temp; // ich bin mir nicht sicher, ob der das macht i[1] = i[2] = i[3] = 0; // im Zweifelsfall vielleicht chPruef = temp; i[0] = int (chPruef); // so...wenn du jetzt nicht vorschreibst, wieviel variablen übergeben werden dürfen, müssen wir die einzelen prüfen while(1) { if(++temp == ')') break; i[iCnt] = (int) ++temp; temp++; } OpenRelais(i[0], i[1], i[2], i[3]); // und jetzt noch die anderen:) } }bitte auf Fehler aufmerksam machen - nobody's perfect