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

Langage Java Discussion :

Evaluation d'une expression logique contenu dans un String


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Par défaut Evaluation d'une expression logique contenu dans un String
    Bonjour tout le monde,

    Via une interface je permet à un utilisateur de créer une petite requête de filtrage de base de données au format txt. Rien de très poussé au niveau opérateur logique , juste des ET , OU et les paranthèses. Tout cela pour combiner plusieurs filtres sur les différents champs de la base.

    Comment dois je faire ensuite pour afficher seulement les lignes qui correspondent au filtre de l'utilisateur ??

    J'ai une méthode qui va me renvoyer true/false pour chaque partie du filtre.

    A partir de la je me retrouve avec un String, qui représente une expression logique ( et, ou , paranthèses, true, false) qu'il faut que j'evalue pour valider la ligne ou non.

    Comment puis je faire cela ??

    Merci.

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    le plus simple est peut être de faire exécuter la requete avec le filtre dans la clause WHERE non ? Toi tu veux trier une collection avec le filtre ? galère ...

    fait le faire par le bdd, c'est 100 fois plus simple

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Par défaut
    Citation Envoyé par in
    fait le faire par le bdd, c'est 100 fois plus simple
    Je comprends pas bien ce que tu veux dire par la.
    Je travaille sur des fichier texte où les champs sont délimités par un caractère séparateur.

  4. #4
    Membre expérimenté Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Par défaut
    Ce qu'il te dit c'est que tu n'as pas besoin de t'embeter a tester la faisabilite de la requete de l'utilisateur car si elle est fausse lors de son execution elle ne renverra pas de resultat.
    Si tu recuperes ton filtre tu n'as qu'a l'appliquer a ta requete comme dit "in" dans le where.
    Et en ce qui concerne tes separateurs tu les remplace par les bons separateurs de la requete.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Par défaut
    Je me suis mal exprimé en fait.
    Quand j'ai mentionné une "requête" je ne faisais en aucun cas allusion au SQL. Je n'ai à disposition qu'un simple fichier texte que je dois filtrer en fonctions des besoins de l'utilisateur.

    Exemple : le fichier est de la forme suivante.

    Id#Email#Genre#Nom#Prenom#departement
    1#tt@tt.com#Masculin#Dupond#Mathieu#75
    ....
    ....


    L'utilisateur veut par exemple extraire les lignes du fichier correspondant "aux hommes qui habitent paris et toutes les femmes"

    via l'interface l'utilisateur va composer son filtre qui sera de la fome :

    ((Genre = masculin ET departement=paris) OU genre = féminin)

    Genre=masculin pour moi ça revient à verifier si la chaine de caractère du 3eme token d'une ligne du fichier correspond à "masculin" et en fonction de ça je renvoie true ou false.

    Donc pour chaque ligne du fichier je vais obtenir une expression logique du type ((false && true) || true)
    pour cette exemple l'evaluation de cette expréssion logique est VRAI donc la ligne correpond au filtre de l'utilisateur, donc je vais l'afficher. Et je fais ça pour chaque ligne.

    Mon problème c'est comment evaluer l'expression logique ??

    Si vous voyez également un autre moyen bien plus rapide de faire ça, je suis evidemment preneur ! Sachant que je n'ai aucune possibilité de conversion du fichier en un format différent ...

  6. #6
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    alors, c'est peut être pas ce que tu veux, mais je pense que le plus simple, et le moins lourd niveau traitement serait de charger le contenu de ce fichier dans une table et de l'interroger. Si tu peux le faire n'hésite pas.

    Sinon peut etre le convertir en XML et le parser en évaluant ton expression logique. Au niveau de l'évaluation de l'expression, c'est vrai que niveau conception c'est pas un truc forcément bateau .

    Sinon peut etre que tu peux transformer ton expression logique en un pattern pour une regexp ? sur ce point, je ne pense pas être du meilleur conseil

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

Discussions similaires

  1. Sujet : Java - calculer une formule arithmétique contenue dans un "String"
    Par uchimizu dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 10/02/2008, 13h38
  2. [Oracle 9i] Evaluation d'une expression
    Par Process Linux dans le forum Oracle
    Réponses: 2
    Dernier message: 21/03/2006, 12h55
  3. Evaluation d'une expression arithmétique
    Par MysticKhal_0 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 10/03/2006, 18h25
  4. Réponses: 10
    Dernier message: 18/11/2004, 23h12
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

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