Absatzweise Ersetzungen
am 18.05.2006 14:01:44 von Christoph Bier
Hallo zusammen,
ich habe eine Text-Datei mit mehreren tausend Zeilen, in der Absätze
durch eine Leerzeile gekennzeichnet sind. Es handelt sich um
transkribierte Interviews, die mit LaTeX gesetzt und zu diesem Zweck
entsprechend ausgezeichnet werden sollen. Beispiel aus Original-Datei:
-----------------------------------
I: Zuerst einmal herzlichen Dank für Ihre Bereitschaft am Interview
teilzunehmen. Ich möchte etwas über ihr Ernährungsverhalten
erfahren. Mit welchen Lebensmitteln starten Sie in den Tag?
A: Morgens esse ich ausschließlich Obst und trinke nur Wasser.
Kaffee mochte ich noch nie. Wasser belebt mich.
-----------------------------------
Daraus soll werden:
-----------------------------------
\interviewer{Zuerst einmal herzlichen Dank für Ihre Bereitschaft am
Interview teilzunehmen. Ich möchte etwas über ihr
Ernährungsverhalten erfahren. Mit welchen Lebensmitteln starten Sie
in den Tag?}
\antwort{Morgens esse ich ausschließlich Obst und trinke nur Wasser.
Kaffee mochte ich noch nie. Wasser belebt mich.}
-----------------------------------
Leider gelingt mir dies wegen der Zeilenumbrüche nicht. Folgendes
habe ich unter anderem versucht (erstmal nur auf »I:« beschränkt):
perl -pi.bak -e 's/I:(.*)/\\interviewer\{\1\}/gs' Interview.tex
ignoriert alles ab dem ersten Zeilenumbruch (habe ich das mit dem
/s-Modifier falsch verstanden?).
perl -pi.bak -e 's/I:([\d\D]*)/\\interviewer\{\1\}/g' Interview.tex
dito.
Ich bin weder Programmierer noch Informatiker und brauche Perl nur
gelegentlich für solche Dinge. Bisher hat das auch gut geklappt. Nur
jetzt komme ich auch mit dem Lama-Buch nicht weiter. Was muss ich
tun, damit die Zeilenumbrüche innerhalb eines Absatzes miteinbezogen
werden und gleichzeitig die Leerzeilen als Ende eines Absatzes
erkannt werden? Dass \n auf die Zeilenumbrüche passt, konnte ich mit
perl -pi.bak -e 's/\n//g' Interview-berty.tex
überprüfen. Dann habe ich eine einzige lange Zeile in der Datei ;-).
Ich arbeite unter Debian mit Perl 5.8.4.
Viele Grüße,
Christoph
--
+++ Typografie-Regeln: http://www.zvisionwelt.de/typokurz.pdf (1.4)
Re: Absatzweise Ersetzungen
am 18.05.2006 14:48:17 von Peter Ehrenberg
Christoph Bier writes:
> [...] ich habe eine Text-Datei mit mehreren tausend Zeilen, in der
> Absätze durch eine Leerzeile gekennzeichnet sind. [...]
> -----------------------------------
> I: Zuerst einmal herzlichen Dank für Ihre Bereitschaft am Interview
> teilzunehmen. Ich möchte etwas über ihr Ernährungsverhalten
> erfahren. Mit welchen Lebensmitteln starten Sie in den Tag?
>
> A: Morgens esse ich ausschließlich Obst und trinke nur Wasser.
> Kaffee mochte ich noch nie. Wasser belebt mich.
> -----------------------------------
>
> Daraus soll werden:
>
> -----------------------------------
> \interviewer{Zuerst einmal herzlichen Dank für Ihre Bereitschaft am
> Interview teilzunehmen. Ich möchte etwas über ihr
> Ernährungsverhalten erfahren. Mit welchen Lebensmitteln starten Sie
> in den Tag?}
>
> \antwort{Morgens esse ich ausschließlich Obst und trinke nur Wasser.
> Kaffee mochte ich noch nie. Wasser belebt mich.}
> -----------------------------------
> [...]
Zuersteinmal: Vielen Dank für die sonnenklar formulierte Frage. Wir
sind hier diesbezüglich Kummer gewohnt.
Mein Vorschlag:
perl -p000le 's/^I:(.*)/\\interviewer\{\1\}/gs;s/^A:(.*)/\\antwort\{\1\}/ gs'
-0 setzt den input-record-seperator ($/); Der Wert 00 sorgt dafür,
dass Perl Paragraphen liest.
-l Setzt den output-record-seperator ($\); Kein Wert bedeutet, nehme
den selben wie für $/.
Peter
--
Dipl.-Ing. Peter Ehrenberg Tel.: +49 40 756604-40
Auf der Höhe 29 Netz: http://dipe.de/
21109 Hamburg Perl · Oracle · Linux · Netzwerk
Germany Softwareentwicklung · Installation · Administration
Re: Absatzweise Ersetzungen
am 18.05.2006 15:45:32 von Christoph Bier
Peter Ehrenberg schrieb am 18.05.2006 14:48:
> Christoph Bier writes:
[...]
> Zuersteinmal: Vielen Dank für die sonnenklar formulierte Frage. Wir
> sind hier diesbezüglich Kummer gewohnt.
Ich kenne das Problem aus de.comp.text.tex.
> Mein Vorschlag:
>
> perl -p000le 's/^I:(.*)/\\interviewer\{\1\}/gs;s/^A:(.*)/\\antwort\{\1\}/ gs'
>
> -0 setzt den input-record-seperator ($/); Der Wert 00 sorgt dafür,
> dass Perl Paragraphen liest.
>
> -l Setzt den output-record-seperator ($\); Kein Wert bedeutet, nehme
> den selben wie für $/.
Hervorragend! Herzlichen Dank! Sieht so aus, als habe alles
funktioniert.
Schöne Grüße,
Christoph
--
+++ Typografie-Regeln: http://www.zvisionwelt.de/typokurz.pdf (1.4)
Re: Absatzweise Ersetzungen
am 20.05.2006 12:12:02 von Lars Klemstein
Christoph Bier wrote:
[...]
> -----------------------------------
> I: Zuerst einmal herzlichen Dank für Ihre Bereitschaft am Interview
> teilzunehmen. Ich möchte etwas über ihr Ernährungsverhalten
> erfahren. Mit welchen Lebensmitteln starten Sie in den Tag?
>
> A: Morgens esse ich ausschließlich Obst und trinke nur Wasser.
> Kaffee mochte ich noch nie. Wasser belebt mich.
> -----------------------------------
>
> Daraus soll werden:
>
> -----------------------------------
> \interviewer{Zuerst einmal herzlichen Dank für Ihre Bereitschaft am
> Interview teilzunehmen. Ich möchte etwas über ihr
> Ernährungsverhalten erfahren. Mit welchen Lebensmitteln starten Sie
> in den Tag?}
>
> \antwort{Morgens esse ich ausschließlich Obst und trinke nur Wasser.
> Kaffee mochte ich noch nie. Wasser belebt mich.}
> -----------------------------------
perl -p000e 's/(?<=-\n)I:\s*(.+?)\s*$/\\interviewer{\1}\n/s;
s/A:\s*(.+)(?=\n-+)/\n\\antwort{\1}/s;' file
Gruß,
Lars Klemstein
Re: Absatzweise Ersetzungen
am 25.05.2006 10:39:53 von Christoph Bier
Lars Klemstein schrieb am 20.05.2006 12:12:
> Christoph Bier wrote:
> [...]
>
>>-----------------------------------
>>I: Zuerst einmal herzlichen Dank für Ihre Bereitschaft am Interview
>>teilzunehmen. Ich möchte etwas über ihr Ernährungsverhalten
>>erfahren. Mit welchen Lebensmitteln starten Sie in den Tag?
>>
>>A: Morgens esse ich ausschließlich Obst und trinke nur Wasser.
>>Kaffee mochte ich noch nie. Wasser belebt mich.
>>-----------------------------------
>>
>>Daraus soll werden:
>>
>>-----------------------------------
>>\interviewer{Zuerst einmal herzlichen Dank für Ihre Bereitschaft am
>>Interview teilzunehmen. Ich möchte etwas über ihr
>>Ernährungsverhalten erfahren. Mit welchen Lebensmitteln starten Sie
>>in den Tag?}
>>
>>\antwort{Morgens esse ich ausschließlich Obst und trinke nur Wasser.
>>Kaffee mochte ich noch nie. Wasser belebt mich.}
>>-----------------------------------
>
> perl -p000e 's/(?<=-\n)I:\s*(.+?)\s*$/\\interviewer{\1}\n/s;
> s/A:\s*(.+)(?=\n-+)/\n\\antwort{\1}/s;' file
Danke, ich bin allerdings jetzt erst zum Testen gekommen. Mit diesem
Aufruf funktioniert das Ersetzen nicht:
chris@lotus:/tmp$ perl -p000e
's/(?<=-\n)I:\s*(.+?)\s*$/\\interviewer{\1}\n/s;
s/P:\s*(.+)(?=\n-+)/\n\\antwort{\1}/s;' interv.tex > interv-conv.tex
chris@lotus:/tmp$ diff interv.tex interv-conv.tex
951d950
<
1290d1288
<
Grüße,
Christoph
--
+++ Typografie-Regeln: http://www.zvisionwelt.de/typokurz.pdf (1.4)
Re: Absatzweise Ersetzungen
am 25.05.2006 17:34:17 von Lars Klemstein
Christoph Bier wrote:
[...]
> Danke, ich bin allerdings jetzt erst zum Testen gekommen. Mit diesem
> Aufruf funktioniert das Ersetzen nicht:
>
> chris@lotus:/tmp$ perl -p000e
> 's/(?<=-\n)I:\s*(.+?)\s*$/\\interviewer{\1}\n/s;
> s/P:\s*(.+)(?=\n-+)/\n\\antwort{\1}/s;' interv.tex > interv-conv.tex
> chris@lotus:/tmp$ diff interv.tex interv-conv.tex
> 951d950
> <
> 1290d1288
> <
Hmh... kann ich nicht nachvollziehen:
$ cat file
----------------------------------
I: Zuerst einmal herzlichen Dank für Ihre Bereitschaft am Interview
teilzunehmen. Ich möchte etwas über ihr Ernährungsverhalten
erfahren. Mit welchen Lebensmitteln starten Sie in den Tag?
A: Morgens esse ich ausschließlich Obst und trinke nur Wasser.
Kaffee mochte ich noch nie. Wasser belebt mich.
-----------------------------------
$ perl -p000e
's/(?<=-\n)I:\s*(.+?)\s*$/\\interviewer{\1}\n/s;^Js/A:\s*(.+)(? >
----------------------------------
\interviewer{Zuerst einmal herzlichen Dank für Ihre Bereitschaft am
Interview teilzunehmen. Ich möchte etwas über ihr Ernährungsverhalten
erfahren. Mit welchen Lebensmitteln starten Sie in den Tag?}
\antwort{Morgens esse ich ausschließlich Obst und trinke nur Wasser.
Kaffee mochte ich noch nie. Wasser belebt mich.}
-----------------------------------
$
Das Ergebnis entspricht exakt der Anforderung aus dem Ursprungspost.
Was funktioniert denn bei Dir konkret nicht?
Gruß,
Lars Klemstein
Re: Absatzweise Ersetzungen
am 28.05.2006 12:33:12 von Christoph Bier
Lars Klemstein schrieb am 25.05.2006 17:34:
> Christoph Bier wrote:
> [...]
>
>>Danke, ich bin allerdings jetzt erst zum Testen gekommen. Mit diesem
>>Aufruf funktioniert das Ersetzen nicht:
>>
>>chris@lotus:/tmp$ perl -p000e
>>'s/(?<=-\n)I:\s*(.+?)\s*$/\\interviewer{\1}\n/s;
>>s/P:\s*(.+)(?=\n-+)/\n\\antwort{\1}/s;' interv.tex > interv-conv.tex
>>chris@lotus:/tmp$ diff interv.tex interv-conv.tex
>>951d950
>><
>>1290d1288
>><
>
> Hmh... kann ich nicht nachvollziehen:
>
> $ cat file
>
> ----------------------------------
> I: Zuerst einmal herzlichen Dank für Ihre Bereitschaft am Interview
> teilzunehmen. Ich möchte etwas über ihr Ernährungsverhalten
> erfahren. Mit welchen Lebensmitteln starten Sie in den Tag?
>
> A: Morgens esse ich ausschließlich Obst und trinke nur Wasser.
> Kaffee mochte ich noch nie. Wasser belebt mich.
> -----------------------------------
>
> $ perl -p000e
> 's/(?<=-\n)I:\s*(.+?)\s*$/\\interviewer{\1}\n/s;^Js/A:\s*(.+)(? >
> ----------------------------------
> \interviewer{Zuerst einmal herzlichen Dank für Ihre Bereitschaft am
> Interview teilzunehmen. Ich möchte etwas über ihr Ernährungsverhalten
> erfahren. Mit welchen Lebensmitteln starten Sie in den Tag?}
>
> \antwort{Morgens esse ich ausschließlich Obst und trinke nur Wasser.
> Kaffee mochte ich noch nie. Wasser belebt mich.}
> -----------------------------------
>
> $
>
> Das Ergebnis entspricht exakt der Anforderung aus dem Ursprungspost.
> Was funktioniert denn bei Dir konkret nicht?
Naja, es ändert sich durch den Aufruf nur das, was das diff auch
angezeigt hat. Auch wenn ich jetzt einfach mal die zwei
exemplarischen Absätze nehme, die Du auch verwendet hast,
funktioniert es nicht:
chris@skull:/tmp$ cat conv.tex
I: Zuerst einmal herzlichen Dank fuer Ihre Bereitschaft am Interview
teilzunehmen. Ich moechte etwas ueber ihr Ernaehrungsverhalten
erfahren. Mit welchen Lebensmitteln starten Sie in den Tag?
A: Morgens esse ich ausschliesslich Obst und trinke nur Wasser.
Kaffee mochte ich noch nie. Wasser belebt mich.
chris@skull:/tmp$ perl -p000e
's/(?<=-\n)I:\s*(.+?)\s*$/\\interviewer{\1}\n/s;
s/A:\s*(.+)(?=\n-+)/\n\\antwort{\1}/s;' conv.tex
I: Zuerst einmal herzlichen Dank fuer Ihre Bereitschaft am Interview
teilzunehmen. Ich moechte etwas ueber ihr Ernaehrungsverhalten
erfahren. Mit welchen Lebensmitteln starten Sie in den Tag?
A: Morgens esse ich ausschliesslich Obst und trinke nur Wasser.
Kaffee mochte ich noch nie. Wasser belebt mich.
Grüße,
Christoph
PS: Ich kann derzeit wegen Umzugs nur stark verzögert reagieren.
--
+++ Typografie-Regeln: http://www.zvisionwelt.de/typokurz.pdf (1.4)