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

Collection et Stream Java Discussion :

regex pour comparer des dates, des chiffres, des nombres


Sujet :

Collection et Stream Java

  1. #1
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut regex pour comparer des dates, des chiffres, des nombres
    Bonjour a tous,

    J'aimerais faire un pipeline évolué pour filtrer ma jxtable.
    Pour la filtrer, il existe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Filter[] filters = new Filter[] {
    new PatternFilter("S.*", 0, 1), // regex, matchflags, column
    new ShuttleSorter(1, false), // column 1, descending
    new ShuttleSorter(0, true), // column 0, ascending
    };
    FilterPipeline pipeline = new FilterPipeline(filters);
    JXTable table = new JXTable(model);
    table.setFilters(pipeline);
    [RESOLU](ne jamais sous estimer la puissance des expressions régulières !)
    Mais je n'arrive pas à créer des expressions régulières (regex) pour filtrer les nombres infèrieurs à 1000 ou encore filtrer les heures supèrieures à "7h 23"
    [/RESOLU]

    [A RESOUDRE]
    J'aimerais aussi savoir comment attribuer plusieurs filtre en même temps :
    exemple :
    (col1 supèrieur à 3h10) OU (col2 infèrieur à 1000) OU ...

    Le ET je sais faire, il suffit de faire un filtre de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Filter[] filters = new Filter[] {
          new PatternFilter("S.*", 0, 1), // regex, matchflags, column
          new PatternFilter("Y.*", 0, 1), //Deuxième regex
          new ShuttleSorter(1, false), // column 1, descending
          new ShuttleSorter(0, true), // column 0, ascending
          };
    [/A RESOUDRE]

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Pattern pour filtrer les nombres entiers positifs strictement inférieurs à 1000:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String pattern = "[0-9]{1,3}"
    Pour les heures supérieures à 7 (format hh:mm par exemple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String pattern = "(([12][0-9])|(0?[7-9])):[0-5][0-9]"
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    Merci beaucoup je teste ça !
    Vous avez un idée pour le OU sinon ?

  4. #4
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par CyberChouan
    Pattern pour filtrer les nombres entiers positifs strictement inférieurs à 1000:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String pattern = "[0-9]{1,3}"
    J'ai essayé ça "[0-9]{1990}" pour un nombre supèrieur à 1990 mais ça n'as pas fonctionné

    Citation Envoyé par CyberChouan
    Pour les heures supérieures à 7 (format hh:mm par exemple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String pattern = "([12][0-9])|(0?[7-9]):[0-5][0-9]"
    Parreil j'ai essayé ça : "([12][0-9])|(0?[7-9])h [0-5][0-9]" car le format est "1h 33" et non pas 01:33, mais ça ne marche pas

  5. #5
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Je ne connais pas trop JXList ni JXTable, mais quand j'ai eu besoin de faire un filtre et que j'avais lu la documentation, cela ne semblait pas répondre à mes attentes. Apparemment on ne pouvait utiliser que les expression régulières... ce qui implique que le contenu de la liste (ou de la table) soient des String (ce qui n'est pas mon cas).
    Donc je me suis fait un filtre "perso", c'est dommange qu'ils n'aient pas fait un truc plus générique... (du genre une interface avec une méthode shouldBeShowed(Object content), et en paramètre du filter, au lieu de passer une regex, on passerait un objet implémentant cette interface).

  6. #6
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    En effet, mais bon je vais essayer de faire avec Moi je n'ais que des string !

  7. #7
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par lex13
    En effet, mais bon je vais essayer de faire avec Moi je n'ais que des string !
    C'est bizarre que tu aies des Strings, car apparemment tes données sont des dates ou des heures...

  8. #8
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    Oui mais je les aient mis dans un ArrayList<String[]> ce que je récupère de mon fichier. Il y a des dates des durées des noms... de tout donc tout est en string !

    Par contre j'ais toujours un problème avec ce que l'on m'a donné...(cf plus haut)

  9. #9
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par lex13
    Oui mais je les aient mis dans un ArrayList<String[]> ce que je récupère de mon fichier. Il y a des dates des durées des noms... de tout donc tout est en string !
    OK...
    Tu n'as jamais besoin de leur valeur sous forme de Date (à part pour filtrer)?

  10. #10
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par ®om
    OK...
    Tu n'as jamais besoin de leur valeur sous forme de Date (à part pour filtrer)?
    Non pas spécialement (juste pour filtrer)

    (pb cf plus haut )

  11. #11
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par lex13
    J'ai essayé ça "[0-9]{1990}" pour un nombre supèrieur à 1990 mais ça n'as pas fonctionné
    Je te suggère d'aller lire un tutoriel sur les expressions régulières...
    Celle que tu viens d'écrire vérifie si ta chaîne de caractères est constituée de exactement 1990 chiffres

    Année supérieure ou égale à 1990 (et strictement inférieure à 3000):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern = "(2[0-9]{3})|(199[0-9])"
    Pour la date, c'est moi qui ai fait une erreur depuis le début en tapant trop vite: j'ai oublié une paire de parenthèses (je corrige dans mon premier post):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern = "(([12][0-9])|(0?[7-9]))h [0-5][0-9]";
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  12. #12
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par CyberChouan
    Je te suggère d'aller lire un tutoriel sur les expressions régulières...
    Celle que tu viens d'écrire vérifie si ta chaîne de caractères est constituée de exactement 1990 chiffres

    Année supérieure ou égale à 1990 (et strictement inférieure à 3000):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern = "(2[0-9]{3})|(199[0-9])"
    Ca marche impek merci !

    J'ais déjà été voir des tutos sur les expressions régulières mais jamais a fond.
    D'ailleurs si vous connaissez un bon tutos complet et exhaustif, je suis preneur !

  13. #13
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par lex13
    Ca ne marche pas peux être parceque mes chaines années sont des string et pas des integer ?
    Non, cette fois, ci ça ne marche pas, c'est que tes chaînes n'ont pas le format que tu crois. J'ai vérifié mes expressions régulières et elles fonctionnent (avec des chaînes de caractères, évidemment)

    Pour le tutoriel, celui de Hugo Etiévant sur http://java.developpez.com/ est super!
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  14. #14
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    Oui autant pour moi, ça venait de moi, j'ai résolu le pb maintenant le filtrage des année marche bien !

    J'ai aussi pigé pour les heures merci a tous !

    Merci pour le tuto

  15. #15
    En attente de confirmation mail
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    Il reste donc une seule question non résolu ! Eh oui encore une


    J'aimerais aussi savoir comment attribuer plusieurs filtre en même temps :
    exemple :
    (col1 supèrieur à 3h10) OU (col2 infèrieur à 1000) OU ...

    Le ET je sais faire, il suffit de faire un filtre de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Filter[] filters = new Filter[] {
    new PatternFilter("S.*", 0, 1), // regex, matchflags, column
    new PatternFilter("Y.*", 0, 1), //Deuxième regex
    new ShuttleSorter(1, false), // column 1, descending
    new ShuttleSorter(0, true), // column 0, ascending
    };
    Merci d'avance

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/03/2014, 20h24
  2. [Dates] Une fonction des dates
    Par amine_en_france dans le forum Langage
    Réponses: 3
    Dernier message: 06/03/2007, 12h07
  3. Réponses: 9
    Dernier message: 04/01/2007, 11h58
  4. [Dates] Problème avec des dates et Heures
    Par snakejl dans le forum Langage
    Réponses: 9
    Dernier message: 16/05/2006, 18h04
  5. Réponses: 3
    Dernier message: 27/01/2006, 12h36

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