PDA

View Full Version : IFS und CCSID



Seiten : [1] 2

co_steffl
28-10-09, 07:06
Hallo zusammen,
ich habe das Problem das ich auf einem Win2003 Server eine .bat Datei benötige die ich
auf iSeries mit RPG im IFS erzeugen will. Das ganze habe ich erst einmal mit einer Text File ausprobiert.Ich habe nun gelesen das ich auf der I5 beim open und erzeugen der *.txt datei im IFS eine CCSID mitgeben kann.Hier mal die Code Schnippsel.

if unlink('/XXXX/xxxx/xxxx.txt') < 0;
err = errno;
if err ENOENT;
callp die('unlink(): ' + %str(strerror(err)));
endif;
endif;

fd = open( %trim(path) : flags : mode : codepage );

callp close(fd);
flags = O_WRONLY + O_TRUNC + O_TRUNC;
fd = open( %trim(path) : flags : mode );
if fd < 0;
callp die('open(): ' + %str(strerror(errno)));
errmsg = %str(strerror(errno));
callp die('open() for output: ' + ErrMsg);
endif;

.... begsr init;
codepage = 367;

Ich habe es schon mit verschd. CCSID probiert, jedoch keinen Erfolg gehabt.

Ist der Weg generell richtig? oder mache ich überhaupt was falsch?

Wo finde ich die richtige CCSID? Habe es auch schon mit 1252 probiert

Gruß co_steffl

BenderD
28-10-09, 07:53
... beim zweiten öffnen fehlt wohl das TEXTDATA Flag.
bei mir auf der Webseite gibt es aber auch ein fertiges SRVPGM OUTSTREAM

D*B


Hallo zusammen,
ich habe das Problem das ich auf einem Win2003 Server eine .bat Datei benötige die ich
auf iSeries mit RPG im IFS erzeugen will. Das ganze habe ich erst einmal mit einer Text File ausprobiert.Ich habe nun gelesen das ich auf der I5 beim open und erzeugen der *.txt datei im IFS eine CCSID mitgeben kann.Hier mal die Code Schnippsel.

if unlink('/XXXX/xxxx/xxxx.txt') < 0;
err = errno;
if err ENOENT;
callp die('unlink(): ' + %str(strerror(err)));
endif;
endif;

fd = open( %trim(path) : flags : mode : codepage );

callp close(fd);
flags = O_WRONLY + O_TRUNC + O_TRUNC;
fd = open( %trim(path) : flags : mode );
if fd < 0;
callp die('open(): ' + %str(strerror(errno)));
errmsg = %str(strerror(errno));
callp die('open() for output: ' + ErrMsg);
endif;

.... begsr init;
codepage = 367;

Ich habe es schon mit verschd. CCSID probiert, jedoch keinen Erfolg gehabt.

Ist der Weg generell richtig? oder mache ich überhaupt was falsch?

Wo finde ich die richtige CCSID? Habe es auch schon mit 1252 probiert

Gruß co_steffl

co_steffl
28-10-09, 07:55
Danke für dir rasche Antwort,
werde es mir mal anschauen. Ich berichte wieder.

gruß co_steffl

co_steffl
28-10-09, 09:34
Hallo

den o_textdata habe ich gesetzt. Codepage auf 273
Daten sehen im IFS O.K aus

prtacctab 'H' 'A_38AE20' -r 'D:\ases\SES\custom\reports\de_...

Jedoch auf PC geöffnet mit Word-Padso

—™£ƒƒ£‚@}È}@}ÁmóøÁÅòð}@`™@ }Äz쁢…¢ìâÅâ샤¢£–”ì™…— –™£¢ì„…mÄÅì™…—©ø“óK™… —–™£}@`–@}Äz쁢…¢ìâÅâ샤¢ –”쁃ƒ£‚ìÁmóøÁÅòð@`ƒ“@ð %@@@@@@@@@@@@@@@@


Ist 273 die richtige Codepage dafür?

co_steffl

Fuerchau
28-10-09, 09:53
273 ist ja auch EBCDIC, für den PC benötigst du 1252 (Westeuropa).

Achtung:
Die CCSID wird nur verwendet, wenn die Datei angelegt wird, ansonsten gilt die aktuelle CCSID !

co_steffl
28-10-09, 10:06
Hallo
hatte ich schon probiert codepage 1252


daraus wird dann im IFS

CCSID . . . . . . . . . . . . . . . . : 5348

In ifs sieht das so aus

prtacctab 'H' 'A_38AE20' -r 'D:ÖasesÖSESÖcustomÖ


grosse Ö sollte Back-slash sein

In pc sieht so aus

—™£ƒƒ£‚@}È}@}ÁmóøÁÅòð}@`™@ }Äz쁢…¢ìâÅâ샤¢£–”


wir bei 1.ten open angelegt
flags = O_WRONLY + O_CREAT + O_TRUNC + O_CODEPAGE + O_TEXTDATA;

Gruss co_steffl

Fuerchau
28-10-09, 10:27
5348 entspricht 1252 mit Euro.
Aber welche CCSID hat dein JOB ?
Wenn der auf 65535 steht, gibts auch keine Codewandlung.

Und ein Ö ist niemals ein \ sondern immer ein Ö.

co_steffl
28-10-09, 10:37
Hallo

mein Job hat ccsid 1141

co_steffl

ps das mit dem Ö hat sich geklärt, rest nicht

Fuerchau
28-10-09, 11:04
Les dir bitte noch mal die Beschreibung durch:
open()--Open File (http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/apis/open.htm?resultof=%22%4f%5f%43%43%53%49%44%22%20)
Vielleicht siehst du ja dann was falsch läuft.

mino
28-10-09, 13:24
Hallo co_steffl,

notfalls kannst Du ja auch in eine temporäre Arbeitsdatei schreiben und diese dann per CPYTOIMPF (mit STMFCODPAF(*PCASCII) und RMVBLANK(*TRAILING)) ins IFS stellen.
Dies geht ja auch innerhab des RPGs mit call(e) 'QCMDEXC'.

Viele Grüße
Michael