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

Documents Java Discussion :

poi/XSSF probleme de comparaison


Sujet :

Documents Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    apprentit developpeur
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : apprentit developpeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Par défaut poi/XSSF probleme de comparaison
    Bonjour tout le monde,

    J'ai un soucis mais je ne sais pas si il vient de POi XSSF ou simplement de la logique de ma boucle.

    J'ai une classe SP :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class SP {
     
        private String Code;
        private String Parent;
        private String tabDechet[];
        private String tabChild[];
        private String DescSP;
        private double Qte;
        private int line;
        private double status;
        private double cost;
        private XA xa;
     
    [...]
    }

    et une classe XA :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class XA {
     
        private String Code;
        private String Parent;
        private String tabDechet[];
        private String tabChild[];
        private double qte;
        private int line;
        private String DescXA;
     
    [...]
    }


    Dans ma classe de lecture du fichier excel contenant les XA j'ai une detection pour savoir si le XA/XP a un enfant unique ou plusieurs enfants :


    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Boolean XPenfantUnique = false;
     
     ArrayList<XA> listXaChildren= lectureXAExcel.findXAChildren(parent);
     
     
            if((listXaChildren.size()==1) && (parent.getParent().endsWith("_CFG"))){
                XPenfantUnique=true;
            }else {XPenfantUnique=false;}


    Enfin dans ma classe main j' ai une fonction findSellableParent() qui remonte mon fichier en trouvant, pour un enfant unique, le dernier parent vendable (code 30/31/80) ,et,pour un enfant non-unique remonte jusqu'au parent dont le code est "#SPL" tout en stockant a chaque fois le dernier parent vendable et en le retournant lorsqu'il arrive au parent SPL. :


    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    public SP findSellableParent (SP childSP) throws IOException        //TODO probleme avec cette fonction, elle renvoie null
        {
     
            int line = childSP.getLine();
     
     
            SP sellParent = new SP(1,"parentFake", "CodeFake", 900,1000,30,"desc");
            SP parentSpVendableVariable = new SP(1, "parentvariable","CodeVariable",10,2000,90,"nop" );
     
     
            for (int i=1; i<=line; i++)
            {
                int linesup =line-i;
     
                String childParentCode = lectureSPExcel.getSPOfLine(line).getParent();
                System.out.print(childParentCode+" est le parent \n");
                String parentSellCode = lectureSPExcel.getSPOfLine(linesup).getCode();
                System.out.print(parentSellCode+" est le code du parent \n");
                double parentStatus=lectureSPExcel.getSPOfLine(linesup).getStatus();
     
     
                //System.out.print(childParentCode + " code parent \n");
                //System.out.print(parentSellCode + " code du parent \n");
     
     
                if (XPenfantUnique==true)
                {
                    if ((childParentCode.equals(parentSellCode)) && (parentStatus == 30 || parentStatus == 31 || parentStatus == 80)) {
                        sellParent = lectureSPExcel.getSPOfLine(linesup);
                        System.out.print("rentre dans 30 unique \n ");
                        break;
                    } else if (childParentCode.equals(parentSellCode)) {
                        sellParent = findSellableParent(lectureSPExcel.getSPOfLine(linesup));
                        System.out.print("rentre \n ");
                        break;
                    } else {
                        System.out.print("rentre pas unique \n ");
                    }
                }
     
                else if (XPenfantUnique==false)  //probleme dans cette partie de la boucle
                {
                    if ( (childParentCode.equals(parentSellCode)) && (parentStatus == 30 || parentStatus == 31 || parentStatus == 80))
                    {
                        parentSpVendableVariable = lectureSPExcel.getSPOfLine(linesup);
                        sellParent = findSellableParent(lectureSPExcel.getSPOfLine(linesup));
                        System.out.print("rentre dans 30 \n");
                        break;
                    }
                    else if((childParentCode.equals(parentSellCode)) && (parentSellCode.startsWith("#SPL")))
                    {
                        System.out.print("trouve le SPL \n");
                        sellParent = parentSpVendableVariable;
                        break;
                    }
                    else if (childParentCode.equals(parentSellCode))
                    {
                        sellParent = findSellableParent(lectureSPExcel.getSPOfLine(linesup));
                        System.out.print("rentre dans meme code \n");
                        break;
                    }
                    else
                    {
                        System.out.print(line+1 + " " + childParentCode + " ne correspond pas a "+parentSellCode +" ligne "+(linesup+1) + " et rentre pas \n ");
                    }
                }
     
            }
            return sellParent;
        }


    Lorsque je fais tourner le programme lorsque l'enfant est unique , aucun probleme:

    analyse de XA04426
    analyse de 1606295
    SP1638075 est le parent
    SP1638075 est le code du parent
    rentre dans 30 unique //rentre bien dans la boucle
    1606295 7'' Comfort wheel 4673
    Cependant quand c'est un enfant multiple :

    analyse de XA05210
    analyse de 1416896
    1567104-0407 est le parent
    1567104-0407 est le code du parent // les 2 codes ne sont pas reconnus comme identiques alors qu'ils le sont pourtant,ou alors je suis fou
    !SPS1602843 est le parent
    !SPS1602843 est le code du parent
    <SPC est le parent
    <SPC est le code du parent
    4704 <SPC ne correspond pas a 220.1033 ligne 4703 et rentre pas // et donc ne rentre pas dans les boucles
    [...]

    J'ai beau reprendre ma boucle dans tous les sens je ne vois pas d'ou cela peut venir.
    Pour info ,suite a un soucis de caprice du POI j'ai du remplacer tous mes

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    row.getCell(1).getStringCellValue();
    par des:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    formatter.formatCellValue(row.getCell(1));

    Ce probleme bloque completement mon projet, quelqu'un pourrait-il me venir en aide ?

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ce n'est pas très facile de te répondre sans les spécifications fonctionnelles, mais il y a un un truc ou deux qui me sautent aux yeux en tentant une rétroanalyse pour comprendre ce que tu cherches à faire :



    1. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      String childParentCode = lectureSPExcel.getSPOfLine(line).getParent();
      System.out.print(childParentCode+" est le parent \n");
      String parentSellCode = lectureSPExcel.getSPOfLine(linesup).getCode();
      System.out.print(childParentCode+" est le code du parent \n");

      Ce ne serait pas plutôt :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      String childParentCode = lectureSPExcel.getSPOfLine(line).getParent();
      System.out.println(childParentCode+" est le parent de l'enfant");
      String parentSellCode = lectureSPExcel.getSPOfLine(linesup).getCode();
      System.out.println(parentSellCode +" est le code du parent");
      Peut-être qu'en affichant les bonnes informations, tu aurais une meilleure idée du problème dans ton programme ? (c'est à priori la raison de ton commenaire : // les 2 codes ne sont pas reconnus comme identiques alors qu'ils le sont pourtant,ou alors je suis fou)
    2. ensuite
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      System.out.print(line+1 + " " + childParentCode + " ne correspond pas a "+parentSellCode +" ligne "+(linesup+1) + " et rentre pas \n ");
      ici on affiche un message d'erreur dans la comparaison qui correspond à

      <SPC est le parent
      <SPC est le code du parent
      4704 <SPCCOATTRACT_55 ne correspond pas a 220.1033 ligne 4703 et rentre pas // et donc ne rentre pas dans les boucles
      Ce qui me semble incohérent :

      dans le message d'erreur, on voit que childParentCode vaut "<SPCCOATTRACT_55" alors que dans le message juste au dessus, il est censé être "<SPC". J'ai beau relire ton code, je ne comprends pas cette mystérieuse transformation.




    PS:
    Citation Envoyé par PandaX Voir le message
    Pour info ,suite a un soucis de caprice du POI j'ai du passer tous mes
    Il n'y a pas de caprices de POI C'est simplement ton fichier Excel qui est fait comme ça : il y a un formatage spécial sur une cellule et pour récupérer la valeur affichée dans Excel et non la valeur stockée dans la cellule, il faut formater évidemment la valeur stockée.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    apprentit developpeur
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : apprentit developpeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Par défaut
    Desole, la premiere erreur etait en effet dans mon code mais une fois rectifiee le resultat reste le meme.

    la deuxieme erreur est une erreur de ma part au niveau du ctrl+C/V j'ai pris la ligne du dessous dans mon debuger xD

    Que faudrait-il savoir de plus dans les "spécifications fonctionnelles" ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par PandaX Voir le message
    Que faudrait-il savoir de plus dans les "spécifications fonctionnelles" ?
    Une description des données (leur sens) et de ce que tu dois en faire...

    Parce que la première question qui me tarabuste, c'est la comparaison de line-i et line... pour comprendre si la boucle est correcte ou pas, c'est indispensable de comprendre pourquoi, si line vaut mettons 3, tu vas comparer le parent et le code (donc déjà deux informations différentes à priori) entre les lignes :

    1. linesup et line
    2. 3-1=2 et 3
    3. 3-2=1 et 3
    4. 3-3=0 et 3

    L'ordre est-il important ? Pourquoi ne pas faire simplement for(linesup i=0; linesup<line; linesup++) { ou for(int linesup=line-1; linesup>=0; linesup--) si l'ordre importe. Moins de variables intermédaires rend plus simple la compréhension du code.

    Par exemple, une description du fichier pourrait donner des indices : s'il y a une ligne de titre en première ligne (donc 0), la comparaison ne peut qu'échouer entre une ligne de données et une ligne de titre (et comme on compare la ligne 0 en dernier, ça pourrait correspondre à ton cas de log).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre du Club
    Homme Profil pro
    apprentit developpeur
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : apprentit developpeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Par défaut
    Alors voila a quoi mes 2 fichiers(SP et XA) resemblent (la hierarchie en dessous sert a comprendre comment lire le fichier SP )

    en gros je defile mon fichie XA et pour chaque enfant de XA je cherche une correspondance dans le fichier SP et quand je trouve je remonte les parents, si l'enfant est unique je prends le premier parent en code 30 et siil n' est pas unique je remonte la hierarchie en stockant le dernier parent vendable a chaque fois jusqu'a ce que je trouve le "SPL" et je renvoie le dernier parent vendable. (c'est la que ca cloche).

    Suis-je assez clair ? ou te faudrait-il d'autres precisions ?
    Images attachées Images attachées  

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    J'ai toujours dû mal à voir la corrélation entre ton code et les structures que tu montres.

    Dans la structure, on a deux structures arborescentes (SP et XA) (avec une colonne level qui donne le niveau dans l'arbre).

    Dans ce que tu décris, tu parcours XA d'abord. Je suppose que tu cherches une instance de SP correspondante (comment ?). Et tu es censé chercher le parent de ce SP (à priori celui donc le SP_ Parent serait "<SPC". En gros, tu supposes que le fichier SP est bien construit de manière à ce que les lignes des enfants d'un parent soient bien en-dessous (ou inversement, que les parents soient bien directement au-dessus. Mais ce n'est pas vrai dès qu'on dépasse le niveau 2 de l'arbre.

    Ton code lui, mélange un parcourt de lignes et un parcourt récursif.

    Ton système qui associe une ligne à un "parent" n'est pas adapté à la problématique d'avoir plusieurs cellules avec la valeur d'un même "noeud". Tu cherches à contourner le problème avec cette histoire d'enfant unique/pas unique, et je pense que déjà un souci pourrait apparaître à ce niveau (n'ayant pas tout le code, cela ne peut être qu'une supposition). En plus, il semble que tu détermines la notion unique/pas unique par rapport à une caractéristique de données de XA, mais que tu l'appliques à un parcourt dans SP : si les fichiers sont mal construits, ou incohérents, ça risque de dysfonctionner, forcément.

    En plus, en théorie, on ne devrait pas faire de boucle, qui pour chaque élément traite soit le cas enfant unique soit pas unique : on devrait simplement récupérer le premier élément d'une liste, qui dans le cas "enfant unique" est une liste qui n'a qu'un élément (on généralise). Ainsi, l'algorithme correspond à chercher le parent du premier élément de la liste des SP ayant un SP Parent correspondant au SP code du "spchild" passé en paramètre.

    Et je ne vois pas bien ce que tu appelles "parent en code 30"... ne voyant pas cette information dans SP. Ni ce qu'est le SPL (ne voyant que des SPC et des SPS dans le tableau). Qu'est-ce qui caractérise un "parent vendable" ? Mais à la limite peu importe, ces conditions correspondent juste à la fin de ta récursivité.

    Personnellement, vu que les fichiers Excel représentent des arbres, je les chargerais dans des arbres que je parcourrais naturellement comme un arbre, sans parcourir des lignes et comparer à chaque ligne. A partir du moment où tu as une structure correspondant à la réalité de tes données, l'application du procédé fonctionnel de recherche est plus facile, car il n'y a pas d'intermédiaire technique (ce que constitue ton système de parcours des lignes "avant" la ligne du "spchild" courant).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Probleme de comparaison
    Par mattyeux dans le forum ASP
    Réponses: 2
    Dernier message: 23/03/2007, 15h38
  2. probleme de comparaison de date
    Par witjet dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/07/2006, 11h39
  3. Problème de comparaison de fichiers
    Par peppena dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 30/05/2006, 19h41
  4. [VBS]probleme ds comparaison de nombres
    Par zorba49 dans le forum VBScript
    Réponses: 9
    Dernier message: 24/05/2006, 16h43
  5. [Dates] Probleme de comparaison de date
    Par mathieu77186 dans le forum Langage
    Réponses: 4
    Dernier message: 22/12/2005, 17h21

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