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

avec Java Discussion :

Comment vérifier si la valeur d'un String a changé en lecture de fichier ?


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Points : 81
    Points
    81
    Par défaut Comment vérifier si la valeur d'un String a changé en lecture de fichier ?
    Bonjour,
    j'ai une question:
    j'ai un fichier qui contient plusieurs lignes et certaines avec des tabulations
    Code TEXT : 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
     
    	DI 67
    		Nombre total d'adhésions: 3789
    		Nombre d'adhésions PDLP différées: 0
    		Nombre d'adhésions Mensu différées: 0
    		Nombre d'adhésions TLR liées a 1 adhésion PDLP différée: 0
    		Nombre d'adhésions normales: 3789
    		Fichier de ventilation: AD
     
    	DI 87
    		Nombre total d'adhésions: 2090
    		Nombre d'adhésions PDLP différées: 0
    		Nombre d'adhésions Mensu différées: 0
    		Nombre d'adhésions TLR liées a 1 adhésion PDLP différée: 0
    		Nombre d'adhésions normales: 2090
    		Fichier de ventilation: AD
     
    	DI DGE
    		Nombre total d'adhésions: 7
    		Nombre d'adhésions PDLP différées: 0
    		Nombre d'adhésions Mensu différées: 0
    		Nombre d'adhésions TLR liées a 1 adhésion PDLP différée: 0
    		Nombre d'adhésions normales: 7
    		Fichier de ventilation: AD
     
    	DI 67
    		Nombre total de Modifications: 3087
    		Nombre de modifications différées: 0
    		Fichier de ventilation: MO
     
     
    	DI 87
    		Nombre total de Modifications: 2089
    		Nombre de modifications différées: 0
    		Fichier de ventilation: MO

    je dois enregistrer ces données dans une BDD.
    j'ai une colonne qui s'appelle "cle" qui doit contenir les lignes avec une seule tabulation (ex : "DI 67").
    mais le truc c'est que cette clé est identique pour toutes les lignes qui suivent.

    en gros je dois avoir ça dans la BDD :
    cle valorisation valeur
    DI 67 Nombre total d'adhésions 3789
    DI 67 Nombre d'adhésions PDLP différées 0
    DI 67 Nombre d'adhésions Mensu différées 0
    DI 67 Nombre d'adhésions TLR liées a 1 adhésion PDLP différée 0
    DI 67 Nombre d'adhésions normales 3789
    DI 67 Fichier de ventilation AD

    j'ai commencé à faire un truc du genre mais je ne comprends pas comment je fais pour dire que tant que la clé n'a pas changé alors je garde cette même clé pour les lignes qui suivent
    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            String cle = ""; 
            String ancienneCle = "";
            if(line.contains("\t") && !line.contains("\t\t")) {
                ancienneCle = line.trim();
                cle = line.trim();
     
            }
    quelqu'un peut m'aider svp

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    le truc c'est que tu as absolument pas besoin de chercher si quelque chose a changé.

    Avec ton code, là, tu t'es arrangé pour, lorsque tu tombes sur une ligne qui change la clé, avoir la valeur correcte de clé, la nouvelle, dans une variable cle.

    Tout ce qu'il te reste à faire, c'est d'utiliser cette variable cle qui contient la bonne clé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Points : 81
    Points
    81
    Par défaut
    désolé mais je ne comprends pas

    je dois utiliser juste la variable "cle" ?

  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
    Salut,

    La réponse à ta question dépend de ce qui se trouve devant les lignes suivant celle qui a la clef.

    1. Si toutes les lignes ont une structure similaire,
      Par exemple,
      clé
      \tlibellé 1\tvaleur1
      \tlibellé 2\tvaleur2
      
      Ici, on a des valeurs séparées par des tabulations (çà pourrait être une espace, un ensemble d'espaces, ou quelque suite de caractères remarquables), on peut parser toutes les lignes par un split.

      Les lignes avec clef sont celle dont le premier élément (du tableau) est vide.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
       
      String key = null;
       
      for(String ligne : toutesleslignes ) {
       
          String[] valeurs = ligne.split("\t");
          if ( valeurs[0].isEmpty() ) {
                 // ici on a une ligne de données
                 // key contient la clef de la dernière ligne lue où la première valeur était une chaîne vide, ou null si le fichier n'est pas conforme
          }
          else {
                key = valeurs[0];
          }
       
      }

    2. Même si la deuxième partie n'a pas la même structure, tu peux toujours faire la même chose : chaque ligne sera soit un élément (la clef), soit deux éléments, un vide et le reste que tu peux reparser
    3. Et même s'il n'y a pas cette structure similaire, tu peux procéder de la même manière. Il te faut juste une condition qui différencie les deux types de lignes :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
       
      String key = null;
       
      for(String ligne : toutesleslignes ) {
       
          if ( ligneContientClef(ligne) ) {
                key = extraireClef(ligne);
          }
          else {
                 // ici on a une ligne de données
                 // key contient la clef de la dernière ligne lue qui correspondait à la condition, ou null si le fichier n'est pas conforme
          }
       
      }
    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 régulier Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Points : 81
    Points
    81
    Par défaut
    je suis vraiment désolé mais je n'arrive pas comprendre

    j'ai même essayé avec le split mais j'ai toujours un champs vide dans la BDD pour la colonne "cle" du coup je suis revenu à ce que j'avais au départ

    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
     
        public void setLesIndicateurs(String line)
        {
            Indicateur unIndicateur = new Indicateur();
            String avant = "";
            String apres = "";
            String cle = ""; 
            String ancienneCle = "";
     
            if(line.contains("\t") && !line.contains("\t\t")) {
                ancienneCle = line.trim();
                cle = line.trim();
            }
     
            if(line.length() > 0 && line.contains(":")) {
     
                avant = stringUtil.decouperAvantCaractere(0, line, ":");
                apres = stringUtil.decouperApresCaractere(line, ":");
     
                if(avant.length() > 0) {
                    unIndicateur.setValorisationCleIndicateur(avant.replace(" ", "_").toUpperCase());
                }
                if(apres.length() > 0) {
                    unIndicateur.setValeurIndicateur(apres);
                }
     
            }
            if(avant.length() > 0 && apres.length() > 0) {
                unBilan.getLesIndicateurs().add(unIndicateur);
            }
        }


  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
    Ton souci, c'est que tu stockes ta cle dans la méthode, dans une variable locale. Une variable locale n'a pas d'existence en dehors de l'exécution de la méthode. Une exécution, une variable, une valeur. Une autre exécution, une autre variable, une autre valeur. C'est pour ça que dans mon dernier exemple, la variable pour la clef est dans la boucle de lecture, pas dans une méthode qui serait appelée pour traiter une ligne.

    Tu pourrais faire comme ça pour utiliser une méthode comme tu fais :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    String key = null;
     
    for(String ligne : toutesleslignes ) {
     
        if ( ligneContientClef(ligne) ) {
              key = traiterLigne(ligne, null);
        }
        else {
               // ici on a une ligne de données
               traiterLigne(key, ligne);
        }
     
    }
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public String traiterLigne(String key, String ligne) {
         if ( ligne==null ) {
              // on est dans le cas où on lit la clef : key est une ligne du fichier avec la valeur de la clef quelque part dedans
              key = extraireClef(key);
         }
         else {
              // key est la clef
              // ligne les données correspondant à la clef
         }
         return key; // on retourne toujours la clef
    }
    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
    Membre régulier Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Points : 81
    Points
    81
    Par défaut
    je vais essayer merci

  8. #8
    Membre régulier Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Points : 81
    Points
    81
    Par défaut
    effectivement si je mets dans la classe au lieu de mettre dans la méthode ça marche
    merci

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

Discussions similaires

  1. [WD19] Comment vérifier si des valeurs existent dans mon HFSQL ?
    Par Devloppor dans le forum WinDev
    Réponses: 5
    Dernier message: 10/12/2014, 14h14
  2. Comment vérifier si une valeur est incluse dans un tableau
    Par hornetbzz dans le forum Contribuez
    Réponses: 2
    Dernier message: 01/03/2011, 01h32
  3. Réponses: 2
    Dernier message: 04/06/2010, 21h53
  4. Comment vérifier qu'une valeur est NULL ?
    Par innova dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/11/2006, 14h53
  5. Comment vérifier que la valeur d'un champ soit unique?
    Par le lynx dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/05/2005, 14h11

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