Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Ok habe nun herausgefunden wie man mehrere Pfade angeben kann (mit []). Ich lasse mir nun alls Pfade heraussuchen wo header dateien enthalten sind und stelle einen String zusammen der passen sollte. Wenn ich den String an die Parse Funktion übergebe funktioniert es nicht wenn ich den Inhalt des String ausgebe und diesen in die python Datei kopiere dann gehts.
Datei 1 gefunden (/home/harald/Arbeitsfläche/Prototyp/helloWorld.c)
cpp: Fehler: r'-Ipycparser-master/utils/fake_libc_include/', r'-Ipycparser-master/utils/fake_libc_include/sys/': Datei oder Verzeichnis nicht gefunden
cpp: Warnung: »-x c« hinter letzter Eingabedatei hat keine Wirkung
cpp: schwerwiegender Fehler: keine Eingabedateien
Kompilierung beendet.
der Name des Parameters (»cmd_args«) suggeriert ja schon, dass eine Liste mit Argumenten erwartet wird. Weder Fall 2 noch Fall 3 übergeben allerdings eine Liste. Auch wäre mir keine Funktion bekannt, die mit der Repräsentation einer Liste etwas sinnvolles anfangen kann (Außer vielleicht »eval« ).
Um es deutlicher zu sagen. In »self.headers« steht Quatsch drin, schau Dir einfach mal den Typ dieser Variable an.
Hi
Also ich hätte eigentlich gedacht das wenn ich die zweite Variante nehme das er dann einfach den String der in self.headers drinnen steht dort hinschreibt und die Funktion ihn dann rictig interpretiert. Wenn ich nun aber eine Liste mache und jeden Pfad in diese Liste einfüge dann sollte es doch gehen oder?
harald hat geschrieben:Also ich hätte eigentlich gedacht das wenn ich die zweite Variante nehme das er dann einfach den String der in self.headers drinnen steht dort hinschreibt und die Funktion ihn dann rictig interpretiert.
Das wäre ein unglaublich schlechtes Verhalten. Dann müsste der Interpreter irgendwie entscheiden, welche Variante er denn nun gerade in diesem konkreten Fall wählen sollte.
harald hat geschrieben:Wenn ich nun aber eine Liste mache und jeden Pfad in diese Liste einfüge dann sollte es doch gehen oder?
Das schöne ist ja, dass man solche Sachen einfach ausprobieren kann und daraus lernt
Hi
So ich bin nun schon relativ Weit mit den Parser und kann auch schon meine Funktionen erkennen. Nun dachte ich mir eigentlich das ich in einer Datei an eine bestimmte Zeile springen kann und dort die vorhandene Zeile mit einer neuen (die länger oder kürzer ist) ersetzen kann. Allerdings geht das anscheinend doch nicht und so habe ich gelesen das ich eine temporäre Datei erstellen muss in die ich den neuen Code reinschreibe und die dann umbennene zum Beispiel. Ich hoffe ich ihre mich nicht was das angeht den eigentlich würde ich lieber nur in der aktuellen Datei die Zeile ersetzen. Sollte das doch gehen bitte um Antwort.
Nun habe ich also zwei Ansätze:
1) Die alte Datei Zeilenweise in eine neue kopieren und die jeweiligen Zeilen einfach ersetzen. Danach die alte datei löschen und die neue umbenennen.
2) Die datei mit readlines() einlesen und in eine Liste Spiechern. In der Liste die jeweiligen Zeilen ändern und danach mit writelines() die liste wieder rausschreiben.
Nachdem vermutlich beide Varianten funktionieren habe ich mir überlegt das für mich die zweite Variante leichter zu implementieren wäre aber da ich dann eine Liste brauche die den kompletten Inhalt der Datei speichert ist die Frage welche der beiden Varianten besser ist in Bezug auf Performance?! Vielleicht habt ihr ja einen Rat dazu?
@harald: Die sollten sich von der Performance nicht viel nehmen, aber die erste Variante ist etwas sicherer denn man hat immer mindestens eine der Varianten vorher/nachher komplett auf der Festplatte. Wenn also irgendetwas dummes passiert ist der Quelltext noch komplett vorhanden. Das löschen des alten Quelltextes kann man sich übrigens sparen, das ist beim Umbenennen in einen schon vorhandenen Dateinamen ja schon inbegriffen, dass die vorherige Datei mit dem Namen dann nicht mehr über diesen Namen erreichbar ist.
Hi
Danke für die Antwort. Ich habe nun mal mit der Implementierung der 2 Version begonnen. Dabei ist ja auch immer eine vollständige und richtige Datei vorhanden. Erst wenn die Liste rausgeschrieben wird verschwindet die alte Version. Alles Dateien werden aber im vorhinein sowieso gezippt um immer ein Backup zu haben.
mfg Harald