Text absatzweise Teilen

Yoda

Yoda

Aktives Mitglied
Thread Starter
Dabei seit
29.08.2002
Beiträge
1.766
Reaktionspunkte
2
Hallo

Kennt jemand von euch eine Möglichkeit wie ich einen langen Text absatzweise in einzelne Files Teilen kann?

ev mit dem Automator

was noch ideal wäre ist, wenn dann der Filename die erste Zeile des Absatz sein würde.

danke

Yoda
 
Das könnte man relativ leicht mit einem Skript realisieren z.B. in Perl oder mit awk.
Die Frage, die sich stellt, ist, wie denn ein Absatz erkannt werden kann.

Befindet sich zB. nach jedem (!) Absatz (und nur da) eine leere Zeile?
Oder kann man Absätze anhand eines anderen Kriteriums eindeutig erkennen?

btw: mit Mac OS X hat Deine Frage ja nun gar nichts zu tun.
Ich schieb Dich mal ins Unix Forum, weil dort u.a. über Skripte diskutiert wird.
 
ok, danke für deine Hilfe

ja, die Leerzeile ist nur nach jedem Absatz und nach der ersten Zeile ist ein Return

im Text selbst sind jeoch auch Returns enthalten - jedoch ohne Leerzeile - also ein Block.

danke

Yoda
 
Okay; folgendes funktioniert:
Code:
awk 'BEGIN {RS="";FS="\n"}{outfile=$1; print $0 > outfile}' eintext
Du gibst das Ganze so im Terminal ein (copy/paste), wobei "eintext" der absolute oder relative Pfad zur Textdatei ist (die übrigens unverändert erhalten bleibt).

Die Ausgabedateien werden im aktuellen Verzeichnis angelegt.
Man könnte das aber auch so erweitern, dass diese z.B. in eine bestimmtes Verzeichnis kommen (z.B. in ein bestimmtes Verzeichnis auf dem Schreibtisch).

Einzige Einschränkung: die jeweils ersten Zeilen der Absätze dürfen keine Sonderzeichen wie z.B. Umlaute enthalten, da sonst die Ausgabedatei nicht angelegt werden kann.

Wenn Du mit dem Terminal noch nicht zurecht kommst, gib kurz Bescheid.

HTH
 
danke für deine schnelle Hilfe - ich glaube das mit den Sonderzeichen ist ein Problem:

die erste Zeile sieht immer in etwas so aus:

Sonntag, 1. Januar

und im Absatz habe ich auch dann Punkte, Doppelpunte und Beistriche....

input record number 1, file /Users/powermac/Desktop/Text.txt
source line number 1

gibt es dafür auch eine Lösung?

Danke

Yoda
 
Yoda schrieb:
danke für deine schnelle Hilfe - ich glaube das mit den Sonderzeichen ist ein Problem:
die erste Zeile sieht immer in etwas so aus:
Sonntag, 1. Januar
und im Absatz habe ich auch dann Punkte, Doppelpunte und Beistriche....
...
Das ist beides kein Problem.
Yoda schrieb:
...
input record number 1, file /Users/powermac/Desktop/Text.txt
source line number 1
...
Dazu müsste ich einen Teil des Textes sehen, insbesondere die ersten zwei/drei Zeilen.
 
vielen Dank für deine Mühe:

der Text sieht in etwa so aus:

Sonntag, 1. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text

Montag, 2. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text


reicht dir so etwas?

danke

Yoda
 
Ja, das funktioniert bei mir problemlos; schau:
Code:
% ls -l                                      2591 
total 8
-rw-r--r--   1 maceis  maceis  701  7 Apr 11:01 eintext

% cat eintext
erster Absatz
Hier ist also der - erste Absatz - ; was machen wir mit dem?
Ich denke, den muss man in eine Datei schreiben.
Und hier probieren wir die Sache mit den Sonderzeichen: äÄöÖüÜß

Sonntag, 1. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text

Montag, 2. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text

% awk 'BEGIN {RS="";FS="\n"}{outfile=$1; print $0 > outfile}' eintext

% ls -l
total 32
-rw-r--r--   1 maceis  maceis  255  7 Apr 11:03 Montag, 2. Januar
-rw-r--r--   1 maceis  maceis  256  7 Apr 11:03 Sonntag, 1. Januar
-rw-r--r--   1 maceis  maceis  701  7 Apr 11:01 eintext
-rw-r--r--   1 maceis  maceis  188  7 Apr 11:03 erster Absatz

Mach mal folgendes:
Code:
head -5 Users/powermac/Desktop/Text.txt
 
komisch, er macht mir keine Files:

PowerMac:~ powermac$ awk 'BEGIN {RS="";FS="\n"}{outfile=$1; print $0 > outfile}' /Users/powermac/Desktop/Text.txt
wie oben ist auch ein Return m?glich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum n?chsten Text
input record number 1, file /Users/powermac/Desktop/Text.txt
source line number 1
PowerMac:~ powermac$ head -5 /Users/powermac/Desktop/Text.txt
PowerMac:~ powermac$ Return m?glich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum n?chsten Text
 
Es sieht so aus, als enthielte die erste nicht leere Zeile Deines Textes Umlaute (... möglich ...)

Deine Beiträge werden übrigens leichter lesbar, wenn Du Codeteile oder Shellein-/-ausgaben in code Tags packst.
Code:
Shelltext[/cod] (hier noch das e anfügen)
 
das war es nicht - ich habe genau den Text verwendet, den ich dir gesendet habe:
(am Anfang ohne Leerzeile)


Sonntag, 1. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text

Montag, 2. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text
 
head -5 gibt die ersten fünf Zeilen eines textes aus und da kommt bei Dir als Ergebnis:
Code:
head -5 /Users/powermac/Desktop/Text.txt
Return m?glich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum n?chsten Text
.
Insofern kann ich Dir nur schwer Glauben schenken ;).
Zudem wird bei mir Dein Text einwandfrei verarbeitet.
 
ich habe auch gerade mal nachgesehen ob er mit Spotlight etwas mit Sonntag oder Montag findet, aber da ist auch kein File auf meiner Platte.

ich verwende hier 10.4.6

an was könnte es noch liegen?

danke inzwischen

Yoda
 
jetzt habe ich wieder etwas probiert:

der Text wurde von mir nun im Textedit so geschrieben:


Sonntag, 1. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text

Montag, 2. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text

Sonntag, 11. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text

Montag, 12. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text

Sonntag, 11. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text

Montag, 2. Januar
dann kommt der Text, wie er z.B.: hier angeführt wird (es sind auch Zahlen und Satzzeichen enhalten)
wie oben ist auch ein Return möglich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum nächsten Text



und unter cat zeigt er mir im Terminal folgendes an:
(also ohne Absätze)

PowerMac:~/desktop powermac$ cat text.txt

wie oben ist auch ein Return m?glich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann wewie oben ist auch ein Return m?glich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann wewie oben ist auch ein Return m?glich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann wewie oben ist auch ein Return m?glich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann weiter bis zum n?chsten Text
wie oben ist auch ein Return m?glich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann wewie oben ist auch ein Return m?glich oder auch so (in der Klammer Text mit Zahlen 13:30) und das geht dann wePowerMac:~/desktop powermac$


habe ich hier etwas falsch gemacht?

danke

Yoda
 
jetzt habe ich wieder etwas herausgefunden:

mit dem nano zeigt er mir den Text richtig an, aber mit dem cat nur wie oben in einer Wurst....

woran kann das liegen?
 
Yoda schrieb:
jetzt habe ich wieder etwas herausgefunden:

mit dem nano zeigt er mir den Text richtig an, aber mit dem cat nur wie oben in einer Wurst....

woran kann das liegen?
Am Zeilenendzeichen oder vielleicht an einer falschen Kodierung.

Versuchs mal mit diesem Beispieltext:
 
cooool mit dem funktioniert es!

welche Codierung brauche ich dafür :)
 
ich habe es geschafft - mit den bbedit!!! :)

aber er lässt mir nicht alle machen:

awk: Mittwoch, 18. Januar makes too many open files
input record number 18, file tt06
source line number 1


Danke vielmals für die bisherige Hifle

Yoda

P.S. könnte man auch einie fortlaufende Nummer vor dem Wochentag beim Filenamen eingeben?
 
Yoda schrieb:
....
awk: Mittwoch, 18. Januar makes too many open files
input record number 18, file tt06
source line number 1
...
Was steht im 18. Absatz?
Yoda schrieb:
....
P.S. könnte man auch einie fortlaufende Nummer vor dem Wochentag beim Filenamen eingeben?
Aber natürlich.
Code:
awk 'BEGIN {RS="";FS="\n"}{outfile=NR $1; print $0 > outfile}' eintext

Noch ein Hinweis:
Wenn im aktuellen Verzeichnis bereits Namen mit dem selben Namen existieren, werden diese ohne Warnung überschrieben.
 
der Inhalt hat mit dem 18. Absatz nichts zu tun - ich habe mal zum Test den 17. und 18.gelöscht - das gleiche wieder - aber soweit ich das verstehe sind zu viele Files offen.

das mit der Nummer funktioniert gut - danke

schade, dass ich mich im Terminal nicht so gut auskenne :(
 
Zurück
Oben Unten