Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > Cobol
Cobol Forum d'entraide sur la programmation en langage Cobol
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/05/2012, 12h56   #1
nsqualli
Membre du Club
 
Inscription : avril 2006
Messages : 181
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 181
Points : 45
Points : 45
Par défaut Conversion caractère spécial

Bonjour à tous,

Je travaille avec cobol sous AS400.
apparemment le système n'accepte pas le caractère spécial 'œ'.
Quand mon composant reçoit une chaine de caractère avec ce dernier, il plante et il ferme la session sur laquelle je travaille.

j'ai essayé de faire le code ci-dessous pour remedier à ça mais c'est KO, rien ne se fait:

Code :
1
2
3
INSPECT MEMOCOM OF W-BAC00309D REPLACING ALL  "X'8C'"
                                                               BY        "'oe'"
J'ai essayé aussi:

Code :
1
2
3
INSPECT MEMOCOM OF W-BAC00309D CONVERTING  "X'8C'"
                                                                  TO "'oe'"
mais c'est KO aussi.

Est ce que quelqu'un peut me dire quoi faire ou bien me donner une piste?

Merci par avance
nsqualli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2012, 14h45   #2
Hédhili Jaïdane
Expert Confirmé
 
Homme
Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
Inscription : juin 2007
Messages : 1 783
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 783
Points : 2 713
Points : 2 713
Bonjour.

1- Les chaines de caractères de l'INSPECT doivent avoir la même longueur, donc tu ne peux remplacer X"8C" que par un seul caractère, sinon il te faudrait un peu de traitement de texte spécifique surtout que le nombre des occurances peut être variable et surement indéterminé à l'avance.

2- L'INSPECT s'écrirait plutôt comme ceci par exemple:
Code :
INSPECT TXT9 REPLACING ALL X"8C" BY "?".
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2012, 15h22   #3
nsqualli
Membre du Club
 
Inscription : avril 2006
Messages : 181
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 181
Points : 45
Points : 45
Citation:
Envoyé par Hédhili Jaïdane Voir le message
Bonjour.

1- Les chaines de caractères de l'INSPECT doivent avoir la même longueur, donc tu ne peux remplacer X"8C" que par un seul caractère, sinon il te faudrait un peu de traitement de texte spécifique surtout que le nombre des occurances peut être variable et surement indéterminé à l'avance.

2- L'INSPECT s'écrirait plutôt comme ceci par exemple:
Code :
INSPECT TXT9 REPLACING ALL X"8C" BY "?".
Oui tu as raison c'est un problème que j'ai rencontré.
ce que j'ai fais c'est que lors de l'exécution avec l'instruction DSPHEX Var, j'ai trouvé la valeur Hexadécimal que mon composant reçoit, est c'est 04, du coup j'ai essayé le code ci-dessous:

Code :
1
2
3
INSPECT MEMOCOM OF W-BAC00309D CONVERTING    X"04" 
                                       TO    X"9C"
Mais ça me donne un autre caractère autre que "œ" voulu, sachant que selon le site http://shop.alterlinks.com/ascii-tab...etendue-fr.php et http://www.conseil-creation.com/info...exadecimal.php, l'Hexa de "œ" est bel et bien "9C".

Je ne sais pas si L'AS400 a un autre codage.

Est ce que vous avez une piste pour moi?

Merci d'avance.
nsqualli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2012, 16h20   #4
Hédhili Jaïdane
Expert Confirmé
 
Homme
Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
Inscription : juin 2007
Messages : 1 783
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 783
Points : 2 713
Points : 2 713
Il y a toujours cette histoire de CCSID (code page grosso modo) et ses problèmes de conversion EBCDIC/ASCII et des caractères affichables /imprimables.

Le CCSID est indiqué à plusieurs endroits de l'AS/400, Valeur Système, profil, job, fichiers DB, fichiers écrans et imprimantes, etc.. sans parler du code langue et pays... c'est un peu le bazar quoi.

Bien situer le problème et essayer de lui trouver une solution acceptable.

Pour ton cas, si on ne trouve une solution pour placer le "œ", il faudrait se rabattre sur le "oe" par une solution de traitement de texte en remplaçant le x"04" par "oe". Ce n'est pas compliqué dans une boucle ou un perform en redéfinissant le texte comme un tableau de n occurrences d'un caractère ou en utilisant la reference modified.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2012, 16h10   #5
nsqualli
Membre du Club
 
Inscription : avril 2006
Messages : 181
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 181
Points : 45
Points : 45
Citation:
Envoyé par Hédhili Jaïdane Voir le message
Il y a toujours cette histoire de CCSID (code page grosso modo) et ses problèmes de conversion EBCDIC/ASCII et des caractères affichables /imprimables.

Le CCSID est indiqué à plusieurs endroits de l'AS/400, Valeur Système, profil, job, fichiers DB, fichiers écrans et imprimantes, etc.. sans parler du code langue et pays... c'est un peu le bazar quoi.

Bien situer le problème et essayer de lui trouver une solution acceptable.

Pour ton cas, si on ne trouve une solution pour placer le "œ", il faudrait se rabattre sur le "oe" par une solution de traitement de texte en remplaçant le x"04" par "oe". Ce n'est pas compliqué dans une boucle ou un perform en redéfinissant le texte comme un tableau de n occurrences d'un caractère ou en utilisant la reference modified.
Merci pour ton aide.

Nous avons opté pour une solution très basique pour eviter le plantage.

Cette solution consiste à remplacer le caractère E dans l'O par un espace.

Merci encore une fois
nsqualli est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h41.


 
 
 
 
Partenaires

Hébergement Web