[NEWSboard IBMi Forum]
Seite 4 von 5 Erste ... 3 4 5 Letzte
  1. #37
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Die fromCCSID.CCSID sollte nicht 0 sein.
    Da 0 ggf. als "JOB-CCSID" interpretiert wird, sollte der Job nicht auf *HEX (65535) stehen.
    Wenn deine DB die CCSID 273 hat bzw. deine Terminals 1141 haben, nimm als fromCCSID eben 273/1141.
    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

  2. #38
    Registriert seit
    Jan 2005
    Beiträge
    90
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Die fromCCSID.CCSID sollte nicht 0 sein.
    Da 0 ggf. als "JOB-CCSID" interpretiert wird, sollte der Job nicht auf *HEX (65535) stehen.
    Wenn deine DB die CCSID 273 hat bzw. deine Terminals 1141 haben, nimm als fromCCSID eben 273/1141.
    Habe ich alles versucht.
    Bleibt alles unverändert.
    Ich habe gestern Abend noch ein anderes Sample gefunden:

    Code:
    * Quick & Dirty iconv() Demo
    *
    *
    H DFTACTGRP(*NO) ACTGRP(*NEW)
    H BNDDIR('QC2LE')
    d iconv_t DSbased(prototype_only)
    d return_value10I 0
    d cd 10I 0dim(12)
    d from DS
    d from_CCSID 10I 0
    d from_ConvAlt 10I 0inz(0)
    d from_SubsAlt 10I 0inz(0)
    d from_ShiftAlt10I 0inz(1)
    d from_InpLenOp10I 0inz(0)
    d from_ErrorOpt10I 0inz(1)
    D from_Reserved8Ainz(*ALLx'00')
    d to DS
    d to_CCSID 10I 0
    d to_ConvAlt 10I 0inz(0)
    d to_SubsAlt 10I 0inz(0)
    d to_ShiftAlt 10I 0inz(1)
    d to_InpLenOp 10I 0inz(0)
    d to_ErrorOpt 10I 0inz(1)
    D to_Reserved 8Ainz(*ALLx'00')
    d QtqIconvOpen PRextproc('QtqIconvOpen')
    dlike(iconv_t)
    d tocode like(to) const
    d fromcode like(from) const
    d iconv PR10U 0extproc('iconv')
    d cd like(iconv_t) value
    d inbuf *
    d inbytesleft 10U 0
    d outbuf *
    d outbytesleft10U 0
    D iconv_close PR10I 0extproc('iconv_close')
    D cd like(iconv_t) value
    *
    * MI function to get a hex dump of data in memory
    * (target will be twice the size of the source)
    *
    D HexDump PRExtProc('cvthc')
    D target 32767Aoptions(*varsize)
    D src_bits 32767Aoptions(*varsize) const
    D length 10I 0value
    D ic dslikeds(iconv_t)
    D Data s 12Avarying
    D p_Data s *
    D DataLen s 10U 0
    D HexData s 24A
    *
    * 1252 = MS Windows, US ASCII
    * 0 = special value meaning "current job's CCSID"
    *
    ceval to_CCSID = 1208
    ceval from_CCSID = 273
     
    *
    * initialize iconv() API
    *
    ceval ic = QtqIconvOpen(to: from)
    cif ic.return_value = -1
    ** ... FIXME: handle error ...
    cendif
     
    *
    * Convert "hello world" to Windows ASCII
    *
    *
    ceval Data = 'ABCÜäFG'
    ceval p_Data = %addr(Data) + 2
    ceval DataLen = %len(Data)
    cif iconv(ic: p_Data: DataLen:
    cp_Data: DataLen) = -1
    ** ... FIXME: handle error ...
    cendif
    *
    * Create hex dump to test conversion
    *
    ccallp HexDump( HexData
    c: Data
    c: %size(HexData))
    cdsply HexData
     
    *
    * call iconv_close() to free up resources when done
    *
    ccallp iconv_close(ic)
    ceval *inlr = *on
    
    Jedoch wandelt mir dieses Ding alles um.
    Das Ergebnis von:
    'ABCÜäFG' ->
    0007C1C2C35AC0C6C70000000000
    ist
    â{CæCw -> 0007414243C39CC3A60000000000

  3. #39
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das API unterstützt keine varying-Felder!
    Die Länge der Ein-/Ausgabe wird ja in separaten Feldern übergeben.
    Verwende bitte Fixed-Charfelder!

    Du kannst es ja am Ergebnis sehen, dass nur die ersten 7 Stellen umgewandelt wurden.
    Die x'0007' ist die Längeninformation des Varying-Feldes.
    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. #40
    Registriert seit
    Jan 2005
    Beiträge
    90
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Das API unterstützt keine varying-Felder!
    Die Länge der Ein-/Ausgabe wird ja in separaten Feldern übergeben.
    Verwende bitte Fixed-Charfelder!

    Du kannst es ja am Ergebnis sehen, dass nur die ersten 7 Stellen umgewandelt wurden.
    Die x'0007' ist die Längeninformation des Varying-Feldes.
    Ok Danke.
    Bekomme als Ergebnis jetzt:
    AB{}Uãå ->
    C1C243DCE4464720....

    Ich habe das Feld Data jetzt mit 200A definiert.

  5. #41
    Registriert seit
    Nov 2012
    Beiträge
    51

    Na dann passt ja alles.

    @Toschie: Aus meiner Sicht solltest Du nun eigentlich glücklich sein.
    Was meinst mit aber mit "jedoch" und "alles"?
    So soll es doch sein; Du schreibst das ja nun sicherlich in eine *USERASCII Spool-Datei.

    @Fuerchau: das macht er ja schön, 2 Bytes zum Pointer dazugerechnet, damit er am Datenteil steht, und die Länge mit %LEN richtig initialisiert.
    Noch schöner, sozusagen der Telemark, wäre nur noch die Initialisierung des Pointers mit
    PHP-Code:
    pData = %ADDR(Data:*DATA); 

  6. #42
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wenn das Zielergebnis aber länger als die aktuelle Längenangabe ist, kommt man leider an die Zeichen hinter der Länge nur über eine Fixed-Char-Variable mit Based(Pointer) dran, da der normale Zugriff immer die Länge berücksichtigt. Bei CCSID 13488 wird das am deutlichsten.

    Das "Ergebnis" ist allerdings immer noch EBCDIC und nicht UTF-8!
    Also irgendwas stimmt da immer noch nicht mit der API-Versorgung.
    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

  7. #43
    Registriert seit
    Nov 2012
    Beiträge
    51

    Ich mach das aber so.

    Und rechne mir die Länge aus (zur Verfügung gestellter Speicherplatz - von iconv übrig gelassener Speicherplatz). Das setze ich dann mit %LEN(variable) = ermittelter Wert.

    Ja, das hatte er schon mal besser. :-)

  8. #44
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Also hier mal ein simples Beispiel für das API CDRCVRT:

    Code:
    d CDRCVRT         pr                  extpgm('CDRCVRT')       
    d   CCSID1                      10I 0                         
    d   ST1                         10I 0                         
    d   S1                       32766    options(*varsize)       
    d   L1                          10I 0                         
    d   CCSID2                      10I 0                         
    d   ST2                         10I 0                         
    d   GCCASN                      10I 0                         
    d   L2                          10I 0                         
    d   S2                       32766    options(*varsize)       
    d   L3                          10I 0                         
    d   L4                          10I 0                         
    d   FB                          12                            
     
    d ConvParm        ds                                      
    d   CCSID1                      10I 0 inz(273)            
    d   ST1                         10I 0 inz(0)              
    d   S1                         100    inz                 
    d   L1                          10I 0 inz(%size(S1))      
    d   CCSID2                      10I 0 inz(1208)           
    d   ST2                         10I 0 inz(0)              
    d   GCCASN                      10I 0 inz(0)              
    d   L2                          10I 0 inz(%size(S2))      
    d   S2                         100    inz                 
    d   L3                          10I 0 inz                 
    d   L4                          10I 0 inz                 
    d   FB                          12                        
    d   FBCodes                     10I 0 overlay(FB) dim(3)  
     
    c/free             
        S1='ABCÄä';    
        L1 = 5;        
        CDRCVRT(       
             CCSID1    
            :ST1       
            :S1        
            :L1        
            :CCSID2    
            :ST2       
            :GCCASN    
            :L2        
            :S2        
            :L3        
            :L4        
            :FB        
        );             
        return;        
     /end-free
    S2 enthält den UTF8-Code und L3 dann die Länge.
    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

  9. #45
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ich bekomme allerding iConv auch nicht zum Arbeiten.
    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

  10. #46
    Registriert seit
    Nov 2012
    Beiträge
    51

    Hm, ich kann keinen Fehler an Deinem Code entdecken.

    Vielleicht postest Du ihn mal? ;-)

  11. #47
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wen meinst du jetzt?
    das 'CDRCVRT' funktioniert, allerdings komme ich auch beim C-API 'iconv' zu keinem Ergebnis.
    Allerdings reicht mir ja das OPM-API .
    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

  12. #48
    Registriert seit
    Nov 2012
    Beiträge
    51

    Ich hatte schon Dich gemeint.

    Wär' ja gelacht, wenn man das nicht zum Laufen brächte.
    Naja, aber irgendeinen Grund muss es ja geben, warum das alle verwenden und nicht das 'CDRCVRT'. (Von dem ich, ich gestehe, noch nie vorher was gehört hatte.)
    Ich nehme an, es gibt einen Performancevorteil bei iconv, wenn man viel übersetzt.

Similar Threads

  1. XML: <?XML version=... ?> und <!DOCTYPE ... >
    By VolkerGrebner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-02-07, 14:38
  2. Webservices, SOAP, XML und Labeldruck
    By vige1000 in forum NEWSboard Linux
    Antworten: 4
    Letzter Beitrag: 21-12-06, 11:56
  3. MCH3402 + Spool
    By Robi in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 14-12-06, 11:12
  4. XML zu einem Port Senden
    By Weki in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 11-09-06, 13:31
  5. Spool -> PDF benötigte Lizenzprogramme
    By cseitz in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 20-06-06, 14:40

Berechtigungen

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