View Full Version : cpytoimpf
Hi,
ich habe eine Datei die recht lange Felder enthällt
in den Feldern steht
Feld1 : (512 Stellen alpha)
10.08.2009";"11.09.2009";15.10.2009
(genau so, vorne und hinten kein ")
in Feld 2 : (512 Stellen alpha)
08:00:01";"09:30:07";"12.45.13
(genau so, vorne und hinten kein ")
folgender Befehl sollte eigentlich die blanks in den Feldern weghauen
CPYTOIMPF FROMFILE(KAMPA#2P) TOSTMF(&PFAD) +
MBROPT(*REPLACE) FROMCCSID(1141) +
STMFCODPAG(*PCASCII) RCDDLM(*CRLF) +
DTAFMT(*DLM) STRDLM(*DBLQUOTE) +
STRESCCHR(*STRDLM) RMVBLANK(*BOTH) +
FLDDLM(',') NULLIND(*NO) DECPNT(*PERIOD) +
DATFMT(*ISO) TIMFMT(*ISO)
und DAS
"10.08.2009";"11.09.2009";15.10.2009","08:00:01";"09:30:07";"12.45.13"
als Ergebnis bringen.
Statdessen habe ich
"10.08.2009";"11.09.2009";15.10.2009 endlos *blank ","08:00:01";"09:30:07";"12.45.13 endlos *blank "
Was macht RMVBLANK(*BOTH) (wenn nicht die Blank entfernen ?)
Danke
Robi
RMVBLANK funktioniert nicht in Kombination mit STRDLM.
Bei CSV's gilt folgendes:
- Zeichenketten können wahlweise in " eingebettet werden, sie müssen eingebettet werden, wenn sie selber das Trennzeichen enthalten
- numerische Werte erhalten keine "
Wird nun ein STRDLM definiert, werden KEINE Blanks bei Zeichenketten sondern nur bei numerischen Werten enfernt.
Ohne STRDLM werden Zeichenketten getrimmt und ohne STRDLM ausgegeben, was ggf. bei enthaltenem Trennzeichen eben Probleme macht.
Eine Zeichenkette darf aber selber STRDLM nicht enthalten, da es sonst auch zu Problemen kommen wird.
Bei z.B. Programmiersprachen muss das Zeichen dann verdoppelt werden, was der CPYTOIMPF allerdings nicht zu tun scheint.
Hallo,
ich habe meine String Felder nun vorne und hinten mit " ausgestattet.
STRDLM steht nun auf *none
trotzdem habe ich die blanks noch
Danke
Robi
Das Feld muß als Character-Feld mit variabler Länge definiert werden (DDS VARLEN oder SQL VARCHAR). Dann sollte es funktionieren.
Dann eventuell beim Füllen des Feldes noch beachten: Wenn das Feld aus einem anderen grossem Feld gefüllt wird, was nicht VARCHAR ist, den Inhalt vorher trimmen damit die Leerzeichen entfernt werden. Character-Felder mit fester Länge werden immer mit Leerzeichen aufgefüllt.
langesfeld = %trim(inhalt)
Das 'darf' ich nicht.
Ist nicht meine Datei.
ich könnte sie per Pgm in eine mit Var len kopieren, ...
Hm, mal sehn ob das 'genemigt' wird
andere Vorschläge ?
Danke
Robi
Hi Robi,
ich hab's nicht ausprobiert, aber was wäre, wenn Du eine temporäre View (mit TRIM und VARCHAR-Feldern)) erstellen würdest (embedded SQL!), dann den CPYFROMIMPF mit der View ausführst und die View anschließend wieder löschst?
CREATE VIEW QTEMP/MYVIEW
as (Select Fld1, Cast(Trim(Fld2) as VarChar(50)) Fld2, ....
From MyFile);
Birgitta
Hallo Birgitta,
das Projekt wurde grade auf Eis gelegt, da der Schnittstellenpartner mit seiner eigenen Dateibeschreibung nicht klarkommt :)
Ist ne gut Idee von dir, wenn's weitergeht werde ich es mal versuchen, dnake
schönen Gruß
Robi
basierend auf deinen Ursprungsangaben habe ich das nun auch ausprobiert:
CPYTOIMPF FROMFILE(TESTCSV)
TOSTMF('/Home/Fuerchau/TestCSV')
MBROPT(*REPLACE)
STMFCODPAG(1252)
RCDDLM(*CRLF)
RMVBLANK(*BOTH)
FLDDLM(',')
Das Ergebnis ist folgendes:
"10.08.2009"";""11.09.2009"";15.10.2009","08:00:01"";""09:30:07"";""12.45.13"
Leerzeichen wurden korrekt entfernt, Das "-Zeichen wurde korrekt verdoppelt, siehe STRESCCHR(*STRDLM) !
Ich kann nun nur vermuten, dass deine Datenquelle keine Leerzeichen enthält !
Schau mal per DSPPFM -> F10 nach.
Doch doch, leerzeichen sind drin ...
bei deinem Ergebnis sind die doppelten " anders als bei meiner 'soll' vorgabe.
aber, das PJ ruht z.zt. werde mich melden, wenn es weitergeht
Danke an die freißigen Helfer, und schönes Wochenende
Gruß
Robi
Wenn du schon STRDLM(*DBLQUOTE) angibst, muss das Ergebnis genau so sein, da dein Beispieltext eben DBLQUOTE enthält müssen diese auch verdoppelt werden.
PS:
Prüfe mal auf jeden Fall deine CCSID's der PF und des Job's.