View Full Version : CCSID im IFS per Programm einstellen
JoergHamacher
27-07-04, 13:40
Hallo,
ich muss für eine Anwendung sicherstellen, dass eine bestimmte Datei im IFS-Verzeichnis CCSID 1252 besitzt. Mit "umständlichem" CPY über WRKLNK kann ich das hinbekommen, aber gibt es nicht vielleicht auch ein API, mit dem es bequemer geht und das man in ein normales RPG(ILE)-Programm einbinden kann?
Danke im Voraus.
Jörg
fred_hanau
27-07-04, 16:09
Hallo,
ist allerdings auf Feldebene. Man kann von der Feldart u.A. die CCSID abfragen. Die Feldart muss natürlich CHAR sein.
select dbiccc
from QSYS/QADBIFLD
where dbilib='BIBLIOTHEKSNAME'
and dbifil='DATEINAME'
and dbifld='FELDNAME'
Mehr fällt mir da im Moment auch nicht ein.
mfg
Fred
Hallo!
@Jörg:
Was meinst du mit "sicherstellen"? Ist die Datei bereits vorhanden und soll das Programm die CCSID prüfen, oder soll das Programm die CCSID ändern, oder erstellt das Programm die Datei und soll die CCSID gleich richtig setzen?
@Fred:
Deine Idee zum Prüfen der CCSID auf Feldebene ist gut, aber die geht leider nur für das Bibliothekssystem und nicht für das IFS.
Viele Grüße
Jürgen
JoergHamacher
28-07-04, 08:39
Danke für die Nachfrage - war wirklich ein wenig unkonkret formuliert:
Genau genommen ist die Datei bereits vorhanden (der Anwender stellt eine JPG-Grafik in ein bestimmtes IFS-Verzeichnis). Um sie verarbeiten zu können, benötigen wir CCSID 1252. Es gilt also jetzt, die CCSID der Datei zu prüfen und bei Bedarf auf 1252 zu ändern.
Hallo!
@Jörg:
Was meinst du mit "sicherstellen"? Ist die Datei bereits vorhanden und soll das Programm die CCSID prüfen, oder soll das Programm die CCSID ändern, oder erstellt das Programm die Datei und soll die CCSID gleich richtig setzen?
@Fred:
Deine Idee zum Prüfen der CCSID auf Feldebene ist gut, aber die geht leider nur für das Bibliothekssystem und nicht für das IFS.
Viele Grüße
Jürgen
Die CCSID einer IFS-Datei ist nicht änderbar.
Durch das Einstellen vom PC direkt in das Verzeichnis müsste die CCSID eigentlich von selbst auf 1252 gestellt werden.
Erforderlich hierfür ist eine Freigabe (NetServer) ins "/home" und nicht ins "/QDLS".
Für die Weiterverarbeitung einer Grafik-Datei ist die CCSID aber unerheblich !!!
Beim Verarbeiten darf sowieso keine Code-Wandlung durchgeführt werden.
Erstelle am besten per CRTPF eine Datei (autom. CCSID 65535) und kopiere per CPYFRMSTMF / CPYTOIMPF ohne jegliche Konvertierung.
JoergHamacher
28-07-04, 09:24
Ich weiß auch nicht genau, wieso es vorkommt, aber bei unseren Anwendern war die besagte Datei jetzt schon mehrfach in CCSID 850 und wir haben ein Programm , das aus den Spools PDF-Dateien erzeugt und dabei die Grafik als Hintergrund einbindet. Und dabei wird die Grafik in 1252 erwartet, sonst funktionierts nicht. Weiß nicht genau, warum das so ist, aber so ist's halt....
Inzwischen habe ich herausgefunden, dass ich mit dem Unix-API LSTAT die CCSID der Datei feststellen kann. Duch Hin- und Her-Kopieren mit CPY im WRKLNK kann ich offensichtlich auch die CCSID der Datei ändern, aber ein einfacheres Verfahren scheint es dann wohl doch nicht zu geben. Schade....
Anbei noch eine ganz "dumme" Frage: gibt es eigentlich einen Unterschied zwischen den Begriiffen "CCSID" und "CodePage" oder bezeichen die beide dasselbe?
Die CCSID einer IFS-Datei ist nicht änderbar.
Durch das Einstellen vom PC direkt in das Verzeichnis müsste die CCSID eigentlich von selbst auf 1252 gestellt werden.
Erforderlich hierfür ist eine Freigabe (NetServer) ins "/home" und nicht ins "/QDLS".
Für die Weiterverarbeitung einer Grafik-Datei ist die CCSID aber unerheblich !!!
Beim Verarbeiten darf sowieso keine Code-Wandlung durchgeführt werden.
Erstelle am besten per CRTPF eine Datei (autom. CCSID 65535) und kopiere per CPYFRMSTMF / CPYTOIMPF ohne jegliche Konvertierung.
CCSID 850 deutet darauf hin, dass die Datei z.B. in einer DOS-Box (z.B. .bat-File) erstellt wurde.
CCSID 1252 wird aus direkten Windows-Anwendungen verwendet.
CCSID = Coded Character Set Identification
Der Begriff Codepage kommt noch aus den alten DOS-Zeiten, als Codesets noch als Page in den Speicher geladen werden mussten, bedeutet allerdings das Gleiche.
Bruno Jakob
28-07-04, 10:22
Wird die Datei auf der AS/400 erstellt, oder kommt sie vom PC?
Mit dem Qshell-Befehl auf der AS/400 touch -C 1252 dateiname kannst du die Datei vorher mit der richtigen CCSID erstellen. Nachträglich geht da nichts mehr.
Gruß
Bruno
@Bruno
Was nützt mir das vorherige Erstellen, wenn die Datei per Copy oder aus der Anwendung per Save erstellt wird ?
Die meisten Anwendungen (incl. Explorer) killen die Datei vorher (Mit Abffrage "Möchten Sie wirklich ersetzten ...").
Bruno Jakob
29-07-04, 08:48
Deshalb wäre es ja wichtig zu wissen, wie die Datei auf die AS/400 kommt. Wenn ich z. B. zuvor eine Datei mit touch und einer bestimmtes CCSID erstellt habe und bringe dann Daten mit CPYTOSTMF rein, bleibt die eingestellte CCSID erhalten.
Gruß
Bruno