maxico
Goto Top

Notepad++ Reihenfolge von jeweils 2 Zeilen umkehren

Hallo zusammen,

ich habe eine unendlich lange .txt Datei vor mir, die nach folgendem Schema aufgebaut ist:

Zeile1: Text 2
Zeile2: Text 1
Zeile3: leer

Zeile4: Text 5
Zeile5: Text 4
Zeile6: leer

und so weiter


Nun bin ich auf der Suche nach einer Möglichkeit, um "Text 1" mit "Text 2", "Text 4" mit "Text 5" usw umzukehren.
Jede dritte Zeile, soll nach wie vor leer bleiben, sodass es danach so aussieht:

Zeile1: Text 1
Zeile2: Text 2
Zeile3: leer

Zeile4: Text 4
Zeile5: Text 5
Zeile6: leer

Gibt es eine Möglichkeit, dieses Vorgehen mit Notepad++ zu realisieren?

Ich hoffe, ihr könnt mir weiterhelfen face-smile
Im Voraus vielen Dank.

Content-Key: 332074

Url: https://administrator.de/contentid/332074

Printed on: April 20, 2024 at 04:04 o'clock

Mitglied: 132692
Solution 132692 Mar 14, 2017 updated at 10:59:07 (UTC)
Goto Top
Hi.
Suchen und Ersetzen Dialog öffnen:
Unter Ersetzen bei Suchen nach eingeben:
(?mis)([^\r\n]+)\s+([^\r\n]+)\s+(^\s*$)
In Ersetzen durch noch das hier eingeben:
$2\r\n$1\r\n
und Suchmodus aus "Regular Expression" stellen, Alle ersetzen anklicken, fertig, freuen.

P.
Member: maxico
maxico Mar 14, 2017 at 11:12:24 (UTC)
Goto Top
Vielen, vielen Dank face-smile

hat mir jede Menge Arbeit gespart.
Mitglied: 132692
132692 Mar 14, 2017 updated at 11:14:59 (UTC)
Goto Top
Bitte face-smile
hat mir jede Menge Arbeit gespart.
Und mich 2 Minuten gekostet ;-P, Hand nach Kaffee austreck face-smile
Member: kannich
kannich Mar 14, 2017 at 16:14:09 (UTC)
Goto Top
Hallo pattern,

toll, was man mit regulären Ausdrücken alles anstellen kann. Leider bin ich derzeit (noch) nicht so bewandert in diesem Thema.
Ich würde es gerne verstehen. Könntest Du bitte die regulären Ausdrücke erläutern?
Vielen Dank.

VG kannich
Mitglied: 132692
132692 Mar 14, 2017 updated at 17:38:24 (UTC)
Goto Top
Hallo @kannich,
sehr gerne, also fangen wir beim ersten Ausdruck an
(?mis)
Dieser Ausdruck legt sogenannte Flags fest die bestimmte Verhalten des Regex-Patterns beeinflussen, als da wären m (multiline matching) welches bedeutet das literal ^ statt den Anfang des Strings den Anfang jeder Zeile matcht, genauso wie das Literal $ das Ende jeder Zeile bedeutet.
Dann das i bedeutet das Case-Insensitive gematcht wird. Das s bedeutet das der Punkt (.) auch Zeilenumbrüche umfasst, ist hier eigentlich nicht nötig, hatte das nur in meinem Programm so eingestellt.

([^\r\n]+)
Das bedeutet alles was kein(^) Zeilenumbruch ist gematcht wird und das ganze wird durch das Klammernpaar als Backreference gespeichert damit man die Zeile beim Replace später als $1 ansprechen kann

\s+
Das hier matcht den Zeilenumbruch, da ein Zeilenumbruch aus mehreren Zeichen bestehen kann, der Quantifier + (mindestens ein Zeichen)

([^\r\n]+)\s+
Das selbe nochmal für die zweite Zeile. Ebenfalls mit Backreference (Klammer
n), im Replace anzusprechen mit $2.

(^\s*$)
Das hier matcht nun eine darauffolgende Leerzeile ^ für den Zeilen-Anfang, das \s* für nicht sichtbare Zeichen 0 oder mehr und das $ für das Zeilenende.


Im Replace-String werden dann die oben angegebenen Backreferences , also Zeile 1 und 2 entsprechend der gewünschten Reihenfolge gesetzt
und mit Zeilenumbrüchen versehen (\r\n)
$2\r\n$1\r\n

Lese dir ein paar der Regular Expression Tutorials durch, das Thema ist sehr umfangreich und hier leider nicht in ein zwei Sätzen erläutert.

Hoffe das bringt etwas Licht ins Dunkle.

Gruß p.
Member: kannich
kannich Mar 14, 2017 at 18:18:40 (UTC)
Goto Top
Hallo pattern,

SUPER!! Vielen Dank für diese klasse Erklärung!
Ich hatte mir (das für mich sehr gut erklärende Tut) von Daniel Fett bzgl. reguläre Ausdrücke schon zu Gemüte geführt und schon etwas erkannt, aber nicht alles. Dank Deiner Erklärung sind nun auch meine letzten Fragezeichen verschwunden. Das macht Appetit auf einen tieferen Einstieg in reguläre Ausdrücke. Danke Dir. face-smile

VG kannich
Mitglied: 132692
132692 Mar 14, 2017 updated at 21:18:10 (UTC)
Goto Top
Das macht Appetit auf einen tieferen Einstieg in reguläre Ausdrücke
Absolut, die kannst du in so ziemlich jeder Programmiersprache anwenden, ich brauche sie z.B. täglich - ohne sie würden wir hier alle noch mit mid(), substr() und Len() rumfuchteln bis der Arzt kommt face-wink. Wenn man einmal den Dreh raushat gehen Dinge die man vorher nie für möglich gehalten hat.