Ich freue mich im Forum aktiv sein zu dürfen !
Ich sitze schon ziemlich lange an einer Funktion und sehe den Wald wohl vor lauter Bäumen nicht mehr, deswegen poste ich das hier mal.
Es geht um folgendes: Es existiert eine Textdatei. Den Inhalt dieser Datei möchte ich in die richtige Reihenfolge bringen. In der Textdatei beginnen Befehle mit * und Kommentare mit **. Alles andere sind dann die zu den Befehlen gehörenden Werte.
Also könnte die Textdatei so aussehen:
**Ich bin ein Kommentar
**der über mehrere Zeilen
**geht.
**Ich muss hier bleiben.
*Baum
200, 500, 600
800, 80 , 58
**Funktion Baum
*Haus
50, 58 , 70
87, 12, 17
900, 50
**Funktion Haus
...
Für das Beispiel hier gibt es jetzt zwei Befehle. Die eigentliche Reihenfolge müsste aber so aussehen:
**Ich bin ein Kommentar
**der über mehrere Zeilen
**geht.
**Ich muss hier bleiben.
*Haus
50, 58 , 70
87, 12, 17
900, 50
**Funktion Haus
*Baum
200, 500, 600
800, 80 , 58
**Funktion Baum
...
Die Reihenfolge ist also immer die selbe, auf Haus folgt Baum usw. Es kann auch vorkommen, dass es mehrere Baum & Haus Funktionen gibt, jedoch ist es immer die selbe Anzahl.
Ich hoffe es ist klar geworden um was es geht. Wichtig ist, dass die Anzahl der Werte nach den Befehlen unterschiedlich sein kann.
Ich bin so vorgegangen: die Textdatei wird als Liste eingelesen (readlines), die Zeilennummer werden mit einer RegEx gesucht (über eine andere Methode). Die erhaltene Liste habe ich mit sort() sortiert und mit der eigentlichen Liste verglichen (Liste sortiert und Liste unsortiert). Wenn es eine abweichung gibt, lösche ich die beteffenden Zeilen. Schließlich versuche ich die Zeilen wieder an die richtige Stelle einzufügen mit insert().
Jedoch ist der Ansatz ziemlich kompliziert wie ich finde. Außerdem habe ich bis jetzt noch das Problem, dass die eingefügten Befehle mit ihren Werten in der falschen Reihenfolge erscheinen.
Code: Alles auswählen
## Achtung, es handelt sich hier nicht um echten Code
baumEx = Zeilennummer(n) der RegEx von Baum z.B. [0, 5]
hausEx = Zeilenummer(n) der RegEx von Haus z.B. [3, 8]
inhalt = Inhalt der Datei als Liste
inhaltKopie = eine Kopie von inhalt
## Achtung, es handelt sich hier nicht um echten Code
for j in range(len(unsortierteListe)):
if (unsortierteListe[j] != sortierteListe[j]):
for c in range(unsortierteListe[j]+1, len(inhaltKopie)):
if inhalt[c].startswith('*') == True and inhalt[c].startswith('**') == False:
break
for a in range(unsortierteListe[j], c):
del inhalt[unsortierteListe[j]]
Hat jemand eine bessere Idee?