Problem mit sed und UTF-16-formatierter Datei

Diskutiere mit über: Problem mit sed und UTF-16-formatierter Datei im Mac OS X - Unix & Terminal Forum

  1. berland

    berland Thread Starter MacUser Mitglied

    Beiträge:
    129
    Zustimmungen:
    1
    Registriert seit:
    27.06.2004
    Hallo,

    könnte mir bitte jemand bei folgendem Problem behilflich sein. Die Situation ist die folgende.

    Ich habe eine Tabelle (Filemaker) mit Vokabeln, die ich in eine kommagetrennte (CSV-)Datei exportieren möchte, um sie in ein anderes Programm (jMemorize) zu importieren.

    Da jMemorize nur 2 Spalten zulässt (Frontside und Flipside), ich aber Informationen aus 3 Spalten in FM verwenden muss, möchte ich 2 der Spalten in eine einzige zusammenführen.

    Ich kenne keine Möglichkeit dies in Filemaker selbst zu erreichen (und ich plane auch möglichst bald zu MySQL zu migrieren, sodass eine Filemaker-interne Lösung zwar sehr hilfreich, aber nicht perfekt wäre).

    Ich versuche nun, die exportierte CSV-Datei mit sed zu bearbeiten, das aber offenbar ein großes Problem mit den UTF-16-formatierten Dateien oder den chinesischen Schriftzeichen hat. UTF-16 ist das einzige Format, das beim Export aus FM die chinesischen Schrifzeichen und die speziellen Buchstaben der Umschrift erhält.

    Gibt es Hoffnung, sed mit diesen Dateien zu verwenden? Ich habe sed niemals vorher benutzt und ich bin fast sicher, irgendetwas falsch zu machen.

    Die Manipulation, die ich mit sed erreichen möchte, ist eigentlich sehr einfach, aber leider nicht einfach genug, um sie in einem Texteditor durchzuführen. Aber vielleicht gibt es auch hier einen Lösungsweg mit dem richtigen Texteditor.

    Um das herauszufinden, gebe ich im Folgenden ein Beispiel der Aufgabe. Ich hoffe, dass Chinesisch bei jedem dargestellt wird.

    Exportierte CSV-Datei
    Code:
    "历史系","lìshǐxì","History Department","1"
    "打算","dǎsuàn","to be going to, to plan; plan","1"
    "进修","jìnxiū","to engage in advanced studies","1"
    "入系","rù xì","to be enrolled into a department","1"
    Erwünschte Änderung
    Code:
    "历史系	
    
    
    lìshǐxì","History Department","1"
    "打算	
    
    
    dǎsuàn","to be going to, to plan; plan","1"
    "进修	
    
    
    jìnxiū","to engage in advanced studies","1"
    "入系	
    
    
    rù xì","to be enrolled into a department","1"
    Es soll also bloß das erste "," (inkl. der Klammern) durch einen Zeilenumbruch, TAB o.ä. ersetzt werden.

    Diese Änderung ist mir in einem Texteditor nur semi-automatisch möglich, da nur das erste der mehrfach vorkommenden Zeichenkombination ersetzt werden soll.


    Kann bitte jemand versuchen mir weiterzuhelfen.
    Vielen Dank
     
  2. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Dürfte nicht ganz einfach werden.
    Ein Problem dabei ist, dass das Terminal UTF-16 gar nicht unterstützt.

    Eine Lösung könnte u.U. ein Texteditor sein, der einerseits UTF-16 und andereseits globales Ersetzten mir regulären Ausdrücken unterstützt.
    Evtl. geht's mit vim als grafische Anwendung kompiliert.
     
  3. Lor-Olli

    Lor-Olli MacUser Mitglied

    Beiträge:
    6.634
    Medien:
    6
    Zustimmungen:
    989
    Registriert seit:
    24.04.2004
    wenn du die Möglichkeit hast Excel zu verwenden, exportierst du die Filemaker Datei nach Excel (alle Spalten unverändert lassen). Es gibt dann eine Excel Erweiterung die nennt sich "Mac Exel Expander", die eine Textmanipulation zulässt mit der man mehrere Spalten zu einer zusammenfassen kann (Combine Cell Content). Ich habe so genau dein Problem lösen können, eine Datei mit 5 Spalten in eine Datei mit zwei Spalten umgewandelt, und als CSV Datei exportiert. Musste noch einige weitere Textmanipulationen vornehmen, für die in meinem Fall Word ganz hilfreich war. (Komma durch Tab, Semikolon durch Zeilenschaltung ersetzen)
     
  4. pseudogc

    pseudogc MacUser Mitglied

    Beiträge:
    702
    Zustimmungen:
    81
    Registriert seit:
    19.12.2005
    oder mit awk *?*

    geneigte Leser,

    habe eben mal das Beispiel in eine Textdatei ("test.dat") kopiert. Mit:

    awk '{FS=",";print $2,$3,$4,$1}' test.dat

    im Terminal kriege ich als Ausgabe:

    "dǎsuàn" "to be going to to plan; plan" "打算"
    "jìnxiū" "to engage in advanced studies" "1" "进修"
    "rù xì" "to be enrolled into a department" "1" "入系"

    das Ganze in eine Datei umgeleitet wuerde Dir reichen?

    cheers,

    pseudogc


    edit: aaah, gerade habe ich gesehen, dass Du ja was anderes willst - also das Skript erweitern und ein "newline" mit eingebaut… so was passiert ganz klar wenn man halt der Sprache nicht maechtig ist und ubernaechtig postings liest ;)

    awk '{FS=",";print $1"\r";print $2"," $3","$4}' test.dat >Neuedatei.dat

    allerdings braucht es da noch eine Leerzeile zu Beginn der Deiner Datei - und einen Preis fuer das schoenste awk-Skript gewinnt das auch nicht, macht aber was Du willst.
     
    Zuletzt bearbeitet: 07.03.2007
  5. winkelmr

    winkelmr MacUser Mitglied

    Beiträge:
    65
    Zustimmungen:
    1
    Registriert seit:
    08.02.2007
    Der fehlenden UTF-Unterstützung des Terminals ist leicht abhilfe zu schaffen: Einfach eine aktuelle Version der GNU bash runterladen (bourne again shell), kompilieren (./configure, make, make install), das Terminal auf UTF8 stellen und die Umwandlung in Escapesequenzen abschalten. Fertig.
    Es heißt zwar immer man käme am Mac ums kompilieren herum, jedoch ist spätestens wenn man Umlaute ins Terminal bzw. die GNU-Tools/Editoren bekommen möchte genau jenes gefragt. Schade, dass Apple seinem Betriebssystem Steinzeit-Versionen von bash, gnutools, vim, nano etc. beilegt, die nicht Unicode-fest sind. Erst recht, wenn man bedenkt, wie schön Unicode-basierend der Rest des Systems ist.
     
  6. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Mit den Umlauten habe ich keine Probleme.
    Nur die UTF-16 Zeichen geh'n bei mir im Terminal nicht.

    Wäre mal interessant, wie pseudogc das schafft.
     
  7. pseudogc

    pseudogc MacUser Mitglied

    Beiträge:
    702
    Zustimmungen:
    81
    Registriert seit:
    19.12.2005
    geneigte Leser,

    der Test fand auf einem MacOSX 10.3.x-Rechner in der tcsh statt – Standard Apple-Installation. Ich probiere das spaeter gern nochmal unter 10.4.x.. Auf den zweiten Blick kann es natuerlich sein, das die Zeichen im obigen Beispiel auch mit UTF-8 abgedeckt werden *?*
    Perl 5.8.x sollte das im uebrigen doch auch problemlos koennen…

    cheers,

    pseudogc

    n.b.: was fuer Umlaute?
     
  8. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Danke für die Info.
    Mich wundert es, da die tcsh als nicht 8-bit fest gilt.
     
  9. pseudogc

    pseudogc MacUser Mitglied

    Beiträge:
    702
    Zustimmungen:
    81
    Registriert seit:
    19.12.2005
    geneigte Leser,

    ohne jetzt unbedingt Haare spalten zu wollen - die Shell spielt doch hier nur eine untergeordnete Rolle, all die weil eine Ausgabe via stdIO ja eigentlich gar nicht gewuenscht ist, oder? (Funktioniert allerdings zumindest fuer das Beispiel.) Ich habe die Beispielzeilen halt im Browser kopiert (Camino 1.0.3) und in TextWrangler eine Textdatei angelegt (TextWrangler 2.1.1; UTF-8 kodiert) und dann das Skript ausgefuehrt. Wenn ich das richtig sehe, dann ist beispielsweise awk schon eine ganze Weile "8-bit clean" und daher sollte die Ausgabe eigentlich funktionieren - solange die Field- und Record-Separatoren als ASCII-Zeichen vorliegen (und das ist hier ja der Fall.)

    Fuer den Interessierten findet sich hier im uebrigen eine nawk-version die Unicode vollstaendig unterstuetzen soll.

    cheers,

    pseudogc
     
  10. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    ohne Haare spalten zu wollen (;)):
    Du schriebst oben "im Terminal kriege ich als Ausgabe: ..."
    Das war's was mich gewundert hat, denn für die Ausgabe im Terminal sind zum einen die Shell und zum anderen das Programm Terminal zuständig. Beide können kein UTF-16 (okay - schint mit UTF-8, was von terminal unterstützt wird, auch zu gehen), tcsh kann noch nicht einmal UTF-8 oder Latin1
     
Die Seite wird geladen...
Ähnliche Themen - Problem sed UTF Forum Datum
Problem bei der Ausführung von Perl Skripten über SSH Mac OS X - Unix & Terminal 22.10.2013
MacPorts Problem Mac OS X - Unix & Terminal 06.10.2013
XNEST funktioniert - aber Wirrwarr bei Zeichenkodierung / Keybord mapping Problem Mac OS X - Unix & Terminal 05.10.2013
Problem mit PostgreSQL und PostGIS Mac OS X - Unix & Terminal 09.09.2013
Problem mit Leerzeichen im Namen Mac OS X - Unix & Terminal 12.02.2013

Diese Seite empfehlen

Benutzerdefinierte Suche