View Full Version : COPY *.* aus IFS in PF
Hier schlägt die Shell-Funktion zu.
cat File1 [File2] ...
An Stelle von direkten Namen können eben auch Ausdrücke verwendet werden.
Z.b.:
ls * <= listet alle Dateien auf STDOUT
ls *.txt
ls a?b*
usw.
Die Shell übergibt auf Grund des Ausdruckes eben alle Namen des aktuellen Verzeichnisses als Argumente an das Programm.
cat *
bekommt also alle Dateinamen übergeben und gibt diese auf STDOUT aus.
Natürlich solltest du
a) einen cd /home/... in QSH
oder b) einen CD per CLP vorher
ausführen.
Also:
QSH CMD('cd /home.... ;cat * >...')
Wichtig: mit dem Semikolon kann man mehrere Befehle (auch ganze Scripte) an die QSH übergeben.
Das ">..." wirkt wie ein OVRDBF für die QSH.
OVRDBF FILE(STDOUT) TOFILE(MYFILE)
Guten Morgen!
Ich habe auch so eine Anforderung:
Im IFS ein paar täglich unterschiedliche Dateien zu einer zusammenzufassen um sie dann zu verarbeiten.
Hab obigen Cat-Vorschlag genommen und er funktioniert soweit auch, nur die neu entstehende Datei (auch wenn nur eine Datei als Input vorhanden ist) enthält nur Datensalat.
Habe das auch schon händisch auf der Qsh nachvollzogen.
Mit der Bitte um Unterstützung,
Günter
Tach,
Hat die Datei im IFS Datensalat oder nachdem du sie auf die As400 geholt hast --> CCSID
Robi
CAT * gibt die Daten mit der CCSID der STMF aus.
Prüfe die CCSID und korrigiere diese (CHGATR).
Die Original-Datei(en) haben normalen Text als Inhalt.
das ist nicht die Antwort auf MEINE Frage
Robi
Schau dir die Datei mal per WRKLNK Auswahl 5 an und betrachte per Auswahl 8 die CCSID der Datei an.
Zusätzlich prüfe die CCSID deines Jobs, wenn die auch 65535 ist, gibts keine Codewandlung da du binär arbeitest.
Per CHGATR kannst du die CCSID der IFS-Datei korrigieren (es wird keine Codewandlung durchgeführt!).
Tach,
Hat die Datei im IFS Datensalat oder nachdem du sie auf die As400 geholt hast --> CCSID
Robi
Hi Robi!
Also die Quell-Dateien, die mit Cat zusammengefügt werden sollen und bereits im IFS abgelegt wurden, sind noch lesbar.
Erst die mit Cat neu erstellte Datei enthält Datensalat.
Gruß,
Günter
Schau dir die Datei mal per WRKLNK Auswahl 5 an und betrachte per Auswahl 8 die CCSID der Datei an.
Zusätzlich prüfe die CCSID deines Jobs, wenn die auch 65535 ist, gibts keine Codewandlung da du binär arbeitest.
Per CHGATR kannst du die CCSID der IFS-Datei korrigieren (es wird keine Codewandlung durchgeführt!).
Guten Morgen!
Also es ist so:
Die Dateien im IFS (die vom Fremdsystem kommen) haben als CCSID 1252.
Die von Cat neu erstellte Datei bekommt offenbar 273.
In meinem Job mit dem ich das jetzt getestet hab steht drin (wrkjob, 2, paar mal blättern):
ID des codierten Zeichensatzes (CCSID) . . . . . : 65535
Standard-ID des codierten Zeichensatzes . . . . . : 273
Ich geb zu, ich kenn mich mit der ganzen Materie (ccsid, etc.) gar nicht aus. Ich versteh auch nicht, warum das immer so ein Problem ist.
Danke für die Hilfe.
Günter
Solange man nicht mit externen Daten hantieren muss ist die CCSID ja auch kein Problem.
Daher belässt man ja meist den Systemwert QCCSID auf 65535 (*HEX).
Da aber nun mal unterschiedliche Sprachen auf unterschiedlichen CCSID's basieren muss man sich zwangsläufig mit dem Thema beschäftigen.
ID des codierten Zeichensatzes (CCSID) . . . . . : 65535
Dies ist die CCSID, die zum Arbeiten des Jobs benötigt wird.
Beim Lesen wird von der Objekt-CCSID in die Job-CCSID gewandelt, bim Schreiben dann eben umgekehrt.
Ausnahme eben 65535 (*HEX):
Damit wird dem System mitgeteilt, dass BINÄR gearbeitet wird und jedwede Codewandlung unterbleibt.
Da aber bestimmte Objekte (DDS-PF, SQL-Tables) eine CCSID benötigen, gilt für die Neuerstellung die
Standard-ID des codierten Zeichensatzes . . . . . : 273
die automatisch aus der installierten Primärsprache gebildet wird.
Die CCSID im IFS wird auf verschiedenen Wegen festgelegt:
Beim Zugriff über die Freigaben steht die Einstellung im Opsnav, bei FTP wird diese per CHGFTPA festgelegt.
Beim IFS findet keine Übersetzung statt, beim FTP in eine PF im ASCII-Modus wird umgewandelt.
Da CPYxxxIMPF auf SQL basiert, wird eben im Job eine korrekte CCSID benötigt!
Das Thema CCSID wäre ja auch keines, wenn man sich von Anfang an um die richtigen Einstellungen gekümmert hätte, später steht man halt wie der berühmte Ochse vor dem Berg.
Danke!
Ich hab jetzt einen Umweg gemacht, in dem ich wieder mit Qsh mit ls die Dateinamen in eine Datei schreibe, diesmal aber bereits im Bibliotheks-System und diese Liste dann mit einem CL auslese, welches den jeweiligen Dateinamen als Parameter einem RPG übergibt. So werden die Dateien dann einzeln verarbeitet.
Ist zwar umständlich, aber es funktioniert und ich weiß warum.
Das IFS ist immer ein Graubereich, wo die umöglichsten Dinge passieren. Hab schon mehrere Programme, die von/ins IFS lesen/schreiben. Aber manchmal geht es wieder ganz anders.
Danke nochmal.
Günter