-
NULL Felder / CPYTOIMPF
Hallo *ALL
Vielleicht kann mir jemand helfen?
Ich möchte versch. physische Dateien mit CPYTOIMPF in ein CSV File ausgeben.
Das klappt natürlich auch alles gut - nun die Frage:
Felder ohne Inhalt sollen auch in der CSV ausgegeben werden ohne irgendeinen
Wert zwischen den Trennzeichen - auch kein Blank.
Das funktioniert bisher, indem ich die Felder als NULL Felder in der DDS spezifieziere
und explit jedes einzelne dieser Felder abfrage und wenn '' der Wert ist dann mit
eval %nullind(o_feld ) = *on setze... Das ist bei knapp 500 Feldern ein wenig
Aufwand.
Gibt es irgendeine Möglichkeit die Felder immer auf *NULL zu setzen, wenn wirklich
kein Inhalt vorhanden ist bzw. der Wert BLANK ist. Die Dateien aus denen ich lese
(ERP System) sind leider nicht NULL allowed.
Danke für jeden Hinweis.
gruss cicero22
-
Das sollte eigentlich der Parameter RMVBLANK(*BOTH) erledigen.
Da schneidet bei allen Textfeldern die Blanks vorn und hinten ab.
Gruß
Ronald
-
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
Similar Threads
-
By alexk2013 in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 14-05-14, 12:33
-
By hs in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 31-01-14, 11:49
-
By alex in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 03-06-03, 08:22
-
By Sigma in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 23-04-03, 13:48
-
By KB in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 18-05-01, 15: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