String als Rechenoperation
-
Hi
Kann mir bitte einer ein Quellcode geben/schreiben, mit dem ich Rechenoperationen aus einer Txt Datei (z.B. 1+1=2) nachrechnen lassen kann?
Sprich: Ich möchte die Textdatei mit list->LoadFromFile laden und dann halt die ganze list durcharbeiten.Mein KLEINER Anfang(falls richtig):
list->LoadFromFile("c:\\rechn.txt"); for(int x=0;list->Strings[x]!=NULL;x++) { }
-
Hallo
Soetwas hatten wir hier schon öfters. Such hier im Forum nach *Taschenrechner* und *parsen*.
bis bald
akari
-
Danke, nur habe ich beim Suchen nichts wirklich hilfreiches gefunden

Ich siche halt nen Quellcode oder nen Bsp oder sowas halt
-
-
Danke aber mein Problem ist die Zeile(den String,dynamisch lang) aufzuteilen.
Also aus 1+2=3 die 1, das + , die 2 usw herraus zu bekommen und die dann auch nachrechnen lassen soll.
Also ich möchte erreichen, dass ich z.B. die erste Zeile aus der Txt- Datei auslesen kann und dann halt, wenn in der Zeile 1+2=3 steht, 1+2 neurechnet und das Ergebis wieder zurück schreibt.
Sprich wenn in der Textdatei 1+2=4 steht soll zum Schluss 1+2=3 dort drin stehen.
-
Hallo
das Prinzip bleibt das gleiche. Du must es natürlich noch auf deine Zwecke anpassen.
Du must ja als erstes pro Zeile nur das Gleichheitszeichen suchen und abschneiten.
Dann fühst du die Rechnung aus, und fügst die Originalrechnung mit dem Neuen Wert nach einen Gleichheitszeichen hintendran. Alle neuen Zeilen sammelst du in einem neuen TStringList, und zum Schluiß speicherst du die neue TStringList mit dem altem Dateinamen.bis bald
akari
-
Ich weiß auch nicht, entweder ist heute einfach nicht mein Tag oder ich bin einfach nur dumm

Kannst du mir bitte auffe Sprünge helfen, bzw mir vielleicht nen Code schreiben??
-
So grob ohne Fehlerabfrage und nur für einfache Aufgaben wie in deinem Beispiel geeignet.
void __fastcall TForm1::Button1Click(TObject *Sender) { TStringList *list=new TStringList(); list->LoadFromFile("aufgaben.txt"); Memo1->Lines = list; int j,gl,posop; String aufgabe,op="+-*/"; double zahl1,zahl2,ergebnisneu,ergebnisalt; for(int i=0;i<list->Count;i++) { gl=list->Strings[i].Pos("="); aufgabe=list->Strings[i].SubString(1,gl-1); ergebnisalt=StrToFloat(list->Strings[i].SubString(gl+1,list->Strings[i].Length()-1)); for(j=1;j<5&&aufgabe.Pos(op.SubString(j,1))==0;j++); posop=aufgabe.Pos(op.SubString(j,1)); zahl1=StrToFloat(aufgabe.SubString(1,posop-1)); zahl2=StrToFloat(aufgabe.SubString(posop+1,aufgabe.Length()-posop)); switch(aufgabe[posop]) { case '+':ergebnisneu=zahl1+zahl2;break; case '-':ergebnisneu=zahl1-zahl2;break; case '*':ergebnisneu=zahl1*zahl2;break; case '/':ergebnisneu=zahl1/zahl2;break; default:ergebnisneu=0;break; }; list->Strings[i]=aufgabe+"="+FloatToStr(ergebnisneu); } Memo2->Lines = list; list->SaveToFile("aufgaben.txt"); delete list; }
-
Danke, es klappt
