PDA

View Full Version : cpytoimpf



Seiten : [1] 2

Robi
16-09-09, 14:24
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

Fuerchau
16-09-09, 14:38
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.

Robi
16-09-09, 16:24
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

mwithake
17-09-09, 13:57
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)

Robi
17-09-09, 15:33
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

B.Hauser
17-09-09, 16:21
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

Robi
17-09-09, 18:18
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

Fuerchau
18-09-09, 11:16
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.

Robi
25-09-09, 15:49
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

Fuerchau
25-09-09, 18:21
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.