[Tustep-Liste] Inhalt einer Datei in Einzeldateien speichern

Hans Derkits hans.derkits at utanet.at
Do Okt 6 15:22:02 CEST 2005


	Lieber Herr Brunschön,

hier eine einfache Lösung Ihres Problems in Ruby. Sie können sie z.B. 
über den in eine System-Datei exportierten Text laufen lassen.

Wenn das xml-tag, wie in ihrem Beispiel, in einer eigenen Zeile steht, 
genügt Folgendes:

------------v----------
#!/usr/local/bin/ruby

datei = File.new("0.xml", "w+")

while zeile = gets
  if m = /<page nr="(\d+)">/.match(zeile)
    datei.close
    datei = File.new(m[1] + ".xml", "w+")
  end
  datei.print zeile
end
------------^-------------

Die folgende Variante geht davon aus, dass auch vor und hinter dem tag 
noch etwas stehen kann und auch in die richtige Datei kommen muß:

------------v------------
#!/usr/local/bin/ruby

datei = File.new("0.xml", "w+")

while zeile = gets
  if m = /<page nr="(\d+)">/.match(zeile)
    datei.print m.pre_match
    datei.close
    datei = File.new(m[1] + ".xml", "w+")
    datei.print m[0]
    datei.print m.post_match
  else
    datei.print zeile
  end
end
-----------^------------

(Aufruf:  

ruby  seitenweise.rb  <  DATEINAME

von der shell oder DOS-Box).

Beide Varianten legen zuerst eine Datei "0.xml" zum Schreiben an, für 
den Fall, dass es auch vor dem ersten tag Text gibt, lesen dann den 
Text zeilenweise von der Standareingabe.

Sobald ein neues tag auftaucht, wird eine neue Datei mit der 
Seitenzahl als Name angelegt und in diese weitergeschrieben. (Die 
zweite Variante schreibt zuvor vor dem tag vorkommenden Text in die 
gerade offene Datei, und erst den Rest in die neue.) In beiden Fällen 
wird das tag mit in die Ausgabe geschrieben.

Mit herzlichen Grüßen

Hans Derkits



> Liebe TUSTEP-Gemeinde,
>
> in einer Datei sind Daten nach folgenden Schema geordnet:
>
> 8.1 | <page nr="3">
> 8.2 | Viel Text
> 8.3 | Viel Text
>
>
> 9.1 | <page nr="57">
> 9.1 | Noch viel mehr Text
>
> 10.1 | <page nr="63">
> 10.2 | Viel Text
>
> ...
>
> Es wäre hilfreich, wenn Tustep die Daten, die jeweils mit <page
> nr="n"> beginnen, in einer neuen Datei speichern könnte, wobei der
> Dateiname aus dem Wert der Seitenzahl bestehen soll, also z.B.
> 3.xml, 57.xml etc. Im Idealfall beginnt mit <page nr="n"> ein neuer
> Satz, also z.B. 8.1.
>
> Wir brauchen also wohl ein #ko.
>
> TUSTEP müßte
> die Zeichenfolge <<page nr="<>>/" suchen
> den Wert der Seitennummer auslesen, z.B.
> zf+ 1 |<<page nr="<>>/"|
> liv 1 i1 (an dieser Stelle Danke an Herrn Trauth)
>
> ggf. die aktuelle Satznummer auslesen
> den aktuellen Satz kopieren
> prüfen, ob eine Datei mit dem Namen i1.xml vorhanden ist
> Falls nein, eine neue permanente Datei anlegen
> den kopierten Satz einfügen
>
> und weitermachen bis Ende.
>
>
> Wer hat Zeit und Lust mir zu helfen?
>
> Liebe Grüße und vielen Dank im voraus
>
> Wolfram Brunschön.
>
> ------------------------------------------------------------
> Tustep-Liste at itug.de
> https://lists.uni-wuerzburg.de/mailman/listinfo/tustep-liste

-- 
Hans Derkits
hans.derkits at utanet.at



Mehr Informationen über die Mailingliste Tustep-Liste