PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Code-Zeile für Ersetzen gesucht:



cookie170
18-02-2008, 12:33
Hallo,

für umfangreiche Änderungen in einem längeren Text habe ich das schöne "changes"-Paket verwendet. Textänderungen werden darin folgendermaßen markiert:


\replaced[Autor]{aktueller Text}{alter Text}


Nun habe ich einige hundert dieser \replaced-Befehle im Text und würde gerne eine konsolidierte Fassung herstellen. Mit welchem Befehl auf der Konsole kann ich
den obigen Code durch den jeweiligen "aktuellen Text" ersetzen? Es soll alles andere wegfallen ("\replaced", [Autor],{alter Text}, sowie die geschweiften Klammern um den neuen Text, wobei letzteres nicht unbedingt notwendig ist).

Das ganze gibt es dann noch in zwei weiteren Varianten:

Mit dem Befehl

\added[Autor]{neuer Text}

wir hinzugefügter Text markiert, hier würde ich gerne alles bis auf "neuer Text" loswerden.

Mit dem Befehl

\deleted[Autor]{gelöschter Text}

wird Text entfernt, hier soll schlichtweg alles wegfallen.

Ich arbeite unter Linux, aber wenn jemand einen Vorschlag für Windows hat, bin ich auch dankbar,

Gruß,
Alexander

rais
18-02-2008, 12:57
Moin Alexander,
warum nicht einfach


\renewcommand\replaced[3][]{#2}
\renewcommand\added[2][]{#2}
\renewcommand\deleted[2][]{}

?
MfG

cookie170
18-02-2008, 13:08
Weil dann die Änderungen in der Datei bleiben. Nun will ich aber -- es geht um einen Vertrag -- in der nächsten Verhandlungsrunde neue Änderungen markieren. Die alten dürfen dabei nicht mehr sichtbar sein, denn die sind "gegessen". Also: raus damit. Nur kenne ich mich mit den "regular expressions" nicht aus.

Danke für Deine Hilfe,
Gruß,
Alexander

voss
18-02-2008, 13:50
für umfangreiche Änderungen in einem längeren Text habe ich das schöne "changes"-Paket verwendet. Textänderungen werden darin folgendermaßen markiert:


\replaced[Autor]{aktueller Text}{alter Text}


Nun habe ich einige hundert dieser \replaced-Befehle im Text und würde gerne eine konsolidierte Fassung herstellen. Mit welchem Befehl auf der Konsole kann ich
den obigen Code durch den jeweiligen "aktuellen Text" ersetzen? Es soll alles andere wegfallen ("\replaced", [Autor],{alter Text}, sowie die geschweiften Klammern um den neuen Text, wobei letzteres nicht unbedingt notwendig ist).

Das ganze gibt es dann noch in zwei weiteren Varianten:

Mit dem Befehl

\added[Autor]{neuer Text}

wir hinzugefügter Text markiert, hier würde ich gerne alles bis auf "neuer Text" loswerden.

Mit dem Befehl

\deleted[Autor]{gelöschter Text}

wird Text entfernt, hier soll schlichtweg alles wegfallen.

Ich arbeite unter Linux, aber wenn jemand einen Vorschlag für Windows hat, bin ich auch dankbar,

ich würde ein kleines Perl-Programm schreiben, welches einfach zeilenweise
alles einliest und jeweils auf die drei Befehle testet und dann ersetzt. Wenn ich
mich recht erinnere, schreibt changes die imemr in eine Zeile, sodass dazwischen
kein Zeilenumbruch ist.

Herbert

cookie170
18-02-2008, 17:05
... wenn man vorher sauber gearbeitet hat. Im ersten Schritt ersetzt man "\replace[Autor]" durch "[Autor]". Im zweiten Arbeitet man mit regulären Ausdrücken und Platzhaltern. Der verbleibende Ausdruck "[Autor]{aktueller Text}{alter Text}"
lässt sich in einem regulären Ausdruck so abbilden:



\[Autor\]\{(^\})*\}\{(^\})*\}


Aber ich will ja auch die geschweiften Klammern um den aktuellen Text beseitigen. Dazu baue ich Gruppen und ersetze den gefundenen Ausdruck durch die dritte Gruppe:



(\[Autor\])(\{)((^\})*)(\})(\{(^\})*\})


Es hat mich drei Stunden gekostet, aber man lernt ja nie aus.

Gruß,
Alexander