Page 1 sur 1
conversion ASCII EBCDIC montants négatifs
Posté : mer. 13 juin 2012, 09:06:36
par PGG57
Je rencontre un problème de conversion ASCII vers EBCDIC des
zones numériques négatives. J'utilise la commande CPYFRMSTMF pour transférer un fichier de l'IFS vers un fichier base de données.
Les montants dont le dernier chiffre est un zéro sont convertis avec le caractère { pour les montants positifs et } pour les montants négatifs.
Le programme RPG se plante donc avec une erreur donnée décimale.
Quelqu'un a-t-il une solution ?
(sans texte)
Posté : mer. 13 juin 2012, 09:37:27
par cimmelé
Bonjour,
On a tous plus ou moins cherché un jour ou l'autre sur ce type d'anomalie, qui dépend du type d'encodage utilisé pour le fichier PC, le CSSID du fichier destination sur le system i...
Pour ma part, quand j'ouvre un fichier .csv à importer sous notepad++, je vois un encodage ANSI.
Nous utilisons plus facilement la commande CPYFRMIMPF comme :
CPYFRMIMPF FROMSTMF(&CHEMIN)
TOFILE(QTEMP/WPRO025)
MBROPT(*REPLACE)
RCDDLM(*ALL)
STRDLM(*NONE)
RMVBLANK(*BOTH)
FLDDLM(';')
DECPNT(*COMMA)
RPLNULLVAL(*FLDDFT)
Est-ce que enfin vous avez fait un essai en précisant le paramètre dans la commande CPYFRMSTMF :
STMFCCSID(*PCASCII)
Cordialement,
CCSID et genération de fichiers dans l'IFS
Posté : mer. 13 juin 2012, 11:02:34
par cmasse
Pensez aussi à regarder le CCSID du fichier. (DSPFD)
Est-il à 65635 ? si non, quel est la valeur rencontrée ? que contient la sysval QCCSID ?
(sans texte)
Posté : lun. 18 juin 2012, 09:09:16
par PGG57
Bonjour,
Le fichier de destination a un CCSID égal à 65535.
La commande CPYFRMSTMF s'exécute bien avec STMFCODPAG(*PCASCII).
La seule solution que j'ai trouvé est de passer un programme RPG qui change le dernier caractère des montants égaux à { ou } en une valeur correcte +0 ou -0
CCSID 65535
Posté : lun. 18 juin 2012, 12:45:05
par cmasse
Le CCSID 65535 indique........... qu'il n'y a pas de CCSID ou plutôt qu'il est inconnu. Le mieux est alors de renseigner le paramètre DBFCCSID de la cde CPYFRMSTMF à 297 (pour EBCDIC Français)