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 :

Faire une fonction qui permet d'exclure des valeurs et des plages de valeurs


Sujet :

Java

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2022
    Messages : 43
    Par défaut Faire une fonction qui permet d'exclure des valeurs et des plages de valeurs
    Bonjour,

    Je souhaite créer une fonction qui permet d'exclure des plages de valeurs ou valeurs.

    on tape : "1-5, 10-20, 25" et il va exclure les colonnes 1,2,3,4,5 + 10,11...jusque 20 + la colonne 25.

    Je suis un peu perdu pour commencer sachant qu'il faut que je découpe ma variable string.

    Le truc c'est que l'on peut taper avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //les valeurs
    String colExclu = "1"; // exclura que la colonne 1
    String colExclu = "1,5,10,15"; // exclura que les colonnes 1, 5, 10, 15
    //Les plages de valeurs
    String colExclu = "10-20"; // exclura de la colonne 10 à la colonne 20
    String colExclu = "1-5, 10-20"; //exclura de la colonne 1-5 puis colonne 10 à 20
    String colExclu = "1-5, 10-20"; //exclura de la colonne 1-5 puis colonne 10 à 20
    //les plages de valeurs + valeurs combiné
    String colExclu = "1-5, 10-20, 25";

    C'est le même raisonnement que pour l'impression de pages sauf qu'on exclu ces chiffres.

    Un expert pourrait-il m'aiguiller sur le commencement svp ?

    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 341
    Par défaut
    Bonjour,

    Comme vous le dites, il faut commencer par decouper la "variable string". Vous pouvez utiliser, String.split ou Scanner ou une expression régulière. Si vous n'êtes pas à l'aise, la solution de String.split est peut-être la plus facile (splitter sur "," et, pour chaque element, splitter sur "-"). Mais les regex vous permettent de valider le format en même temps..

    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
    16
     
    // !! Code pas testé, juste posé en vitesse pour doner l'idée
    String input = "1,2,10-15";
    for (String element : input.split(",")) {
      String[] range = element.split("-");
      if ( range.length==2 ) {
        String start = range[0];
        String end = range[1];
      } else if ( range.length==1 ) {
        // Une seule exclusion, le range ne contient qu'un élément
        String start = element;
        String end = start; 
      } else {
        // Pas de "," ni de "-" ?!
      }
    }

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2022
    Messages : 43
    Par défaut
    Merci
    et comment fait-on pour savoir il y'a combien de valeurs à exclure avant de rentrer dans la boucle ?

  4. #4
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 341
    Par défaut
    Citation Envoyé par JavaGuava Voir le message
    comment fait-on pour savoir il y'a combien de valeurs à exclure avant de rentrer dans la boucle ?
    Je ne suis pas sur de bien comprendre la question..

    Si vous voulez compter les "range" sans parser la chaine via une boucle, une expression régulière me semble plus adaptée.

    Si vous voulez déjà connaitre le nombre d'élement couverts par tous les ranges sans parser la chaine. Alors je n'en ai aucune idée.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2022
    Messages : 43
    Par défaut
    J'ai réussi merci !
    mais peut-on encore mieux factoriser le code ? :

    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
    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
     
    String ColExclu2 = "1,4";
    List al33 = new ArrayList();
    al33.add("L1_C1_'0'_KO");
    al33.add("L1_C2_'3260'_KO");
    al33.add("L1_C3_'CHK_CASHING");
    al33.add("L1_C4_'fdsfrsfgrsrf'");
    al33.add("L1_C5_'aa'");
    al33.add("L1_C6_'uh'");
    al33.add("L1_C7_'tf'");
    al33.add("L1_C8_'oi'");
     
    //RAF : supprimer les items avec la plage de valeurs
     
    String ColExclu3 = "1,4,5-7";
    for (String cexclu : ColExclu3.split(",")){
    	System.out.println("cexclu: "+cexclu);
    	//Iterator success = al33.iterator();
    	String[] range = cexclu.split("-");
     
    	if(range.length==1){ //CAS 1 : 1 seule colonne à EXCLURE
    		Iterator success = al33.iterator();
    		while(success.hasNext()){
    			//System.out.println("passe");
    			String elem = success.next();
    			if (elem.contains("C"+cexclu+"_")) {
    				System.out.println("cexclu: "+cexclu);
    				success.remove();
    			}
    		}
    	}
    	if (range.length==2){ //CAS 2 : N colonnes à EXCLURE
    		String start = range[0];
    		String end = range[1];
    		while(start<=end){
    			//System.out.println("passe"+start);
    			Iterator success = al33.iterator();
    			while(success.hasNext()){
    				//System.out.println("passe");
    				String elem = success.next();
    				if (elem.contains("C"+start+"_")){
    					//System.out.println("start: "+start);
    					success.remove();
    				}
    			}
    		start++;
    		}
    	}
    }
    System.out.println("al33: "+al33.toString());

  6. #6
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 341
    Par défaut
    Bonjour,

    Le problème que je vois avec votre code c'est qu'il est très spécifique, vous recherchez des élements en concaténant des string. Pourtant, vous avez des indexs pour cibler les elements à supprimer. Comme je le propose dans l'autre question (https://www.developpez.net/forums/d2.../#post11876121) vous pouvez utiliser les méthodes de List ou la convertir en tableau pour le manipuler via Arrays.

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

Discussions similaires

  1. [XL-2013] Créer une fonction qui permet de compter des données complexe.
    Par RabiK33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2016, 11h58
  2. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04
  3. Une fonction qui permette d'ajouter des séparateurs...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/04/2006, 13h23
  4. cherche une fonction qui permet de faire une recherche
    Par vbcasimir dans le forum Langage
    Réponses: 7
    Dernier message: 01/09/2005, 17h24
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13

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