RichEdit1 solang Strings löschen, bis Schlüsselwort gefunden
-
Hallo Leute,
also ich habe ein Programm, was einen Datensatz bearbeitet, d.h ab Zeile 15 löscht er jede 2te Zeile, bis in irgendeiner Zeile mal "M113" steht!
Leider endet es in einer endlosschleife....
Fehler wird wohl sein, das ich nicht richtig suche , bzw was anderes beim suchen und dann schleifenabbruch
void __fastcall TForm1::Button1Click(TObject *Sender) { int StartPos=0; int EndPos=RichEdit1->Text.Length()-StartPos; FoundAt1 = RichEdit1->FindTextA("M113",StartPos,EndPos,TSearchTypes()<<stMatchCase); //erstmal prüfen, ob schlüssel überhaupt vorhanden if(FoundAt1 != -1) //wenn vorhanden, dann gehtz los mit löschen der zeilen ab zeile 16 { int i=16; while(RichEdit1->Lines->Count>0) { int StartPos=0; int EndPos=RichEdit1->Lines->Strings[i].Length()-StartPos; int FoundAt = RichEdit1->FindTextA("M113",StartPos,EndPos,TSearchTypes()<<stMatchCase); if(FoundAt == FoundAt1) //dachte mir, wenn er bei jeder zeile sucht, und dann findet, und position stimmt, hört er auf, position kann ja aber nicht stimmen, da zeilen gelöscht werden... break; RichEdit1->Lines->Delete(i); i++; } Button1->Enabled=false; enable=false; } else ShowMessage("Datentyp nicht passend, Schlüssel M113 nicht gefunden"); }wie könnte ich das am besten machen?
-
schon mal mit dem debugger schritt fuer schritt dein programm durchgegangen und die belegung der einzelnen variablen angeschaut, speziell wenn die abbruchbedingung greifen soll?
-
habs jetzt so geaändert, jetzt löscht er, und bricht auch ab, leider hört er kurz vor ende auf, noch zeilen zu löschen:
void __fastcall TForm1::Button1Click(TObject *Sender) { int StartPos=0; int EndPos=RichEdit1->Text.Length()-StartPos; FoundAt1 = RichEdit1->FindTextA("M113",StartPos,EndPos,TSearchTypes()<<stMatchCase); if(FoundAt1 != -1) { int i=16; int StartPos1=0; while(RichEdit1->Lines->Count>0) { i++; int EndPos=0; StartPos1=StartPos1+RichEdit1->Lines->Strings[i-1].Length()+1; EndPos=StartPos1+RichEdit1->Lines->Strings[i].Length(); int FoundAt = RichEdit1->FindTextA("M113",StartPos1,EndPos,TSearchTypes()<<stMatchCase); //ShowMessage(FoundAt); //debuggerzwecke if(FoundAt != -1) { //RichEdit1->Lines->Delete(i); //TIPP 1, erklärung, siehe ganz unten break; } RichEdit1->Lines->Delete(i); } Button1->Enabled=false; enable=false; } else MessageBoxA(0,"Dateityp kann nicht verwendet werden, Schlüssel M113 nicht gefunden","Inkompatibler Dateityp",MB_OK|MB_ICONWARNING); }ACHTUNG, so sieht rohdatei aus:
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 16 L X+240.000 Y+100.000 Z+0.000 F0 M03 17 L X+240.000 Y+100.000 Z+40.000 //weg 18 L X+254.000 Y+100.000 Z+0.000 19 L X+254.000 Y+100.000 Z+40.000 //weg etc... 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 L X+240.000 Y+100.000 Z+0.000 F0 M03 49 L X+240.000 Y+100.000 Z+40.000 50 L X+254.000 Y+100.000 Z+0.000 51 L X+254.000 Y+100.000 Z+40.000 52 L X+268.000 Y+100.000 Z+0.000 53 L X+268.000 Y+100.000 Z+40.000 54 L X+282.000 Y+100.000 Z+0.000 55 L X+282.000 Y+100.000 Z+40.000 56 L X+296.000 Y+100.000 Z+0.000 57 L X+296.000 Y+100.000 Z+40.000 58 L X+310.000 Y+100.000 Z+0.000 59 L X+310.000 Y+100.000 Z+40.000 60 L X+324.000 Y+100.000 Z+0.000 61 L X+324.000 Y+100.000 Z+40.000 //weg 62 L X+338.000 Y+100.000 Z+0.000 //die bleibt als letzt stehen 48 M113 //hier aufhören 49 M30 50 END PGM TEST MMleider sieht mein ergebniss so aus...
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 //wunderbar, ab hier fängt er an 16 L X+240.000 Y+100.000 Z+0.000 F0 M03 18 L X+254.000 Y+100.000 Z+0.000 //super 20 L X+268.000 Y+100.000 Z+0.000 22 L X+282.000 Y+100.000 Z+0.000 24 L X+296.000 Y+100.000 Z+0.000 26 L X+310.000 Y+100.000 Z+0.000 28 L X+324.000 Y+100.000 Z+0.000 30 L X+338.000 Y+100.000 Z+0.000 32 L X+352.000 Y+100.000 Z+0.000 34 L X+366.000 Y+100.000 Z+0.000 36 L X+380.000 Y+100.000 Z+0.000 38 L X+394.000 Y+100.000 Z+0.000 40 L X+408.000 Y+100.000 Z+0.000 42 L X+422.000 Y+100.000 Z+0.000 44 L X+436.000 Y+100.000 Z+0.000 46 L X+450.000 Y+100.000 Z+0.000 48 L X+240.000 Y+100.000 Z+0.000 F0 M03 50 L X+254.000 Y+100.000 Z+0.000 52 L X+268.000 Y+100.000 Z+0.000 54 L X+282.000 Y+100.000 Z+0.000 56 L X+296.000 Y+100.000 Z+0.000 57 L X+296.000 Y+100.000 Z+40.000 //bis hier her, denn die dürfte ni stehen 58 L X+310.000 Y+100.000 Z+0.000 59 L X+310.000 Y+100.000 Z+40.000 //die au ni 60 L X+324.000 Y+100.000 Z+0.000 61 L X+324.000 Y+100.000 Z+40.000 //die au ni 62 L X+338.000 Y+100.000 Z+0.000 48 M113 //abbrechen tut er wieder richtig 49 M30 50 END PGM TEST MMund zu dem Tipp 1 im Quellcode, wenn ich diese Zeile reinnehme dann nimmt er die 57 auch noch raus, logisch!
woran könnte das liegen??
arghl
-
hast du das gemacht, was ich geschrieben habe? ja? was ist dabei rausgekommen?
schon mal was von Pos() gehört?
-
naja, abbrechen tut er ja, aber mit dem Pos() hab ich noch nich gearbeitet!
Wie funktioniert das?
-
lol
if(RichEdit1->Lines->Strings[i].Pos("M113")>0) { break; } RichEdit1->Lines->Delete(i); }glaube so gehtz...