[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.809
    CPYTOIMPF ... RMVBLANK(*LEADING/*TRAILING/*BOTH)

    Leider gibt es für die NULL-Behandlung keinen Standard.
    NULL wird von SQL nur dann gesetzt, wenn das Feld
    a) im Insert nicht erwähnt wird und NULL erlaubt ist
    b) im Insert eine NULL-Indikator auch auf -1 gesetzt ist

    Im RPG mit Native-IO kann man dies nun so gar nicht definieren.
    Das System führt intern einen IO-Puffer, der in 2 Bereiche geteilt ist.
    1. Feldpuffer
    2. NULL-Indikatoren je Feld
    Beim Lesen wird aus dem IO-Puffer in RPG-Variablen kopiert.
    Beim Schreiben wird aus den Variablen in den Puffer kopiert und der INSERT/UPDATE ausgeführt.
    Ein "Nicht erwähnen" eines Feldes wie in SQL ist daher nicht möglich!
    Man ist also gezwungen per %NULLIND(Name) das Flag zu setzen oder zu löschen.
    Dabei ist natürlich darauf zu achten, dass beim Füllen der Variablen ein gesetztes NULL-Flag nicht gelöscht wird!
    Vergisst man also das Zurücksetzen, wird NULL an Stelle des neuen Wertes geschrieben.

    Auch per Trigger hat man es da nicht einfacher. Man bekommt den Daten-Puffer und NULL-Indikatoren übergeben.
    Die NULL-Indikatoren sind ein "5I 0 DIM(nn)". Wenn der Trigger also das NULL-Flag setzen will muss man genau Zählen.
    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. #2
    Registriert seit
    Feb 2007
    Beiträge
    71
    schonmal Danke soweit Ihr Beiden:

    Also das mit RMVBLANK(*BOTH) hatte ich schon so gesetzt....
    Leider erscheint in der CSV Datei jedoch trotzdem das Feld so:
    ;" ";

    Komme ich also wohl um das %NULLIND nicht herum

  3. #3
    Registriert seit
    Nov 2003
    Beiträge
    2.434

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    2.055
    wir verwenden SED
    /* -------------------------------------------------------------------------- */
    /* ACHTUNG "; ; ; ; ; ;" IST NACH DEM SED */
    /* ";; ;; ; ;" ER FINDET "; ;" TAUSCHT ES IN ;; UND FINDET DAHINTER */
    /* " ; ; ; ;" DARAUS WIRD " ;; ; ;" */
    /* " ; ;" DARAUS WIRD " ;;" */
    /* GESAMTERGEBNISS : ";; ;; ;;" */
    /* D.H. UM ALLE BLANK ZU ELEMINIREN IST SED 2 * ERFORDERLICH !!! */
    /* -------------------------------------------------------------------------- */

    RMV_BLANK: /* s = suche '; ;' tausche in ';;' g = global, alle vorkommen */
    CHGVAR VAR(&QSH) VALUE('SED s/''; ;''/'';;''/g' *BCAT &P2 *BCAT '>' *CAT &PFAD)
    STRQSH CMD(&QSH)
    &P2 ist /pfad/der/datei/incl/datei.csv
    &Pfad ist das gleiche (anderer Dateiname)

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.809
    Bei den ganzen Klimmzügen weiß ich schon, warum ich CSV's per SQL und CPYTOSTMF erstelle ;-).
    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 2009
    Beiträge
    11
    Moin Moin *ALL

    ich habe ein ähnliches Problem gestern auch gehabt, bei mir hat es funktioniert indem ich die Codepages explizit angegben habe:

    QSYS/CPYTOIMPF FROMFILE(liba/filea) +
    TOSTMF('/HOME/export/path/filea.csv')
    MBROPT(*REPLACE) FROMCCSID(273) +
    STMFCCSID(1250) RCDDLM(*CR) DTAFMT(*DLM) +
    STRDLM(*DBLQUOTE) RMVBLANK(*BOTH) +
    FLDDLM(';') NULLIND(*YES) DECPNT(*COMMA) +
    ADDCOLNAM(*SYS)
    MONMSG CPF2817

    Dabei war der Knackpunkt die CP 1250 MS Win Latin2 und nicht die Standard CP 1252 zu verwenden, dann erscheint X'0' immer als @.
    Mit der 1250 sehen die Felder dann auch im Excel korrekt aus...
    Vielleicht hilft Die das auch!

    Volker

  7. #7
    Registriert seit
    Feb 2007
    Beiträge
    71
    Vielen Dank Euch soweit. Leider hat noch nichts wirklich zum Ziel geführt - leider (V5R4) aber teilweise auch mit anderen Releases nicht. Das einzigste womit ich es wirklich zuverlässig hinbekomme ist das %NULLIND im RPG . Aber ich werde nochmals alles durchprobieren... Danke

    PS: Das mit "SED" wollte ich nicht nutzen......

  8. #8
    Registriert seit
    Jun 2001
    Beiträge
    2.055
    SED wurde bei mir auch zu 5.4 er Zeiten ohne RMVBLANK(*BOTH) erdacht.

    Nachdem wir festgestellt hatten das es 2 mal laufen muß läuft es stabil und einigermassen schnell.
    (8-9 Mio Datensätze in 3-5 Minuten auf einem /qntc/ gemapten PC

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.809
    Also 273 nach 1250 ist schon gewagt, da 1250 der 870 (polnisch) entspricht.
    Da sind wohl die Daten von einem Nicht-273-Terminal erfasst worden.

    Ansonsten per SQL:
    select
    trim(f1) concat ";" concat
    trim(char(f2)) concat ";"
    :
    from mytable
    where
    ...

    Das Ergebnis lässt sich sehr schön als CSV weitergeben.
    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
    Feb 2007
    Beiträge
    71
    Ich hatte das mit *BOTH nun einige male versucht - aber immer wieder bringt er mir die Felder " "; " "; usw... Das mit SQL ist auch nett Fuerchau - Danke. mal sehen wie ich es löse... Danke

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.392
    ... man kann natürrlich auch die Blanks per SQL View mit einem Käse Konstrukt wieder gegen Null Values tauschen und dann den CPYTOIMPFD machen...
    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/

Similar Threads

  1. UPDDTA und Null-Werte
    By alexk2013 in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 14-05-14, 13:33
  2. SQL IS nOT NULL funktioniert nicht auf V7.1
    By hs in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 31-01-14, 12:49
  3. CPYTOIMPF
    By alex in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-06-03, 09:22
  4. Antworten: 5
    Letzter Beitrag: 23-04-03, 14:48
  5. Virtuelle Spalten im VIEW auf NULL
    By KB in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 18-05-01, 16:04

Berechtigungen

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