[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Dec 2009
    Beiträge
    314

    SQL - Formatierung und Datenonvertierung

    Hallo,
    ich sehe heute schon den Wald vor lauter Bäumen nicht. Ich habe ein kleines oder vielleicht auch größeres Problem.

    Mittels SQL ermittle ich mir einen Haufen Daten die ich dann ins IFS als UTF-8 .txt ablegen muss. Der generelle Ablauf dafür ist auch schon funktionsfähig.

    Jetzt habe ich nur noch ein Problem: ich habe gepackte numerische Felder 13,2 die ich in ein char 17 (13 vorkomma, 2 nachkomma, 1 stelle fürs vorzeichen und 1 stelle fürs komma)
    ausgeben muss. Irgendwie komme ich nicht hin.

    Ups habe vergessen natürlich ohne führende Nullen das ganze ausser bei 0,00 oder 0,12.

    Bitte um Hilfe.

    Und vielleicht weiss auch jemand von euch, wie ich dem UTF-8 ein BOM unterjubeln kann.
    Liebe Grüße aus Wien
    Andreas
    Andreas
    Ein AS/400 Dinosaurier since 1989

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Du willst also mit SQL einen gepackten Wert in eine alphanumerische Darstellung konvertieren und rechtsbündig ausrichten.
    Mit SQL nicht ganz trivial (zumindest nicht vor 7.2), da es so etwas wie einen EVALR wie in RPG nicht gibt. Ab 7.2 kann man die Funktion LPAD verwenden um einen Wert rechtsbündig auszurichten.

    Die SQL Lösung vor 7.2 sieht so aus:
    Code:
    Select Right(Space(17) concat VarChar(PackFld), 17) ... 
    From ...
    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

  3. #3
    Registriert seit
    Dec 2009
    Beiträge
    314
    Hallo Birgitta,

    vielen Dank, habe das ganze gerade ausprobiert funktioniert tadellos wie die meisten Deiner Lösungsansätze.

    Damit habe ich bis auf das BOM Problem alle meine Probleme auf einen Schlag gelöst.

    Als nochmals herzlichen Dank und liebe Grüße aus Wien und ein schönes Wochenende

    Andreas
    Andreas
    Ein AS/400 Dinosaurier since 1989

  4. #4
    Registriert seit
    Oct 2013
    Beiträge
    175
    Und das hast Du eigentlich auch nicht, da ein anständiges UTF-8 gar kein BOM braucht.
    http://de.wikipedia.org/wiki/Utf-8#Byte_Order_Mark

  5. #5
    Registriert seit
    Dec 2009
    Beiträge
    314
    Zitat Zitat von AG1965_2 Beitrag anzeigen
    Und das hast Du eigentlich auch nicht, da ein anständiges UTF-8 gar kein BOM braucht.
    http://de.wikipedia.org/wiki/Utf-8#Byte_Order_Mark
    Und was soll ich dazu jetzt antworten, ausser 1. der externe SW-Hersteller(mircosoft-batch-scripbts) verlangt es und 2. ich keine Chance habe das abzuwenden, da das Produkt nicht von der IT ausgesucht wurde, sondern von der betroffenen Fachabteilung.

    LG
    Andreas
    Andreas
    Ein AS/400 Dinosaurier since 1989

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von nico1964 Beitrag anzeigen
    Und vielleicht weiss auch jemand von euch, wie ich dem UTF-8 ein BOM unterjubeln kann.
    ... per Programm (da könnte vielleicht sogar schon ein Shell Script ausreichen)

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Dec 2009
    Beiträge
    314
    Zitat Zitat von BenderD Beitrag anzeigen
    ... per Programm (da könnte vielleicht sogar schon ein Shell Script ausreichen)

    D*B
    Danke für den Hinweis, würde das ja gerne mit einem Shell Script lösen, da ich aber ein alter COBOL-Programmierer (und das im wahrsten Sinne des Wortes) bin, schaut es mit meinen Shell Script-Kenntnissen nicht so gut aus. Da ich das jedoch für mehrere Dateien brauche, möchte ich nicht unbedingt ein COBOL-Programm schreiben, wo ich IFS-Einlese, das BOM reinpfrimmle und wieder ausgebe.
    Andreas
    Ein AS/400 Dinosaurier since 1989

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von nico1964 Beitrag anzeigen
    Da ich das jedoch für mehrere Dateien brauche, möchte ich nicht unbedingt ein COBOL-Programm schreiben, wo ich IFS-Einlese, das BOM reinpfrimmle und wieder ausgebe.
    ... das ist dem Programm doch egal, wie oft es aufgerufen wird, um am Anfang eines Streamfiles ein paar Bits umzuklopfen...

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Erzeuge eine IFS-Datei, die nur das BOM enthält.

    Per QSH CMD('cp bomdatei quelle ziel') werden diese dann zusammengeführt.
    Alternativ geht auch QSH CMD('cat BOMDatei >Ziel; cat Quelle >>Ziel;')
    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. #10
    Registriert seit
    Oct 2013
    Beiträge
    175
    ok, du wirst eine Datei mit den 3 Bytes x'EFBBBF' brauchen. Ich habe einfach eine leere Datei als "UTF8_BOM" im IFS gespeichert, sicherheitshalber mit
    Code:
    CHGATR OBJ('utf8_bom') ATR(*CCSID) VALUE(1208)
    auf die UTF-8-CCSID gesetzt.
    Die naheliegende Vermutung, einfach die beiden Dateien zusammen in eine neue zu kopieren:
    Code:
    QSH CMD('cat utf8_bom utf8_text > utf8_test2')
    erstellt leider eine gut gemeinte Datei mit CCSID 273, deren Inhalt ich mehr oder weniger lesen kann. Also ein Fehlschlag.

    Dann halt auf zweimal:
    Code:
    QSH CMD('cp  utf8_bom utf8_test')
    QSH CMD('cat utf8_text > utf8_test')
    CHGATR OBJ('utf8_test') ATR(*CCSID) VALUE(1208)
    Das Kopieren erstellt zwar eine Datei mit CCSID 819, das scheint aber nicht weiter zu stören, das Endergebnis scheint zu stimmen. Denn meine UTF8_TEXT enthält ein paar UTF-8-Umlaute, die in der fertigen Datei zu lesen sind.

  11. #11
    Registriert seit
    Dec 2009
    Beiträge
    314
    Zitat Zitat von AG1965_2 Beitrag anzeigen
    ok, du wirst eine Datei mit den 3 Bytes x'EFBBBF' brauchen. Ich habe einfach eine leere Datei als "UTF8_BOM" im IFS gespeichert, sicherheitshalber mit
    Code:
    CHGATR OBJ('utf8_bom') ATR(*CCSID) VALUE(1208)
    auf die UTF-8-CCSID gesetzt.
    Die naheliegende Vermutung, einfach die beiden Dateien zusammen in eine neue zu kopieren:
    Code:
    QSH CMD('cat utf8_bom utf8_text > utf8_test2')
    erstellt leider eine gut gemeinte Datei mit CCSID 273, deren Inhalt ich mehr oder weniger lesen kann. Also ein Fehlschlag.

    Dann halt auf zweimal:
    Code:
    QSH CMD('cp  utf8_bom utf8_test') 
    QSH CMD('cat utf8_text > utf8_test')   
    CHGATR OBJ('utf8_test') ATR(*CCSID) VALUE(1208)
    Das Kopieren erstellt zwar eine Datei mit CCSID 819, das scheint aber nicht weiter zu stören, das Endergebnis scheint zu stimmen. Denn meine UTF8_TEXT enthält ein paar UTF-8-Umlaute, die in der fertigen Datei zu lesen sind.
    Nach dem Erstellen von der nur BOM-Datei mit CCSID 1208 und dem anschliessenden Kopieren in der QSHELL, habe ich eine Kopie der BOM-Datei.

    Wenn ich dann meine Datei xxxx.txt mit CCSID mit dem 2. QSHELL Befehl dranhänge, habe ich eine UTF-8 ohne BOM.

    Was mich des weiteren ein wenig stutzig hierbei macht ist der Umstand, das meinen Datei xxxx.txt eine Größe von 3696 KB hat und die Datei inclusive dem nicht vorhandenen BOM nur 3688.

    Ich glaub ich steh am schlauch.
    Andreas
    Andreas
    Ein AS/400 Dinosaurier since 1989

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Für das Anhängen benötigst du 2 ">":

    'cat utf8_text >> utf8_test'
    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

Similar Threads

  1. Frage zur Formatierung mit Funktion DIGITS in QRY
    By hs in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 14-02-02, 06:30

Berechtigungen

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