-
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.
-
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
-
-
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!)
-
Bei den ganzen Klimmzügen weiß ich schon, warum ich CSV's per SQL und CPYTOSTMF erstelle ;-).
-
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
-
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......
-
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!)
-
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.
-
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
-
... 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
Similar Threads
-
By alexk2013 in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 14-05-14, 13:33
-
By hs in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 31-01-14, 12:49
-
By alex in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 03-06-03, 09:22
-
By Sigma in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 23-04-03, 14:48
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks