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

  1. #1
    Candidat au Club
    Homme Profil pro
    apprentit developpeur
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    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
    Points : 4
    Points
    4
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    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
    Candidat au Club
    Homme Profil pro
    apprentit developpeur
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    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
    Points : 4
    Points
    4
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    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
    Candidat au Club
    Homme Profil pro
    apprentit developpeur
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    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
    Points : 4
    Points
    4
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    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.

  7. #7
    Candidat au Club
    Homme Profil pro
    apprentit developpeur
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    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
    Points : 4
    Points
    4
    Par défaut
    Oui en gros je parcours le fichier XA, et pour chaque XA je lance un test qui cherche un SP correspondant via une comparaison du code ( row.getCell() ) , si je n'en trouve pas je fais le test sur les enfants de ce XA.

    Les fichiers sont extraits d'un .csv donc l'ordre parent/enfant est toujours comme dans l'exemple ci-dessus.

    Le fait de separer les enfants uniques ou non n'est pas pour contourner un probleme mais parce que cela fait partie du cahier des charges.
    Si le XA n'a qu'un enfant unique (et donc direct),si je trouve un SP correspondant je prends le premier parent du SP en 30 (valeur dans la ligne du parent qui veut dire vendable) en remontant.
    En revanche si le XA a plusieurs enfant, je parcours ces enfants(XA toujours) et je test pour trouver un SP correspondant et, si j'en trouve un, je doit cette fois-ci remonter dans l'arbre des SP pour prendre comme tu l'a dit le SP (en 30)dont le parent est le SPL.


    Pour le moment mon programme marche, le probleme que j'ai, de ce que je peux voir dans les resultats,c'est que la premiere fois que les codes sont equivalents il ne le "voit pas" , ensuite il voit le "#SPL" et rentre dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    else if((childParentCode.equals(parentSellCode)) && (parentSellCode.startsWith("#SPL")))
                    {
                        System.out.print("trouve le SPL \n");
                        sellParent = parentSpVendableVariable;
                        break;
                    }
    et ENSUITE rentre dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    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;
                    }
    Ce qui engendre le fait que le prog me renvoie les donnees "parentvariable","CodeVariable" de parentSpVendableVariable alors qu' il devrai avoir pris la valeur de sellParent avant.
    et je ne voit pas pourquoi il ne le fais pas dans le bon ordre.


    Je ne comprends pas tout a ton histoire d'arbres, mais je doit traiter plusieurs fichiers de quelques milliers de lignes, alors je penses que tout charger en arbre a chaque fois ralentirai de maniere consequente le processus.

    Je suis desole si je ne comprends pas tout, je debute

    Pensez vous que cela puisse venir du POI ou de Java ? (question de mon superieur ),je penses que ca vient plutot de mon cerveau .

  8. #8
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par PandaX Voir le message
    Oui en gros je parcours le fichier XA, et pour chaque XA je lance un test qui cherche un SP correspondant via une comparaison du code ( row.getCell() ) , si je n'en trouve pas je fais le test sur les enfants de ce XA.

    Les fichiers sont extraits d'un .csv donc l'ordre parent/enfant est toujours comme dans l'exemple ci-dessus.
    Si les fichiers sont des CSV, pourquoi parles-tu de lecture Excel ? Du CSV, c'est du texte, pas besoin de le traiter comme du Excel.

    Citation Envoyé par PandaX Voir le message
    Le fait de separer les enfants uniques ou non n'est pas pour contourner un probleme mais parce que cela fait partie du cahier des charges.
    Le cahier des charges définit comment sont structurées les données en entrées, quelles sont les données à obtenir en sortir, et ce que tu dois faire pour passer de l'un à l'autre, fonctionnellement, pas techniquement. Éventuellement, ça peut définir des formats, des types de données, des protocoles, mais pas l'implémentation. Elle peut être définie par un "cahier des charges techniques", mais l'implémentation, même si elle doit avoir pour résultat ce que le cahier des charges demande, doit répondre à des impératifs de performance et de maintenabilité. Et plus le code est simple, plus c'est maintenable.

    Citation Envoyé par PandaX Voir le message
    Pour le moment mon programme marche, le probleme que j'ai, de ce que je peux voir dans les resultats,c'est que la premiere fois que les codes sont equivalents il ne le "voit pas" , ensuite il voit le "#SPL" et rentre dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    else if((childParentCode.equals(parentSellCode)) && (parentSellCode.startsWith("#SPL")))
                    {
                        System.out.print("trouve le SPL \n");
                        sellParent = parentSpVendableVariable;
                        break;
                    }
    et ENSUITE rentre dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    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;
                    }
    Ce qui engendre le fait que le prog me renvoie les donnees "parentvariable","CodeVariable" de parentSpVendableVariable alors qu' il devrai avoir pris la valeur de sellParent avant.
    et je ne voit pas pourquoi il ne le fais pas dans le bon ordre.
    [/QUOTE]
    Mmm, je vois. Déjà, avant même d'analyser le truc (ce qui est fastidieux sans déboguer dans ton cas, je veux dire que de mon côté, il me faut simuler de tête le fonctionnement du programme, et ça me donne mal à la tête d'avance ), ma première remarque est que c'est toujours hasardeux ce genre de manip qui consiste à affecter une variable dans un bout de code et de l'exploiter dans un autre (au sens exécution du terme en particulier). Le code stateful c'est toujours sensible. Et effectivement l'ordre d'exécution est souvent la raison des dysfonctionnement. Une code stateless est toujours préférable et bien plus simple.

    Citation Envoyé par PandaX Voir le message
    Je ne comprends pas tout a ton histoire d'arbres, mais je doit traiter plusieurs fichiers de quelques milliers de lignes, alors je penses que tout charger en arbre a chaque fois ralentirai de maniere consequente le processus.
    Charger tout dans un arbre en mémoire prendra peut-être plus de mémoire (et encore, ça reste à démontrer), mais probablement pas plus de temps de traitement. Ce que tu vas perdre en temps de chargement, tu vas largement le gagner en temps de parcourt. Et ce sera bien plus simple à manipuler. Après, tu peux continuer sur la solution que tu as faites : pour simplifier, il faudra isoler et plus découper. Plus tu découpes en petites parties, plus facile les parties sont faciles à comprendre et à mettre au point. Je reste convaincu à moins que quelque chose m'échappe que le traitement des cas "enfant unique" et "pas unique" peuvent être généralisé en un traitement unique simple (avec éventuellement une légère variation).

    Citation Envoyé par PandaX Voir le message
    Pensez vous que cela puisse venir du POI ou de Java ? (question de mon superieur ),je penses que ca vient plutot de mon cerveau .
    Il y a infiniment plus de chances que le problème vienne de toi que de Java, ou même une API comme Apache POI. Les deux sont éprouvés pas des millions de personnes depuis des années. On ne peut exclure des bugs, mais vu l'impact que ça peut avoir, à moins que ça soit un truc vraiment très spécial que peu de gens utilisent, le bug est référencé, corrigé et la correction diffusée très rapidement et pour les traitements généraux et basiques (comme la lecture d'une valeur dans une cellule), les API sont tellement testées qu'il est extrêmement rare que le bug apparaisse dans une version diffusée.

    A noter que je n'ai toujours pas compris ton histoire de "vendable" ou "à 30" : ça n'a aucun sens, à part pour toi. Dans la HC des tableaux Excel, on ne voit nullepart une cellule avec 30 dedans, ni même "vendable", ou je ne sais quoi qui pourrait me faire penser à "vendable" ou "à 30".
    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.

  9. #9
    Candidat au Club
    Homme Profil pro
    apprentit developpeur
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    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
    Points : 4
    Points
    4
    Par défaut
    Pour les fichier CSV : on les exporte d'abord sous excel pour pouvoir enlever les colonnes inutiles et surtout pour pouvoir controler facilement les resultats du programme. Donc on m'a demande de faire une lecture de ces fichiers excel plutot que des .csv

    Pour mon probleme de boucle qui marche pas dans le sens que je veux, cela viens juste de ma logique , je n'ai pas l'habitude d'utiliser les boucles recurcives et par consequent je n'ai pas compris tout de suite que le "trouve le SPL" etait dans la premiere recurence et non dans la premiere occurence de la boucle ... et le fait que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SP sellParent = new SP(1,"parentFake", "CodeFake", 900,1000,30,"desc");
    SP parentSpVendableVariable = new SP(1, "parentvariable","CodeVariable",10,2000,90,"nop" );
    soit dans la boucle plutot qu'en dehors n'etait en effet pas coherent car les donnees n'etaient pas memorisees comme il se doit. je les ai donc sorties de ma boucle et tout marche comme je le souahite a present.

    pour les codes 30 ils sont dans l'une des autrers nombreuses colonnes plus loin et, en effet j'ai oublie de les mettre dans mon exemple,desole

    Merci pour tout, Je suis desole de t'avoir fait perdre ton temps pour un probleme si con.. ( je l'avais sous les yeux depuis le debut mais je bloquais sur autre chose..)

  10. #10
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Si le problème est résolu, n'oublie pas de cliquer le bouton "Résolu".
    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