Abbruchbedingung....was ist hier wieder aflsch?
-
Hallo,
meine letzten fragen hatten sich ja geklärt, nun habe ich aber noch eine!
Sachverhalt:Eine Datei soll solang bearbeitet werdem bis "M113" gefunden wird, dann soll abgebrochen werden!
Sollte allerdings nach dem "M113" in der nächsten Zeile ein "M112" stehen, soll er nach dem "M112" bis zum nächsten "M113" weitermachen...int j=16; while((RichEdit1->Lines->Strings[j].Pos("M113")==0)&&(RichEdit1->Lines->Strings[j+1].Pos("M112")==0)) { int StartPosi=RichEdit1->Lines->Strings[j].Pos("Z"); ShowMessage(StartPosi); int laenge = RichEdit1->Lines->Strings[j].Length(); //ShowMessage(laenge); int rest = laenge-StartPosi; //ShowMessage(rest); String Text2 = "FMAX M99"; String Text = RichEdit1->Lines->Strings[j]; String Text_Old = RichEdit1->Lines->Strings[j].SubString(0,StartPosi-1); //ShowMessage(Text_Old); Text2 = Text_Old+Text2; Text.Delete(StartPosi,rest); Text.Insert(Text2,StartPosi); RichEdit1->Lines->Strings[j] = Text2; j++; }das ist der code, und hier ein beispiel text...
Ursprungsdatei:
0 BEGIN PGM TEST MM 1 ; DATEI : TEST.h 2 ; UNDEFINIERT D=0.00 3 ; WANDSTAERKE=0.00 AUFMASS=0.00 ZUSTELLUNG=0.00 PENDELN SPITZE 4 TOOL CALL 0 Z S0 5 CYCL DEF 7.0 NULLPUNKT 6 CYCL DEF 7.1 X+0,000 7 CYCL DEF 7.2 Y+0,000 8 CYCL DEF 7.3 Z+0,000 9 CYCL DEF 8.0 SPIEGELN 10 CYCL DEF 8.1 11 CYCL DEF 10.0 DREHUNG 12 CYCL DEF 10.1 ROT +0,000 13 CYCL DEF 11.0 MASSFAKTOR 14 CYCL DEF 11.1 SCL 1,000 15 M112 T0.05 A15 <---------ab hier jede 2te zeile löschen (das klappt alles) 16 L X+240.000 Y+100.000 Z+0.000 F0 M03 17 L X+240.000 Y+100.000 Z+40.000 <-----und bei den verbleibenden zeilen nach dem Z alles ersetzen 18 L X+254.000 Y+100.000 Z+0.000 19 L X+254.000 Y+100.000 Z+40.000 20 L X+268.000 Y+100.000 Z+0.000 21 L X+268.000 Y+100.000 Z+40.000 22 L X+282.000 Y+100.000 Z+0.000 23 L X+282.000 Y+100.000 Z+40.000 24 L X+296.000 Y+100.000 Z+0.000 25 L X+296.000 Y+100.000 Z+40.000 26 L X+310.000 Y+100.000 Z+0.000 27 L X+310.000 Y+100.000 Z+40.000 28 L X+324.000 Y+100.000 Z+0.000 29 L X+324.000 Y+100.000 Z+40.000 30 L X+338.000 Y+100.000 Z+0.000 31 L X+338.000 Y+100.000 Z+40.000 32 L X+352.000 Y+100.000 Z+0.000 33 L X+352.000 Y+100.000 Z+40.000 34 L X+366.000 Y+100.000 Z+0.000 35 L X+366.000 Y+100.000 Z+40.000 36 L X+380.000 Y+100.000 Z+0.000 37 L X+380.000 Y+100.000 Z+40.000 38 L X+394.000 Y+100.000 Z+0.000 39 L X+394.000 Y+100.000 Z+40.000 40 L X+408.000 Y+100.000 Z+0.000 41 L X+408.000 Y+100.000 Z+40.000 42 L X+422.000 Y+100.000 Z+0.000 43 L X+422.000 Y+100.000 Z+40.000 44 L X+436.000 Y+100.000 Z+0.000 45 L X+436.000 Y+100.000 Z+40.000 46 L X+450.000 Y+100.000 Z+0.000 47 L X+450.000 Y+100.000 Z+40.000 48 M113 <----------hier soll er aufhören mit text zu ersetzen 15 M112 T0.05 A15 <---------aber hier danach wieder anfangen 16 L X+240.000 Y+100.000 Z+0.000 F0 M03 17 L X+240.000 Y+100.000 Z+40.000 18 L X+254.000 Y+100.000 Z+0.000 19 L X+254.000 Y+100.000 Z+40.000 20 L X+268.000 Y+100.000 Z+0.000 21 L X+268.000 Y+100.000 Z+40.000 22 L X+282.000 Y+100.000 Z+0.000 23 L X+282.000 Y+100.000 Z+40.000 24 L X+296.000 Y+100.000 Z+0.000 25 L X+296.000 Y+100.000 Z+40.000 26 L X+310.000 Y+100.000 Z+0.000 27 L X+310.000 Y+100.000 Z+40.000 28 L X+324.000 Y+100.000 Z+0.000 29 L X+324.000 Y+100.000 Z+40.000 30 L X+338.000 Y+100.000 Z+0.000 31 L X+338.000 Y+100.000 Z+40.000 32 L X+352.000 Y+100.000 Z+0.000 33 L X+352.000 Y+100.000 Z+40.000 34 L X+366.000 Y+100.000 Z+0.000 35 L X+366.000 Y+100.000 Z+40.000 36 L X+380.000 Y+100.000 Z+0.000 37 L X+380.000 Y+100.000 Z+40.000 38 L X+394.000 Y+100.000 Z+0.000 39 L X+394.000 Y+100.000 Z+40.000 40 L X+408.000 Y+100.000 Z+0.000 41 L X+408.000 Y+100.000 Z+40.000 42 L X+422.000 Y+100.000 Z+0.000 43 L X+422.000 Y+100.000 Z+40.000 44 L X+436.000 Y+100.000 Z+0.000 45 L X+436.000 Y+100.000 Z+40.000 46 L X+450.000 Y+100.000 Z+0.000 47 L X+450.000 Y+100.000 Z+40.000 48 M113 <----------------hier aufhören 49 M30 50 END PGM TEST MMund das ist das ergebnis:
0 BEGIN PGM TEST MM 1 ; DATEI : TEST.h 2 ; UNDEFINIERT D=0.00 3 ; WANDSTAERKE=0.00 AUFMASS=0.00 ZUSTELLUNG=0.00 PENDELN SPITZE 4 TOOL CALL 0 Z S0 5 CYCL DEF 7.0 NULLPUNKT 6 CYCL DEF 7.1 X+0,000 7 CYCL DEF 7.2 Y+0,000 8 CYCL DEF 7.3 Z+0,000 9 CYCL DEF 8.0 SPIEGELN 10 CYCL DEF 8.1 11 CYCL DEF 10.0 DREHUNG 12 CYCL DEF 10.1 ROT +0,000 13 CYCL DEF 11.0 MASSFAKTOR 14 CYCL DEF 11.1 SCL 1,000 15 M112 T0.05 A15 17 L X+240.000 Y+100.000 FMAX M99 19 L X+254.000 Y+100.000 FMAX M99 21 L X+268.000 Y+100.000 FMAX M99 23 L X+282.000 Y+100.000 FMAX M99 25 L X+296.000 Y+100.000 FMAX M99 27 L X+310.000 Y+100.000 FMAX M99 29 L X+324.000 Y+100.000 FMAX M99 31 L X+338.000 Y+100.000 FMAX M99 33 L X+352.000 Y+100.000 FMAX M99 35 L X+366.000 Y+100.000 FMAX M99 37 L X+380.000 Y+100.000 FMAX M99 39 L X+394.000 Y+100.000 FMAX M99 41 L X+408.000 Y+100.000 FMAX M99 43 L X+422.000 Y+100.000 FMAX M99 45 L X+436.000 Y+100.000 FMAX M99 47 L X+450.000 Y+100.000 FMAX M99 48 M113 15 M112 T0.05 A15 17 L X+240.000 Y+100.000 Z+40.000 19 L X+254.000 Y+100.000 Z+40.000 21 L X+268.000 Y+100.000 Z+40.000 23 L X+282.000 Y+100.000 Z+40.000 25 L X+296.000 Y+100.000 Z+40.000 27 L X+310.000 Y+100.000 Z+40.000 29 L X+324.000 Y+100.000 Z+40.000 31 L X+338.000 Y+100.000 Z+40.000 33 L X+352.000 Y+100.000 Z+40.000 35 L X+366.000 Y+100.000 Z+40.000 37 L X+380.000 Y+100.000 Z+40.000 39 L X+394.000 Y+100.000 Z+40.000 41 L X+408.000 Y+100.000 Z+40.000 43 L X+422.000 Y+100.000 Z+40.000 45 L X+436.000 Y+100.000 Z+40.000 47 L X+450.000 Y+100.000 Z+40.000 48 M113 49 M30 50 END PGM TEST MMalso mit dem löschen das funktioniert, nur leider ersetzt er den text nach dem ersten "M113" nicht, wieso?
ist an der while schleife was falsch??
-
hi,
du hast deine Abbruchbedingung falsch formuliert:
RichEdit1->Lines->Strings[j].Pos("M113") == 0
RichEdit1->Lines->Strings[j+1].Pos("M112") == 0Methode Pos gibt NULL zurück wenn Zeichenkette könnte NICHT gefunden werden.
Wäre vieleicht so richtig?
RichEdit1->Lines->Strings[j].Pos("M113") != 0
RichEdit1->Lines->Strings[j+1].Pos("M112") != 0
-
nee, wenn ich das so mache, dann ersetzt er gar keinen text!°..
hm....was könnte noch sein?
-
hm...würde mich echt über hilfe freuen, weis echt nimemr worans liegt!
-
schau dir mal genau deine abbruchbedingung an, er geht die schleife solang durch, bis er M113 und M112 gefunden hat, danach macht er nix mehr....!!!
-
Deine Abbruchbedingung ist falsch. Deine Schleife läuft, solange die Zeile j M113 nicht enthält und Zeile j+1 M112 nicht enthält.
Das heißt, sie bricht ab, wenn Zeile j M113 enthält oder Zeile j+1 M112 enthält.
Das ist doch nicht das, was du willst, oder?