[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Sep 2004
    Beiträge
    142
    Hallo Michael

    Die APIs QDCXLATE und iconv stehen beispielsweise zur Verfügung. Oder Du kannst das CCSID-Konzept verwenden.

    Gruss

    Jan

  2. #2
    Registriert seit
    Aug 2004
    Beiträge
    923
    mh...
    besteht das Problem noch?

    Ich würde mir da einfach ein kleines Progrämmchen basteln und das über eine Programmladezeittabelle lösen.
    Sagt man doch so?
    Anbei mal ein kleiner Entwurf, aber Achtung! Ist erstens nicht lauffähig und zweitens nach Oldstyle programmiert sprich mit zwei einfachen eindimensionalen Tabellen.
    Und die Formatierung stimmt nicht.


    Aber ich denke, so ist es am verständlichsten.

    Also der Weg wäre dann:
    Inputstring Buchstabe für Buchstabe auseinander nehmen.
    Dann den Buchstaben in der Tabelle suchen.
    Mit dem gefundenen Platz den Wert (FoundVal) aus zweiter Tabelle holen.
    Fertig.

    Ist bestimmt schlechter Stil, aber da keiner antwortet ist der schlechteste Vorschlag besser als nix denke ich.

    kuempi

    PHP-Code:
         D InLen           S              10I 0 
         D InChar          S              1
         D Pos             S              5 P 0
         
         D ST1             S              1    DIM
    (134CTDATA PERRCD(1
         
    D ST2             S              2    DIM(134CTDATA PERRCD(1)


         
    C     DO            InLen     Pos
         C     
    EVAL          InChar = %SUBST(InString Pos :1)
         
    C                   EXSR      GETVAL
         C                   ENDDO
         
         C     GETVAL        BEGSR
         C                   Z
    -ADD     1             IDX               3 0
         C     InChar        LOOKUP    ST1
    (IDX)                              9595
         C                   MOVEL     ST2
    (IDX)      FoundVal
         C                   ENDSR 
    ** ST1
    a
    b
    c
    ....usw
    A
    B
    C
    ....usw
    ** ST2
    61
    62
    63
    ....usw
    41
    42
    43 

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Schön für die Mühe, aber ich denke QDCXLATE war schon das Richtige.

    Flexibler ist hier das Convert a Graphic Character String (CDRCVRT, QTQCVRT) API
    , da man keine TBL-Objekte mehr benötigt.
    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
    Sep 2004
    Beiträge
    142
    Hier ein kleines Beispiel mit QDCXLATE.

    Code:
     
     
    d Translate       PR                   ExtPgm('QDCXLATE')    
    d   Length                       5P 0  const                 
    d   Data                       640A    options(*varsize)     
    d   Table                       10A    const               
     
    d string           s           256a    
     
    /free
    Translate(256 : string : 'QASCII');   // EBCDIC -> ASCII   
    /end-free
    Die Tabelle QASCII ist in der Bibliothek QSYS vorhanden.

    Gruss

    Jan

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

    vielen Dank für die Hilfestellung.
    Nach einigem Kampf und Hilfe anderer Kollegen sind
    wir jetzt ein bischen weiter.
    Hier ist der bisherige Lösungsansatz
    PHP-Code:
    D Translate       PR                  EXTPGM('QDCXLATE'
    D  TLen                          5P 0 CONST              
    D  Buff                      32766A   OPTIONS(*VARSIZE)  
    D  Table                        10A   CONST 
    PHP-Code:
    c                   eval      #buff  ='Der Wolfgang ist super'  
    C                   callp     Translate(%len(%trim(#buff))      
    C                                            :#BUFF :'QTCPASC') 
                                                                    
    C/EXEC SQL                                                      
    c
    +  set  :xhex hex(trim(:#buff))                              
    C/END-EXEC 

    Gruß
    Michael

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    %trim ist soweit gefährlich, dass die Länge falsch berechnet wird, wenn Leerzeichen am Anfang stehen.
    %checkr(' ':MyVar) wäre die bessere Alternative, wenn Leerzeichen am Ende nicht übersetzt werden müssen.

    QDRCVRT ist insoweit besser, wenn verschiedene JOB-CCSID's relevant werden können und das Ziel ggf. Windows (1252) statt 850 wie in QTCPASC nötig sein sollte.
    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. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    %trim ist soweit gefährlich, dass die Länge falsch berechnet wird, wenn Leerzeichen am Anfang stehen.

    %checkr(' ':MyVar) wäre die bessere Alternative, wenn Leerzeichen am Ende nicht übersetzt werden müssen.
    ... ich würde %TrimR bevorzugen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. Ascii nach Hex konvertieren in RPG
    By TARASIK in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 14-01-08, 09:02
  2. CODE Designer
    By stoerfang in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 13-12-06, 11:22
  3. ASCII drucken
    By kug in forum NEWSboard Drucker
    Antworten: 4
    Letzter Beitrag: 23-09-06, 07:40
  4. Reference Code 10112410
    By Matthias.Hayn in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 08-05-06, 10:05
  5. Optimierung NEWSboard code syntax farbig darstellen
    By Burgy Zapp in forum Intern - Hilfe - Feedback - Tests-Forum
    Antworten: 0
    Letzter Beitrag: 07-05-04, 15:56

Berechtigungen

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