Text Editieren

  • Hallo Forum,

    ich weiß nicht, wo ich meine heutige Frage einstellen muss. Vielleicht finde ich hier Hilfe. Ich muss Texte editieren, die teilweise hundertfünzig Zeilen oder mehr umfassen. Vor jeder dieser Zeilen muß ein und derselbe Begriff eingefügt sein. Wie kann man es anstellen, das durch ein Befehl alle Zeilen denselben Anfang bekommen, ohne das ich jede einzeln mit Copy und Paste bearbeiten muss? Welcher Texteditor verfügt über ein geeignetes Tool?=

  • Ah super. Fliegenhals und simonz. Vielen Dank. Sed funktioniert auf Anhieb. Mit vim experimentiere ich noch.

    Jetzt habe ich noch ein Problem. Wie bekommt man es hin, das alle Zeilen am Zeilenende durch Leerzeichen die gleiche Länge bekommen, ohne das ich jede einzelne Zeile bearbeiten muss?

  • Scheibe dir ein kleines Script. Mit z.B. wc -L File kannst Du dir die Anzahl der Zeichen der längsten Zeile ermitteln. Damit hast Du den Wert, auf den Du alle anderen Zeilen z.B in einer Schleife mit Leerzeichen auffüllen musst. wc -l File ermittelt die Anzahl der Zeilen.

    Aber vielleicht geht's auch noch einfacher.

  • Hallo Tell, die Länge der Zeilen wird durch die längste Zeile im Text festgelegt. Ich nutze Typewriti ng und muss sicherstellen, das jedes Zeichen der jeweils längeren Zeilen von Kürzeren komplett überschrieben wird.

    Das Script verstehe ich noch nicht so richtig. Muss ich dort, wo du Hello reingeschrieben hast, den Text meiner ganzen Zeile eingeben?

    Und das dann für alle Zeilen?

  • Ein kleines selbst geschriebenes Python-Skript würde natürlich auch funktionieren.

    Ca. ein Dutzend Zeilen sollten vermutlich genügen.

    Das wäre eine schöne Programmierübung. ;)


    PS: Okay, mit etwas Fehlerbehandlung und print()'s sind es dann doch 30 Zeilen geworden.

    Einmal editiert, zuletzt von simonz (22. November 2021 um 09:12)

  • Die eigentliche Arbeit in 4 Python-Zeilen:

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Fliegenhals Ich sehe jetzt nicht was das bringen soll. Dann sind die Zeilen ja trotzdem am Ende unterschiedlich lang. Einzige Optimierung die mir einfallen würde, die das komplette einlesen in den Speicher (oder 2× lesen) vermeiden könnte, wäre nicht bis zur maximalen Länge auffüllen, sondern bis zur Länge der jeweils vorhergehenden Zeile, falls die Zeilen nacheinander verwendet werden.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Hier dann mal meine Version.

    Nicht so tricky wie die von __blackjack__ aber vielleicht auch hilfreich.

    Einmal editiert, zuletzt von simonz (22. November 2021 um 17:22) aus folgendem Grund: Ich hatte den Prefix vergessen...

  • Hallo Forum, danke für die zahlreichen Tips und Ideen und die Scripte . Das , was ich bis jetzt getestet habe, funktioniert. Fliegenhals hat recht, für diesen Zweck soll eine kürzere Zeile die vorhergehende möglicherweise Längere überschreiben-

    Aber andere Ideen sind auch willkommen. Guted Programmieren ist schon das Fernziel.

  • Wenn jede mindestens Zeile so lang sein soll, das sie die vorhergehende komplett überschreibt, dann braucht man nicht die gesamte Datei vorher einlesen um die längste Zeile zu bestimmen. Denn dann reicht es ja immer nur die jeweils vorhergehende Zeile und deren Länge zu betrachten. Die Ergebnisdatei wird dann auch kleiner.

    Ich hänge im Folgenden einfach eine leere Zeile vor die zu verarbeiteten Zeilen um bei Länge 0 für die erste Zeile anzufangen. Diese erste Zeile wird nicht mit ausgegeben.

    Wer die externe Abhängigkeit des von `more_itertools` nicht mag, kann sich `pairwise()` und `prepend()` auch einfach selber basteln. `pairwise()` ist bei der aktuellsten Python-Version wohl auch im `itertools`-Modul in der Standardbibliothek.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Um die mir neuen [more_]itertools Funktionen besser kennen und verstehen zu lernen, habe ich sie hier mal nachgebastelt:

    Ich hoffe, es gruselt nicht zu sehr... ;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!