View Full Version : Spoolfiles in Excell
Guten Morgen
vielen lieben dank für die schnelle hilfe jedes mal!!!!
Also es liegt datsächlich an der CSSID wüdre ich sagen. Ich habe einen File den ich per DSPOBJD *outfile generiere, der hat eine CSSID 273. Wenn ich den in Qtemp kopiere und dann per CPYTOIMPF ins IFS klappt es, aber wenn ich einen File per CRTPF erstelle bekomme ich nur eine CSSID 65335 hin. Gebe ich eine andere bei der erstellung an sagt die AS iss nicht. Mache ich vorher einen CHGJOB auf CSSID 273 erstellt er ihn mir trotzdem mit 65335. Wie erstelle ich den einen File mit einer CSSID 273?
Per SQL finde ich auch interressant.
Ich habe mir ein kleines QRY angelegt , welches ich in meinem CL laufen lasse. Kann ich das ergebniss auch aus dem QRY in eine .CVS ausgeben?
CRTPF ohne DDS erstellt immer mit CCSID *HEX (65535).
CREATE TABLE per SQL erstellt bei Zeichenfeldern grundsätzlich mit CCSID, da diese auf Feldebene angegeben wird.
*HEX muss man explizit angeben oder man verwendet binary Felder.
Am Besten eignet sich da QM-Query, da diese zur Laufzeit auch eine Ausgabedatei erstellen können. Hier wird SQL verwendet und somit auch mit CCSID gearbeitet.
Für dein Spoolproblem könnte die Lösung ja nun so aussehen:
CRTPF in QTEMP mit CCSID 65535
CPYSPLF
STRQMQRY QMQRY(MYSQL) OUTPUT(*OUTFILE) OUTFILE(QTEMP/MYOUT)
CPYTOIMPF
Der QMQRY MYSQL kann dann direkt deinen Select enthalten.
Wenn du willst, kannst du auch Parameter verwenden um den Dateinamen z.B. dynamisch zu haben:
select ....
from &myfile
STRQMQRY ... SETVAR((MYFILE 'QTEMP/MYSPLF'))
Wenn du nun mehrere Spools zu einer Ausgabe zusammenfassen musst, kannst du beim 1. QMQRY OUTMBR(*FIRST *REPLACE) und in den folgenden OUTMBR(*FIRST *ADD) angeben. *REPLACE/*ADD kannst du auch in eine Variable packen.
In einem anderen Thread hat einer getestet, dass bei großen Datenmengen die CSV-Aufbereitung in SQL schneller ist, als im CPYTOIMPF.
Ausserdem ist man ggf. variabler was die Vornullen oder für Excel die Zeichenbehandlung angeht:
char(feld) <= linksbündig ohne Vornull
digits(feld) <= mit Vornull, allerdings ohne Komma, kann man aber mit substr() aufteilen.
Auch die Interpretation von Numerisch als Zeichen für Excel kann in SQL gelöst werden:
'''' concat digits(mynum) concat ';' <= man beachte die 4 Hochkomma
Die PF enthält dann bereits das CSV-Format, man kann es schön testen und anschließend reicht ein CPYTOSTMF, der eben schneller als CPYTOIMPF ist.
Hi
also ich habe jetzt mal wieder etwas gelernt: QMQRY
Link: iSeries / AS400 FAQ: How can I get started with QMQRY (Query Management Query)? (http://faq.midrange.com/data/cache/146.html)
habe mein CL wie folgt angepasst:
PGM
DLTF FILE(QTEMP/SPOOL_QM)
MONMSG MSGID(CPF0000)
DLTF FILE(QTEMP/SPOOL_AUS)
MONMSG MSGID(CPF0000)
RMVLNK OBJLNK('/HOME/USER/spool.cSV')
MONMSG MSGID(CPF0000)
CRTPF FILE(QTEMP/SPOOL_QM) RCDLEN(132)
CPYSPLF FILE(QPRTSPLQ) TOFILE(QTEMP/SPOOL_QM) +
JOB(151353/USER/QPADEV0099) SPLNBR(4)
STRQMQRY QMQRY(LIB/QRY) OUTPUT(*OUTFILE) +
OUTFILE(QTEMP/SPOOL_AUS)
CPYTOIMPF FROMFILE(QTEMP/SPOOL_AUS) +
TOSTMF('/HOME/USER/SPOOL.CSV') +
MBROPT(*REPLACE) STMFCODPAG(*PCASCII) +
RCDDLM(*CRLF)
ENDPGM
leider bekomme ich immer noch die gleichen fehlerhaften Zeichen.
Es muss aber an der CSSID liegen.
Hilfe. :(
wenn ich
CRTPF FILE(QTEMP/TEST) RCDLEN(132)
und dann
upddta
und dann
CPYTOIMPF
kommt auch Müll raus.
Ist doch kein Wunder, da CPYTOIMPF eine CCSID braucht. Verwende in diesem Fall CPYTOSTMF ... STMFCODPAG(1252).
ja da hast du af jedenfall recht.
Ich habe nur das Problem das er dann meckert, weil ich mehr als drei felder habe.
ich suche die fehlermeldung nochmal
Externbeschriebene dateien oder Physische Dateien mit mehr oder weniger als drei Felder werden von diesem Befehl nicht unterstützt.
Das kommt leider bei diesem befehl als Antwort.
Ich habe nun mal folgendes gemacht:
CRTPF FILE(QTEMP/XTEST) RCDLEN(132)
CPYSPLF FILE(QSYSPRT) TOFILE(QTEMP/XTEST)
CPYTOSTMF FROMMBR('/qsys.lib/qtemp.lib/xtest.file/xtest.mbr') TOSTMF('/home/fuerchau/xtest.csv') STMFOPT(*REPLACE) DBFCCSID(273) STMFCODPAG(1252)
Die Datei wurde anstandlos im IFS erstellt und kann mit Windows angezeigt werden.
Ich weiß nicht, was du da falsch machst.
Hmm,
geht bei mir auch. Ich muss nur den Parameter STMFCODPAG(*PCASCII) einstellen dann sieht es super aus.
Das Problem bei mir ist das ich eine Datei per QRY erstlle. Das QRY fragt eine Kopierte spool datei ab die nur eine Variable hat in der länge 132. Um das ganze ein wenig zu sortieren jage ich die einmal durch ein QRY und bekomme eine schön sortierte datei heraus die 8 Felder hat. Und wenn ich die mit exakt dem gleichen CPYTOIMPF ins IFS schiebe ist sie im eimer.
Das macht mich fertig!