Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre du Club
    Inscrit en
    avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 181
    Points : 49
    Points
    49

    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

  2. #2
    Expert Confirmé
    Homme Profil pro Hédhili Jaïdane
    Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    juin 2007
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Nom : Homme Hédhili Jaïdane
    Localisation : Tunisie

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

    Informations forums :
    Inscription : juin 2007
    Messages : 1 882
    Points : 3 435
    Points
    3 435

    Par défaut

    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 "?".

  3. #3
    Membre du Club
    Inscrit en
    avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 181
    Points : 49
    Points
    49

    Par défaut

    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.

  4. #4
    Expert Confirmé
    Homme Profil pro Hédhili Jaïdane
    Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    juin 2007
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Nom : Homme Hédhili Jaïdane
    Localisation : Tunisie

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

    Informations forums :
    Inscription : juin 2007
    Messages : 1 882
    Points : 3 435
    Points
    3 435

    Par défaut

    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.

  5. #5
    Membre du Club
    Inscrit en
    avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 181
    Points : 49
    Points
    49

    Par défaut

    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

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •