[NEWSboard IBMi Forum]
Seite 3 von 5 Erste ... 2 3 4 ... Letzte
  1. #25
    Registriert seit
    Jan 2005
    Beiträge
    90
    Hallo Anton,

    vielen Dank auch dir für den Hinweis der Zweckentfremdung.
    Ich versuche den Kunden auf eine Dateiausgabe zu bringen(damit funktioniert bereits alles).
    Allerdings beharrt er auf die Ausgabe über diesen Weg.
    Daher versuche ich hier zweigleisig zu fahren.
    Ich habe mir das Beispiel von Scott angesehen und erhalten beim Wandeln die Fehler, das u.a. scPattern nicht deklariert ist.
    Wenn i mir das Sample aus
    http://www.cottklement.com/qrpglesrc.redemo2
    ansehe, sehe ich hier auch keine Deklaration.
    Übersehe ich was?

    Schon jetzt allen vielen Dank für die Bemühungen.

  2. #26
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wichtig zu wissen ist, dass die Art des XML-Encoding in einem Header festgelegt wird. Alle Reader halten sich normalerweise dann daran, z.B.:

    < ?xml version="1.0" encoding="UTF-8"? >

    Gibst du also ASCII aus, musst du auch ASCII als Encoding angeben.
    Besser ist, hier ANSI (Codepage 1252) zu wählen, das Encoding ist dann "ISO-8859-1", wähle also beim iConv die Codepage 1252 aus.
    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

  3. #27
    Registriert seit
    Nov 2012
    Beiträge
    51
    Stimmt; das ist entweder in dem Copy drin oder Scott hat ausnahmsweise mal einen kleinen Fehler gemacht.
    Es kann aber nur ein Character-Feld sein.
    Aber davon mal abgesehen ist das Prototyping für iconv in dem Beispiel ganz offensichtlich anders als Deins und einzig und allein darum ging es mir.
    Viel Erfolg und viel Glück beim Kunden-Erziehen!

  4. #28
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nachtrag:
    Beide CCSID's sind natürlich falsch!
    Statt 813 nimm 1252, statt 037 nimm (wahrscheinlich) 273, das kommt darauf an, welche Quell-CCSID deine Daten haben!

    Wenn das Encoding tatsächlich UTF-8 sein soll, muss die pASCII-CCSID natürlich 1208 lauten.

    Eine XML-Ausgabe hat eigentlich kein BOM, da das Encoding über den Header festgelegt werden muss.
    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

  5. #29
    Registriert seit
    Jan 2005
    Beiträge
    90
    Habe jetzt folgendes Testprogramm mal aufgebaut:

    Code:
         H DEBUG DECEDIT('0,') DATEDIT(*DMY.) DFTACTGRP(*NO)                 
     
         D QtqCode_T       DS                  Qualified                     
         D  CCSID                        10I 0 Inz(0)                        
         D  CvtAlt                       10I 0 Inz(0)                        
         D  SubAlt                       10I 0 Inz(0)                        
         D  ShiftState                   10I 0 Inz(1)                        
         D  InLenOpt                     10I 0 Inz(0)                        
         D  MixDataErrorOpt...                                               
         D                               10I 0 Inz(0)                        
         D  Reserved                      8A   Inz(*ALLX'00')                
         D fromCCSID       DS                  LikeDS(QtqCode_T)             
         D toCCSID         DS                  LikeDS(QtqCode_T)             
         D iconv_t         DS                  Qualified INZ                 
         D  rtn_value                    10I 0                               
         D  cd                           10I 0 Dim(12)                       
         D                                                                   
         D QtqIConvOpen    PR                  ExtProc('QtqIconvOpen')       
         D                                     LikeDS(iconv_T)               
         D  toCCSID                            LikeDS(QtqCode_T)      
         D  fromCCSID                          LikeDS(QtqCode_T)      
     
     
         D hConv           DS                  LikeDS(iconv_T)        
         D                                     Inz(*LIKEDS)           
         D**                                                          
         D iconv           PR            10U 0 ExtProc('iconv')       
         D  hConv                              LikeDS(iconv_t) VALUE  
         D  pInBuff                        *   VALUE                  
         D  nInLen                         *   VALUE                  
         D  pOutBuff                       *   VALUE                  
         D  nOutLen                        *   VALUE                  
     
         D MyData          S             10A   Inz('ABCDEFG')         
         D pData           S               *   Inz                    
         D ppData          S               *   Inz(%addr(pData))      
         D nInLen          S             10I 0                        
         D nOutLen         S             10I 0                        
     
         D iconv_close     PR            10I 0 ExtProc('iconv_close')        
         D  hConv                              LikeDS(iconv_t) VALUE         
     
     
          /free                                                              
             fromCCSID.CCSID = 273;                                          
             toCCSID.CCSID = 1208;                                           
             hConv = *ALLX'00';                                              
             hConv = QtqIconvOpen(toCCSID:fromCCSID);                        
          /end-free                                                          
     
     
     
         C                   eval      nInLen = %len(%TrimR(mydata))         
         C                   eval      nOutLen = %size(mydata)               
         C                   eval      pData = %addr(myData)                 
         C                   callp     iconv(hConv : ppData : %addr(nInLen): 
         C                               ppData:%addr(nOutLen))              
     
         C                   callp     iconv_close(hConv)                    
         C                   MOVE      '1'           *INLR
    Als Ergebnis steht in der hconv ein Return-Wert von -1.
    Ich denke mal dass das ein Fehler ist?
    Aber was für einer?
    Folgendes erhalte ich in der DS-Anzeige von hConv:

    Code:
    > EVAL hConv                    
      HCONV.RTN_VALUE = -1          
      HCONV.CD(1) = 1077952576      
      HCONV.CD(2) = 1077952576      
      HCONV.CD(3) = 1077952576      
      HCONV.CD(4) = 0               
      HCONV.CD(5) = 208             
      HCONV.CD(6) = 8               
      HCONV.CD(7) = -2              
      HCONV.CD(8) = -2147483648     
      HCONV.CD(9) = 0               
      HCONV.CD(10) = -978493160     
      HCONV.CD(11) = 671093600      
      HCONV.CD(12) = 0
    Wenn ich das richtig verstanden habe und iconv sauber gelaufen ist, dann müsste der nInLen anschließend auf 0 stehen richtig?
    Habe ich noch etwas übersehen/falsch implementiert?

  6. #30
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Du kannst nicht 2 mal die selbe Adresse für iconv angeben.
    Die Konvertierung würde sonst vollkommen schieflaufen, wenn du von einem 1-Byte Code in einen 2-byte-Code convertierst.

    CCSID 1208 ist ein variabler 1-4-Byte-Code. Du musst also als Zielpuffer ein mindest 4-Mal längeres Feld angeben als das Quellfeld (auch wenn du z.zt. kein Chinesisch hast).
    Aber aus 4 * "Ü" werden z.B. 8 Bytes in UTF-8 erstellt.

    Aber nochmal:
    Wenn du für das Encoding (s.o.) in deiner XML-Ausgabe "ISO-8859-1" angibst, so kannst du sorglos in 1252 konvertieren.
    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. #31
    Registriert seit
    Jan 2005
    Beiträge
    90
    Hallo Fuerchau,

    das mit dem 1252 habe ich verstanden und will ich zum Ende hin dann nochmal testen.
    Aber erstmal würde mich interessieren, warum ein -1 als Value kommt.
    Ich habe jetzt einen weiteren Pointer aufgenommen und diesen übergeben.
    Was mir noch aufgefallen ist, ist das bereits nach dem Qtqiconvopen ein -1 enthalten ist.
    Gehört das so?

  8. #32
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nein.
    Ich habe mich mit diesem API auch noch nicht beschäftigt.
    Lieber ist mir das dazu passende OPM-API:
    Convert a Graphic Character String (CDRCVRT, QTQCVRT) API

    Das ist einfacher und funktioniert auch genauso schnell.
    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. #33
    Registriert seit
    Nov 2012
    Beiträge
    51
    Toschie, der Code funktioniert, Du hast nur vergessen, die DS fromCCSID und toCCSID richtig zu initialisieren, sprich, die "Inz(*LIKEDS)"
    hast Du sowohl bei fromCCSID und toCCSID vergessen. Wenn Du die beiden einbaust, kriegst Du kein -1 und er übersetzt Dein ABCDEFG auch.

  10. #34
    Registriert seit
    Jan 2005
    Beiträge
    90
    Zitat Zitat von Anton Gombkötö Beitrag anzeigen
    Toschie, der Code funktioniert, Du hast nur vergessen, die DS fromCCSID und toCCSID richtig zu initialisieren, sprich, die "Inz(*LIKEDS)"
    hast Du sowohl bei fromCCSID und toCCSID vergessen. Wenn Du die beiden einbaust, kriegst Du kein -1 und er übersetzt Dein ABCDEFG auch.
    Das mit dem -1 ist weg!
    Vielen Dank dafür.
    Allerdings scheint mir die Konvertierung nicht zu klappen.
    Gebe ich zum Beispiel anstatt ABCDEF die Werte
    ABCÜäFG aus, erhalte ich sowohl mit und ohne iConv die Ausgabe ABCš„FG

    @Fuerchau: Hast du ein gutes/kleines Sample für
    Convert a Graphic Character String (CDRCVRT, QTQCVRT) API

    Würde mir das Parallal dann auch noch gerne ansehen.
    Vielen Dank allen beteiligten und ein schönes Wochenende!

  11. #35
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nein, ein Beispiel steht mir im Moment leider nicht zur Verfügung.

    Wie kontrollierst du denn die Ausgabe nach iConv() ?

    Ein 'Ü' in 1252 entspricht x'DC'.
    Wenn du im Debugger den Inhalt Hex vergleichst, weißt du dass die Konvertierung funktioniert.
    Prüfst du über das Ziel-System, ist ggf. 1252 nicht korrekt.

    Aber nochmal:
    Stelle den obigen Header ".... Encoding="ISO-8859-1" ..." ein, damit ein XMLReader die daten korrekt interpretiert.

    Durch dein BOM erwartet der Reader ggf. UTF-8 und dann müsstest du halt in 1208 konvertieren.
    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. #36
    Registriert seit
    Jan 2005
    Beiträge
    90
    @Fuechau:
    Danke und ich habe dem Kunden bereits eine Datei mit iso geschickt zur Validierung.
    Diese wird aktuell noch geprüft.
    Da ich aber gerne wissen würde ob der Befehl grundsätzlich richtig implementiert wurde (für die Zukunft), hake ich halt nochmal nach.
    Also vor dem Durchlauf von
    PHP-Code:
    /free
    fromCCSID
    .CCSID 0;
    toCCSID.CCSID 1208;
    hConv = *ALLX'00';
    hConv QtqIconvOpen(toCCSID:fromCCSID);
    /
    end-free
    &#12288;
    &#12288;
    C    eval output = *Blanks
    C    
    eval nInLen = %len(%TrimR(mydata))
    C    eval nOutLen = %size(mydata)
    C    eval pData = %addr(myData)
    C    eval ppData = %addr(output)
    C    callp iconv(hConv pData : %addr(nInLen):
    C    ppData:%addr(nOutLen)) 
    Lautet in RDI der Hexwert von (MyData)
    ABCÜäFG -> C1C2C35AC0C6C7404040

    Und nach dem Durchlauf:
    (MyData)
    C1C2C35AC0C6C7404040

    Also unverändert.
    Der Wert in OUTPUT ist Blank.
    Ich hab da bestimmt noch n dummen Fehler -.-

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
  •