Schleife aus einer Schleife.
-
Abend,
habe eine Frage bezüglich dem starten übergeordneten Schleife aus einer Schleife.
Habe einen code geschrieben ( mehr c als c++ und die meisten würden es noch nicht mal als code beschreiben ) aber er läuft, macht genau was ich will.
Ich poste ihn nicht unter andere GUI , QT… weil meine Frage sich auf die QT Elemente abzieht sondern auf das zusammen fassen.
Im Grunde funktioniert das so.
Hauptordner wird erstellt
( suche nach unterordnern )
Wenn gefunden
Erstelle unterordner
(suche nach unterordnern )
Wenn gefunden
Erstelle Unterordner
…
Würde das gerne in eine schleife packen , habe es sogar schon mit goto versucht aber ohne Erfolg
Hauptordner wird erstellt
hier:
( suche nach unterordnern )
Wenn gefunden
erstelle unterordner
Goto hier;... while (!in.atEnd()) { zeile[za] = in.readLine(); za++; //daten.close(); } ... int hauptordner; int ordner=0; for(hauptordner=2;hauptordner<za;hauptordner++){ // Hauptordner qtree[hauptordner] = new QTreeWidgetItem(u.treeWidgetneu); qtree[hauptordner] = u.treeWidgetneu->topLevelItem(ordner); qtree[hauptordner]->setText(0,zeile[hauptordner].remove(" ")); ordner++; // Suche nach Child int kinder=0; for(int unterordner=hauptordner+1;unterordner<za;unterordner++){ marke: if(zeile[unterordner].indexOf("!--")!=-1){ qtree[unterordner-1]->setText(2,zeile[unterordner]);unterordner++;goto marke;} if(zeile[unterordner].remove(" ").indexOf("<",3)!=-1){ qtree[unterordner] = new QTreeWidgetItem(qtree[hauptordner]); qtree[unterordner] = qtree[hauptordner]->child(kinder);kinder++; QString varia=zeile[unterordner].section("/", 0, 0); QString altername=zeile[unterordner].section("/", 1, 1); qtree[unterordner]->setText(1,varia.remove(" ").remove(altername).remove("<")); qtree[unterordner]->setText(0,altername.remove(" ").remove(">"));} else{QString miau=zeile[hauptordner];QString miau2=zeile[unterordner]; if(miau2.remove("<").remove(">").remove(" ").indexOf("/"+miau.remove("<").remove(">"))!=-1){/*u.textEdit->insertPlainText("Gefunden");*/break;} else{ qtree[unterordner] = new QTreeWidgetItem(qtree[hauptordner]); qtree[unterordner] = qtree[hauptordner]->child(kinder);kinder++; qtree[unterordner]->setText(0,zeile[unterordner].remove(" ")); // Suche nach Child von Child Anfang int kinder2=0; for(int unterordner2=unterordner+1;unterordner2<za;unterordner2++){ marke2: if(zeile[unterordner2].remove(" ").indexOf("!--")!=-1){ qtree[unterordner2-1]->setText(2,zeile[unterordner2].remove(" "));unterordner2++;goto marke2;} if(zeile[unterordner2].remove(" ").indexOf("<",3)!=-1){ // u.textEdit->setText(zeile[unterordner]); qtree[unterordner2] = new QTreeWidgetItem(qtree[unterordner]); qtree[unterordner2] = qtree[unterordner]->child(kinder2);kinder2++; QString varia2=zeile[unterordner2].section("/", 0, 0); QString altername2=zeile[unterordner2].section("/", 1, 1); qtree[unterordner2]->setText(1,varia2.remove(" ").remove(altername2).remove("<")); qtree[unterordner2]->setText(0,altername2.remove(" ").remove(">"));} else{QString miau=zeile[unterordner];QString miau2=zeile[unterordner2]; if(miau2.remove("<").remove(">").remove(" ").indexOf("/"+miau.remove("<").remove(">").remove(" "))!=-1){/*u.textEdit->insertPlainText("Gefunden2");*/break;} else{ qtree[unterordner2] = new QTreeWidgetItem(qtree[unterordner]); qtree[unterordner2] = qtree[unterordner]->child(kinder2);kinder2++; qtree[unterordner2]->setText(0,zeile[unterordner2].remove(" ")); // Suche nach Child von Child von Child Anfang int kinder3=0; for(int unterordner3=unterordner2+1;unterordner3<za;unterordner3++){ //u.textEdit->setText(zeile[unterordner3]); marke3: if(zeile[unterordner3].remove(" ").indexOf("!--")!=-1){ qtree[unterordner3-1]->setText(2,zeile[unterordner3].remove(" "));unterordner3++;goto marke3;} if(zeile[unterordner3].remove(" ").indexOf("<",2)!=-1){ // u.textEdit->setText(zeile[unterordner3]); qtree[unterordner3] = new QTreeWidgetItem(qtree[unterordner2]); qtree[unterordner3] = qtree[unterordner2]->child(kinder3);kinder3++; QString varia3=zeile[unterordner3].section("/", 0, 0); QString altername3=zeile[unterordner3].section("/", 1, 1); qtree[unterordner3]->setText(1,varia3.remove(" ").remove(altername3).remove("<")); qtree[unterordner3]->setText(0,altername3.remove(" ").remove(">"));} else{QString miau=zeile[unterordner2];QString miau2=zeile[unterordner3]; if(miau2.remove("<").remove(">").remove(" ").indexOf("/"+miau.remove("<").remove(">").remove(" "))!=-1){/*u.textEdit->insertPlainText("Gefunden3");*/break;} else{ qtree[unterordner3] = new QTreeWidgetItem(qtree[unterordner2]); qtree[unterordner3] = qtree[unterordner2]->child(kinder3);kinder3++; qtree[unterordner3]->setText(0,zeile[unterordner3].remove(" ")); // Suche nach Child von Child von Child von Child Anfang int kinder4=0; for(int unterordner4=unterordner3+1;unterordner4<za;unterordner4++){ //u.textEdit->setText(zeile[unterordner4]); marke4: if(zeile[unterordner4].remove(" ").indexOf("!--")!=-1){ qtree[unterordner4-1]->setText(2,zeile[unterordner4].remove(" "));unterordner4++;goto marke4;} if(zeile[unterordner4].remove(" ").indexOf("<",2)!=-1){ // u.textEdit->setText(zeile[unterordner4]); qtree[unterordner4] = new QTreeWidgetItem(qtree[unterordner3]); qtree[unterordner4] = qtree[unterordner3]->child(kinder4);kinder4++; QString varia4=zeile[unterordner4].section("/", 0, 0); QString altername4=zeile[unterordner4].section("/", 1, 1); qtree[unterordner4]->setText(1,varia4.remove(" ").remove(altername4).remove("<")); qtree[unterordner4]->setText(0,altername4.remove(" ").remove(">"));} else{QString miau=zeile[unterordner3];QString miau3=zeile[unterordner4]; if(miau3.remove("<").remove(">").remove(" ").indexOf("/"+miau.remove("<").remove(">").remove(" "))!=-1){/*u.textEdit->insertPlainText("Gefunden3");*/break;} else{ qtree[unterordner4] = new QTreeWidgetItem(qtree[unterordner3]); qtree[unterordner4] = qtree[unterordner3]->child(kinder4);kinder4++; qtree[unterordner4]->setText(0,zeile[unterordner4].remove(" ")); }}}unterordner3=unterordner4; // Suche nach Child von Child von Child von Child Ende }}}unterordner2=unterordner3; // Suche nach Child von Child von Child Ende }}}unterordner=unterordner2; // Suche nach Child von Child Ende }}}hauptordner=unterordner; }
-
goto solltest du nur in äußersten Notfällen verwenden - und für so eine Schleife kannst du auch eine normale Schleife verwenden:
while(suche_unterordner()) { erstelle_daten(); }
(Pseudocode - ich hatte jetzt nicht wirklich Lust, mich durch deinen Code-Wust zu wühlen)
-
entschuldige bitte das es so unübersichtlich ist. Es sind beides genau der selbe code der aber aus sich heraus entsteht. Mir ist dein Beispiel leider noch nicht ganz klar
im Grund soll es so gehen
// Suche nach Child int kinder=0; for(int unterordner=hauptordner+1;unterordner<za;unterordner++){ marke: if(zeile[unterordner].indexOf("!--")!=-1){ qtree[unterordner-1]->setText(2,zeile[unterordner]);unterordner++;goto marke;} if(zeile[unterordner].remove(" ").indexOf("<",3)!=-1){ qtree[unterordner] = new QTreeWidgetItem(qtree[hauptordner]); qtree[unterordner] = qtree[hauptordner]->child(kinder);kinder++; QString varia=zeile[unterordner].section("/", 0, 0); QString altername=zeile[unterordner].section("/", 1, 1); qtree[unterordner]->setText(1,varia.remove(" ").remove(altername).remove("<")); qtree[unterordner]->setText(0,altername.remove(" ").remove(">"));} else{QString miau=zeile[hauptordner];QString miau2=zeile[unterordner]; if(miau2.remove("<").remove(">").remove(" ").indexOf("/"+miau.remove("<").remove(">"))!=-1){/*u.textEdit->insertPlainText("Gefunden");*/break;} else{ qtree[unterordner] = new QTreeWidgetItem(qtree[hauptordner]); qtree[unterordner] = qtree[hauptordner]->child(kinder);kinder++; qtree[unterordner]->setText(0,zeile[unterordner].remove(" ")); AB HIER SUCHE EBENE TIEFER: }}}hauptordner=unterordner; }
der CODE für die EBENE TIEFER:
// Suche nach Child von Child Anfang int kinder2=0; for(int unterordner2=unterordner+1;unterordner2<za;unterordner2++){ marke2: if(zeile[unterordner2].remove(" ").indexOf("!--")!=-1){ qtree[unterordner2-1]->setText(2,zeile[unterordner2].remove(" "));unterordner2++;goto marke2;} if(zeile[unterordner2].remove(" ").indexOf("<",3)!=-1){ // u.textEdit->setText(zeile[unterordner]); qtree[unterordner2] = new QTreeWidgetItem(qtree[unterordner]); qtree[unterordner2] = qtree[unterordner]->child(kinder2);kinder2++; QString varia2=zeile[unterordner2].section("/", 0, 0); QString altername2=zeile[unterordner2].section("/", 1, 1); qtree[unterordner2]->setText(1,varia2.remove(" ").remove(altername2).remove("<")); qtree[unterordner2]->setText(0,altername2.remove(" ").remove(">"));} else{QString miau=zeile[unterordner];QString miau2=zeile[unterordner2]; if(miau2.remove("<").remove(">").remove(" ").indexOf("/"+miau.remove("<").remove(">").remove(" "))!=-1){/*u.textEdit->insertPlainText("Gefunden2");*/break;} else{ qtree[unterordner2] = new QTreeWidgetItem(qtree[unterordner]); qtree[unterordner2] = qtree[unterordner]->child(kinder2);kinder2++; qtree[unterordner2]->setText(0,zeile[unterordner2].remove(" ")); }}}unterordner=unterordner2; // Suche nach Child von Child Ende
-
Habe einen code geschrieben ( mehr c als c++ und die meisten würden es noch nicht mal als code beschreiben ) aber er läuft, macht genau was ich will.
Ich poste ihn nicht unter andere GUI , QT… weil meine Frage sich auf die QT Elemente abzieht sondern auf das zusammen fassen.Mit C++/CLI hats trotzdem nichts zu tun. Wenn, dann mit C++.
Falsches Forum