Leseproblem bei ods File

Software besorgen und anwenden
Post Reply
Message
Author
muelleru

Leseproblem bei ods File

#1 Post by muelleru »

Ich habe folgendes Problem vielleicht hat jemand eine Lösung fü mich
http://de.openoffice.info/viewtopic.php?t=4600

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#2 Post by jochen »

Tscha... Wenn alle Stricke reissen, kannst Du immer noch die Datei entzippen und aus dem XML alle wichtigen Informationen als Text entnehmen. Eingebundene Pics sind ebenfalls im Archiv enthalten. Ohne Arbeit geht es dann wohl nicht ab, aber vielleicht kann man die meisten Daten noch retten. Ein

Code: Select all

mkdir rettung; cd rettung; unzip ../datei.sxw
legt alle Dateien im Verzeichnis "rettung" ab. Dort kannst Du Dir die content-xml dann mal näher anschauen. Vielleicht reicht es ja, dort eine Element/Attribut zu entfernen...?

Jochen
Die grösste Lüge der EDV? "Mal eben..."

muelleru

Danke für den Tipp aber

#3 Post by muelleru »

Danke für den Tipp aber weist du wie ich aus den content.xml dezimalzahlen heraus bekomme.

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#4 Post by jochen »

Hi,

die Frage habe ich nicht ganz verstanden. Möchtest Du
  • in der Datei vorkommende Dezimalzahlen löschen, weil sie OOo.org in der aktuellen Version scheinbar nicht verarbeiten kann, oder
  • in der Datei vorkommende Zahlen extrahieren, damit Du sie in einem neuen Dokument mittels Copy'n'Paste (oder so) übernehmen kannst?
Im ersteren Falle müsste es jeder x-beliebige Editor tun, im zweiten eigentlich auch :-). Wenn es sich um eine grosse, nur schwer von Hand zu bearbeitende Datenmenge handelt, müsstest Du schon mal einen Auszug posten, dann könnte man vielleicht ein Skriptchen zum extrahieren basteln. Da das alles XML ist, wäre vielleicht auch was Interessantes mit einem XML-Parser machbar, aber in dem Bereich kenne ich mich leider nicht aus.

Wenn Du die content.xml geändert hast, sollte ein Zusammenpacken der Dateien mittels zip wieder ein .sxw-Dokument erzeigen - denke ich.

Jochen
Die grösste Lüge der EDV? "Mal eben..."

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#5 Post by jochen »

So, muelleru hat mir weitere Infos zukommen lassen. Das Problem ist gelöst! :-)

Ursache: Die alte Version hat fälschlicherweise das Attribut mit Wert xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" in manchen Tags mehrfach gesetzt. Das betrifft sowohl die Datei content.xml als auch die styles.xml, die beide in der .ods-Datei stecken, die wiederum nichts weiter als ein Zip-Archiv ist.

Lösung: Die überflüssigen Attribute aus den beiden Dateien entfernen. Dazu geht wie folgt vor:
  1. Die havarierte Datei in einem Arbeitsverzeichnis entpacken.

    Code: Select all

    mkdir rettung
    cd rettung
    unzip ../kaputt.ods
    
  2. Jetzt liegen die Dateien content.xml und styles.xml im Verzeichnis rettung vor. Um sie zu reparieren, verwendet man folgendes Skript:

    Code: Select all

    #!/bin/bash
    
    # Skript: repair-ods.sh
    
    sed 's/>/&\n/g' <$1 | \
    gawk '
    /xmlns&#58;fo="urn&#58;oasis&#58;names&#58;tc&#58;opendocument&#58;xmlns&#58;xsl-fo-compatible&#58;1.0"/ &#123;
            zeile = $0
            neuezeile = gensub &#40;/ xmlns&#58;fo="urn&#58;oasis&#58;names&#58;tc&#58;opendocument&#58;xmlns&#58;xsl-fo-compatible&#58;1.0"/,"",2,zeile&#41;
            while &#40;zeile != neuezeile&#41; &#123;
                    zeile = neuezeile
                    neuezeile = gensub &#40;/ xmlns&#58;fo="urn&#58;oasis&#58;names&#58;tc&#58;opendocument&#58;xmlns&#58;xsl-fo-compatible&#58;1.0"/,"",2,zeile&#41;
            &#125;
            print zeile
            next
    &#125;
    &#123;print&#125;' | \
    tr -d '\012' | \
    sed 's/>/&\n/1' > $1.new
    
    Dieses Skript speichert man unter dem Namen repair-ods.sh und macht es aufrufbar und auffindbar; die Aufrufe lauten dann

    Code: Select all

    repair-ods.sh content.xml
    repair-ods.sh styles.xml
    Damit erzeugt man die Dateien content.xml.new und styles.xml.new.
  3. Vorsichtige Naturen kopieren die Original-Dateien zur Seite (aber sie sind ja notfalls noch im Archiv). Danach überschreibt man die alten Dateien mit ihren reparierten Gegenstücken:

    Code: Select all

    mv content.xml.new content.xml
    mv styles.xml.new styles.xml
  4. Schon fast fertig. Das reparierte Dokument muss jetzt wieder zusammengezippt werden.

    Code: Select all

    zip -r - . > ../repariert.ods
Hinterher das Aufräumen nicht vergessen! :-)

<EDIT>Tipp: Übernehmt das Skript/die Kommandos mittels Copy'n'Paste, ansonsten dürfte mit hoher Wahrscheinlichkeit irgendwas schiefgehen...

Die Lösung ist recht linux-spezifisch; auch auf Solaris könnte es Probleme geben, wenn der freundliche Admin nicht den gawk installiert hat. Der Standard-awk kennt m.E. die Funktion gensub nicht.

Windows-Anwender mit diesem Problem können diese Lösung entweder zum Anlass nehmen, eine KNOPPIX auszuprobieren oder einen freundlichen Linux-User in der näheren Umgebung um Hilfe bitten.</EDIT>

Viel Erfolg beim Reparieren!

Jochen
Die grösste Lüge der EDV? "Mal eben..."

Clio
Posts: 122
Joined: 17. Sep 2004 12:49
Location: Bochum

#6 Post by Clio »

......Respekt.......
Von Jochens Antworten bzw. Lösungen bin ich immer wieder beeindruckt.....Super....großes Lob....... :D
Viele Grüße von Clio

Post Reply