Daten aus Textdatei in andere Textdatei schreiben

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.
danpy
User
Beiträge: 12
Registriert: Donnerstag 20. Dezember 2012, 07:09

Dann werde ich diese Aussage zurückziehen und mich bei Sirius hiermit entschuldigen.
Hoffe mal Sirius sieht das nicht so streng?
BlackJack

@danpy: 1. würde ich nicht explizit machen. Da die Datei zeilenweise organisiert ist, kann man sie beim zeilenweisen Einlesen verarbeiten, ohne dass man die gesamte Datei auf einmal in den Speicher lesen muss.

Wenn das ein Ablaufplan sein soll, dann muss 4. vor 3. kommen, denn zum Anlegen der Datei benötigt man ja den Dateinamen.

Und 5. solltest Du auch vor 3. ziehen, denn man kann aus Dateien nicht einfach etwas entfernen. Das geht nur in Spezialfällen und ist auch dann noch umständlicher und ineffizienter als die Daten, die man dort nicht drin haben möchte, gar nicht erst in die Datei zu schreiben. Wenn Du so einen <Datei>-Abschnitt in eine passende Datenstruktur eingelesen hast, ist es aber sehr einfach nur die gewünschten Zeilen in die Datei zu schreiben.
danpy
User
Beiträge: 12
Registriert: Donnerstag 20. Dezember 2012, 07:09

1. Textdatei zeilenweise einlesen
2. das erste mal den Bereich <Datei ........ </Datei> einlesen und gleichzeitig das unerwünschte entfernen
3. neue Datei erstellen mit dem Wert von Titel
4. in die neue Datei den Text reinschreiben
5. Wieder vorn anfangen und den nächsten Bereich einlesen.


Habe den Ablauf so abgeändert wie Blackjack vorschlägt.
Bei diesen Ablauf kann ich den Wert vom Titel aber nicht rausfinden, weil ich den gelöscht habe.

Ist das ein Denkfehler on mir?

Ich würde das so machen, kombiniert mit den Vorschlägen on Blackjack.

1. Textdatei zeilenweise einlesen
2. das erste mal den Bereich <Datei ........ </Datei>
3. neue Datei erstellen mit dem Wert von Titel
4. bei dem Bereich <Datei ........ </Datei> das unerwünschte entfernen
5. in die neue Datei den Text reinschreiben der von 4. übrig geblieben ist
6. Wieder vorn anfangen und den nächsten Bereich einlesen.

Was sagt Ihr dazu?
Bin ich auf der richtigen Fährte?
Sirius3
User
Beiträge: 18264
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo danpy,

sorry für meine Unachtsamkeit. Man sollte einfach nicht im Forumseditor programmieren ;-)
Erinnert mich an meine Informatikklausuren, wo es punktabzug gab, wenn man einen Strichpunkt
vergessen hatte.

Nochmal eine Frage zu Anfang: Hast Du schon Erfahrung mit irgend einer Art von
Programmierung?

Man kann zum Beispiel die Zeile mit <datei ...> in eine Variable, nennen wir sie "kopf"
speichern und den Rest in eine zweite, "inhalt". Dann geht auch der Titel nicht verloren
und ist dennoch vom Inhalt getrennt.

Grüße
Sirius
BlackJack

@danpy: Ich ging nicht davon aus, dass etwas „entfernt” wird, sondern das einfach etwas nicht geschrieben wird. Ob man die ersten und letzten Zeilen tatsächlich in der Datenstruktur entfernt oder einfach nur die Daten dazwischen in eine Datei schreibt, macht keinen wirklichen Unterschied.

1. und 2. sind eigentlich keine getrennten Punkte. Und bei zweitens sollte das „das erste mal” aus der Beschreibung verschwinden. Das wird zwar auch das erste mal gemacht, aber eben auch genau so bei jedem weiteren <Datei>-Abschnitt. Punkt 2. wäre also „<Datei>-Abschnitt zeilenweise einlesen.”

1. <Datei>-Abschnitt zeilenweise in eine Datenstruktur einlesen.
2. Zieldateinamen aus erster Zeile ermitteln.
3. Zeilen ausser den ersten und letzten Beiden in die Zieldatei schreiben.
4. Wieder zu 1.

Man muss sich dann noch überlegen wie man mit dem Ende der Eingabedatei umgeht und auf welche Sonderfälle man bei „kaputten” Dateien achten muss. Zum Beispiel sicherstellen, dass die zweite und vorletzte Zeile von einem <Datei>-Abschnitt tatsächlich leer ist. Und das die Datei auch mit '</Datei>' endet.

1-3 sind auf jeden Fall gute Kandidaten für Funktionen.
danpy
User
Beiträge: 12
Registriert: Donnerstag 20. Dezember 2012, 07:09

Sirius3 hat geschrieben: Hallo danpy
sorry für meine Unachtsamkeit. Man sollte einfach nicht im Forumseditor programmieren ;-)
Erinnert mich an meine Informatikklausuren, wo es punktabzug gab, wenn man einen Strichpunkt
vergessen hatte.

Nochmal eine Frage zu Anfang: Hast Du schon Erfahrung mit irgend einer Art von
Programmierung?

Man kann zum Beispiel die Zeile mit <datei ...> in eine Variable, nennen wir sie "kopf"
speichern und den Rest in eine zweite, "inhalt". Dann geht auch der Titel nicht verloren
und ist dennoch vom Inhalt getrennt.

Grüße
Sirius
Nicht schlecht einfach so aus dem Kopf ein Script schreiben.

Ich brauche meistens einen Plan wenn es zu kompliziert wird.

Programmierung habe ich leider noch nie gemacht.
Habe jetzt mal Python genommen, weil mir die Strukturen von den Scripten gefallen haben.
Die sehen irgendwie schön aus.
BlackJack hat geschrieben:@danpy: Ich ging nicht davon aus, dass etwas „entfernt” wird, sondern das einfach etwas nicht geschrieben wird. Ob man die ersten und letzten Zeilen tatsächlich in der Datenstruktur entfernt oder einfach nur die Daten dazwischen in eine Datei schreibt, macht keinen wirklichen Unterschied.

1. und 2. sind eigentlich keine getrennten Punkte. Und bei zweitens sollte das „das erste mal” aus der Beschreibung verschwinden. Das wird zwar auch das erste mal gemacht, aber eben auch genau so bei jedem weiteren <Datei>-Abschnitt. Punkt 2. wäre also „<Datei>-Abschnitt zeilenweise einlesen.”

1. <Datei>-Abschnitt zeilenweise in eine Datenstruktur einlesen.
2. Zieldateinamen aus erster Zeile ermitteln.
3. Zeilen ausser den ersten und letzten Beiden in die Zieldatei schreiben.
4. Wieder zu 1.

Man muss sich dann noch überlegen wie man mit dem Ende der Eingabedatei umgeht und auf welche Sonderfälle man bei „kaputten” Dateien achten muss. Zum Beispiel sicherstellen, dass die zweite und vorletzte Zeile von einem <Datei>-Abschnitt tatsächlich leer ist. Und das die Datei auch mit '</Datei>' endet.

1-3 sind auf jeden Fall gute Kandidaten für Funktionen.
1. <Datei>-Abschnitt zeilenweise in eine Datenstruktur(Kopfteil, Mittelteil, Endteil) einlesen.
2. Zieldateinamen aus dem Kopfteil ermitteln.
3. Zieldatei erstellen
4. in die Zieldatei den Mittelteil schreiben
5. Wieder zu 1.

Das müsste dann wahrscheinlich passen, auf die Sonderfälle kann ich später eingehen, falls ich das erstmal hinbekomme.

Werde jetzt ein bissl über Datei zeilenweise einlesen, Datenstruktur und Funktionen lesen.
Hoffe mal das mir der Kopf danach nicht zusehr raucht. :D
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

danpy hat geschrieben:Werde jetzt ein bissl über Datei zeilenweise einlesen, Datenstruktur und Funktionen lesen.
Es ist schade, dass du das Lernen aufgegeben und die Trash-Lösung aus Stackoverflow übernommen hast.
danpy
User
Beiträge: 12
Registriert: Donnerstag 20. Dezember 2012, 07:09

/me hat geschrieben:Es ist schade, dass du das Lernen aufgegeben und die Trash-Lösung aus Stackoverflow übernommen hast.
Hallo

das Lernen habe ich nicht aufgegeben, werde noch weiterlesen um irgendwann ein eigenes Programm zuschreiben.
Zum jetzigen Zeitpunkt muss ich mir aber selber eingestehen, das es nicht möglich ist für mich ein derartiges Programm zuschreiben, da muss man einfach zuviel wissen in kurzer Zeit und wollte es bis zum 24. fertig haben.
Mir bringt es nichts wenn ich etwas über Funktionen und Datenstrukturen lese und nicht richtig verstehe.
Ich muss ganz am Anfang anfangen.
Mittendrin anfangen bringt mir nichts. Ich muss die Grundlagen verstehn, sonst wird das nichts mit dem Programmieren.


Hatte mir das einfacher vorgestellt.
Hinterher ist man immer schlauer.
Das Programm von Stackoverflow ist erstmal nur eine Übergangslöung für mich.

Wünsche allen geruhsame und Frohe Weihnachten
curly
User
Beiträge: 3
Registriert: Sonntag 10. Juli 2011, 17:36

Ergänzung:

Um Sirius3 Code zum Laufen zu bekommen, sollte man noch finditer gegen findall austauschen. Sonst bekommt man ein

Code: Alles auswählen

Traceback (most recent call last):
  File "forum-30664.py", line 8, in <module>
    for outfilename, text in REG_PARSE.finditer(infile.read()):
TypeError: '_sre.SRE_Match' object is not iterable
Gruß curly

P.S.: Habe dabei aber nicht wirklich Ahnung von der Materie, lese nur zum Vergnügen hier ab und zu mal mit. Probiere selten dann mal codesnippets aus. Hier bin ich durch einen Blick in die von BlackJack genannte Referenz zum `re`-Modul draufgekommen.
Antworten