[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Apr 2002
    Beiträge
    32

    Red face CPYTOPCD und tschechischen Sonderzeichen

    Hallo zusammen,

    Wiedereinmal ist in Eurem Forum (was ich selten benutze aber total gut finde) das Thema von CPYTOPCD mit tschechischen Sonderzeichen.

    Wir betreiben eine AS/400 mit Relase V5R3
    und dem CCSID=500.
    Unser Werk in Tschechien gibt Daten mit tschechischen Sonderzeichen ein unter Client Access mit Host-Codepage=870 (Tschechisch)

    Wir wollen diese Daten nun mit CPYTOPCD in ein Textfile exportieren und die Sonderzeichen werden falsch dargestellt. Auch die Verwendung einer Umsetzungstabelle (z.B. TRNTBL(*LIBL/Q500A05A5U) hat nicht funktioniert.

    Deshalb meine Frage:
    Was für eine Umsetzungstabelle sollte verwendet werden ?
    Wie heisst die Umsetzungstabelle für ISO8859-2 oder Latin-2 ?

  2. #2
    Registriert seit
    Jan 2001
    Beiträge
    850
    Hallo,

    welche Umsetztabellen nötig sind kann ich gerade nicht sagen, aber
    probiere mal die Befehele
    CPYTOSTMF
    CPYTOIMPF

    die alten QDLS Belfehle sollte man ablösen.

    Gruß
    Michael

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Wenn die Datenbank auf CCSID 500 steht, so hast du leider Pech gehabt.
    Einen direkten Weg gibt es da leider nicht, da CCSID 500 und 870 nicht kompatibel sind.

    Hier hilft leider nur ein Umweg über SQL:
    Erstelle eine neue Tabelle mit CCSID 870.

    Kopiere die Daten von der CCSID 500 per SQL und caste jedes Feld einzeln:

    cast(cast(Feld as char(nn) ccsid 65535) as char(nn) ccsid 870)

    insert into NeueTabelle
    select cast1, cast2, ....
    from AlteTabelle

    Anschließend kannst du per CPYTOIMPF mit ZielCCSID 1251 die Daten ins IFS (nicht QDLS!) ausgeben.

    Solltest du die Daten noch in QDLS benötigen, kannst du diese anschliessend noch mit qshell cmd('cp ...) kopieren.

    Ein CPY geht leider nicht, das QDLS keine CCSID unterstützt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Apr 2002
    Beiträge
    32
    Vielen Dank für die schnelle Antwort.

    Ich habe versucht in einer Testumgebung die Schritte von Fuerchau nachzuvollziehen.

    So richtig funktioniert es aber nicht.

    Ich bin nicht so vertraut mit dem SQL und der "cast" Anweisung und verstehe eigentlich auch nicht, wieso einzelne Felder angesprochen werden müssen.

    Kann die Umsetzung von CCSID 500 auf 870 nicht über die ganze Tabelle erfolgen ?

    Bei meinem Test versuche ich die Tabelle mit CCSID 870 und dem Befehl CPYTOIMPF die Daten in das IFS zu kopieren mit folgendem Befehl:
    CPYTOIMPF FROMFILE(TESTLIB/TESTFILE) +
    TOSTMF('/MXX/BYYY/Test.txt') +
    MBROPT(*REPLACE) STMFCODPAG(1251)
    RCDDLM(*CRLF) DTAFMT(*FIXED)

    Leider gibt es folgende Abruch-Nachricht:
    Nachricht . . . : Zeichenumsetzung zwischen CCSID 870 und CCSID 1251
    ungültig.
    Ursache . . . . : Es wurde versucht, eine Zeichen- oder Grafikumsetzung für
    nicht verträgliche Daten durchzuführen. Eine Umsetzung zwischen CCSID 870
    und CCSID 1251 ist nicht definiert.
    Ist eine CCSID 65535, ist die andere CCSID eine Grafik-CCSID. Die
    Umsetzung zwischen der CCSID 65535 und einer Grafik-CCSID ist nicht definiert.

    Woran kann das liegen ?

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Entschuldigung, 1251 ist kyrillisch, 1250 ist Latin-2 passend zu 870 .

    Aber wie du siehst, lehnt die AS/400 eine Konvertierung ab, wenn es nicht passt.

    Man kann zwar eine FROMCCSID angeben, die gilt aber nur, wenn die Datei *HEX hat.
    Da deine Quelle aber 500 ist, musst du eben per SQL erst in 870 konvertieren.

    Nun zum generellen Problem:
    Vom Terminal mit 870 über den Job (500 oder 65535) zur DB (500) erfolgt keine Umsetzung.
    Würdest du den Job auf 870 passend zum Terminal setzen, könntest du die Datei nicht öffnen, da 500 zu 870 nicht kompatibel ist.
    Somit sind die Daten in der DB als 500 markiert.
    Codewandlung findet nur statt, wenn es passt und 65535 nicht im Spiel ist.

    Durch dein Umkopieren und den doppelcast werden die Daten nicht gewandelt (inner Cast auf 65535) und beim Insert in die 870-Tabelle auch nicht (outer Cast von 65535 auf 870).

    Somit kann der CPYTOIMPF nun von 870 in 1250 ausgeben.

    In Windows mit 1252 kannst du dir die Daten dann leider nicht ansehen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Apr 2002
    Beiträge
    32
    Hallo,
    Danke für die ZusatzInfo.

    Doch noch eine Frage dazu:
    Kann ich aus einem DDS mit CRTPF eine Tabelle erstellen mit dem CCSID=870 ?
    (Der Befehl verlangt immer eine Satzlänge RCDLEN, aber dann darf es wieder nicht eine DDS-Quelle sein)

Similar Threads

  1. Antworten: 4
    Letzter Beitrag: 11-08-06, 11:26
  2. Textdatei im IFS hat Sonderzeichen
    By TARASIK in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 29-06-06, 15:59
  3. Umlaute werden im IFS zu Sonderzeichen
    By y-tom in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 29-05-06, 14:31
  4. Dauerthema Sonderzeichen
    By Liebhoff in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 02-11-05, 09:35
  5. CZ Sonderzeichen auf Printer über CA
    By Markus Gruebl in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 21-09-01, 09:24

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •