IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Différence de comparaison de chaine de caractère entre Java et Cobol


Sujet :

Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Différence de comparaison de chaine de caractère entre Java et Cobol
    Bonjour à tous,

    Ce sujet étant en relation avec Java et Cobol je ne savais pas trop dans quel section du forum le poster, le programme que je suis en train de développer étant en java j'ai donc posté dans la section java. Je dispose d'un programme déjà développé en Cobol et je dois en développer un similaire en java. Cependant j'ai quelques soucis concernant la comparaison de chaine de caractère utilisée dans ce programme Cobol que je veux reproduire en java. J'ai appris (grace à ce forum) que les chaines de caractères (type PIC X en cobol et type string en java) sont comparées, en Cobol, caractère par caractère en s'appuyant sur la table ASCII Collating Sequence. J'ai lu que la comparaison se fait, en java, selon un ordre lexicographique qui lui même s'appuie sur la table ASCII Collating Sequence (je ne suis pas sure de cette partie). J'ai cependant des différences de résultat sur les comparaisons des mêmes chaines de caractères entre mon programme cobol déjà développé et le programme java que je suis en train de développer : quand je parle de résultat je parle de l'ordre entre les deux chaines de caractère comparées (<, > ou =). Connaissez-vous les différences existantes entre la comparaison de chaine de caractère en cobol et en java ?
    Je précise que je suis très débutant en cobol et débutant en java.

    N'hésitez pas à me contacter pour toutes informations supplémentaires.

    Je vous remercie.

    Cordialement.

  2. #2
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    La question fondamentale est quel type de comparaison veut-on faire pour faire évoluer le code?
    Comparer les codes caractères ne donne pas un tri lexicographique (ben oui: dans un dictionnaire quel est l'ordre des caractères 'é', 'e', 'è' etc.?).
    Donc le principe fondamental en java est d'avoir un système qui compare les chaînes selon les principes du pays (exemple, en espagnol, savoir trier "llama" et "libre"). Voir java.text.Collator etc.
    Maintenant le code historique en Cobol ne fait sans doute pas ça ... (et d'ailleurs utilise t'il des codes ASCII?). Ce qui ramène à la question fondamentale: veut-on un code qui aie le même comportement (erroné) ou une évolution?
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonjour professeur et merci de votre réponse. Pour répondre à votre question oui je veux garder le même comportement erroné, ce programme java est développé dans le cadre d'une migration et doit avoir strictement le même résultat que le programme Cobol. Je me suis cependant trompé sur une partie mon programme Cobol étant installé sur mainframe la comparaison caractère par caractère se fait selon la table EBCDIC collating sequence la chaine la plus grande des deux chaines comparées est celle qui a le premier caractère en partant de la gauche qui a la plus grande représentation décimal (donnée par la table EBCDIC). Exemple : si on compare les chaines "AA" et "AB" le premier caractère étant "A" pour les deux chaines la représentation décimal est identique, on passe au deuxième caractère : la représentation décimal de "A" est 193 la représentation décimal de "B" est 194 > 193 donc "AB">"AA" (en EBCDIC). J'ai essayé de reproduire cette comparaison en java avec la méthode suivante :
    <code>
    package com.af.xib;



    import java.io.File;

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.util.Properties;



    public class Comparaison {



    public static int comparaisonChaine(String chaineA, String chaineB) throws IOException {



    Properties prop = new Properties();

    File fProp = new File("src/ebcdic.properties");



    // Charge le contenu de ton fichier properties dans un objet Properties

    FileInputStream stream = new FileInputStream(fProp);

    prop.load(stream);



    int resultComparison = 0;



    if (chaineA.length() > chaineB.length()) {



    int diff = chaineA.length() - chaineB.length();

    chaineB = chaineB + ToolsFonctions.padRight(" ", diff);



    } else if (chaineA.length() < chaineB.length()) {



    int diff = chaineB.length() - chaineA.length();

    chaineA = chaineA + ToolsFonctions.padRight(" ", diff);

    }



    char[] tableauCaractereChaineA = chaineA.toCharArray();

    char[] tableauCaractereChaineB = chaineB.toCharArray();



    int i = 0;



    while (i < chaineA.length() & resultComparison == 0) {

    int unicodeA = Integer.parseInt(prop.getProperty(String.valueOf(tableauCaractereChaineA[i])));

    int unicodeB = Integer.parseInt(prop.getProperty(String.valueOf(tableauCaractereChaineB[i])));

    resultComparison = unicodeB - unicodeA;

    i++;

    }



    return resultComparison;



    }



    }
    </code>

    Le fichier de propriété contient en clé les caractères et en valeur la représentation décimal du caractère selon la table EBCDIC. J'obtiens pourtant toujours la même différence entre mon programme java et mon programme cobol. J'ai également essayé en mettant la représentation décimal selon la table ASCII : j'obtiens exactement le même résultat qu'avec la table EBCDIC et donc la même différence avec mon programme cobol.

    Merci de votre aide.

Discussions similaires

  1. [XL-2000] Mettre en format rouge (sup) ou bleu (ajout) la différence de chaine de caractères entre 2 cellules
    Par Laurentdupontnordist dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/04/2018, 15h28
  2. Réponses: 2
    Dernier message: 10/05/2006, 15h23
  3. comparaison de chaine de caractères
    Par lecyberax dans le forum C
    Réponses: 10
    Dernier message: 24/03/2006, 19h30
  4. Réponses: 2
    Dernier message: 23/03/2006, 12h39
  5. Réponses: 11
    Dernier message: 22/03/2006, 21h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo