Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Toute la communauté vous remercie

Fonctionnement de 'matches'

Pour parler de tout, et surtout de rien !
Avatar de l’utilisateur
Antoinekl1
Actif
Messages : 2925
Inscription : 23 mai 2015, 08:14

Fonctionnement de 'matches'

Message par Antoinekl1 » 17 juin 2018, 09:15

Bonjour à tous

Quelle est la bonne syntaxe pour rechercher une phase complète dans une variable, à faire dans un block SI ?


" La fenêtre de la chambre des parents est ouverte La fenêtre de la chambre d'anaïs est mal fermée La grande baie est mal fermée" matches "/ATTENTION Des fenêtres ou portes ne sont pas fermées/"] = 1

Ce test ne devrait pas renvoyer 1

Merci
Dernière édition par Antoinekl1 le 17 juin 2018, 14:06, édité 1 fois.
JEEDOM Smart Ultimate + 40 modules zwave et 1BLEA
A vendre ; pack POWER jeedom - Console Clazio sous Android 6

Avatar de l’utilisateur
Fabrice
Actif
Messages : 2270
Inscription : 27 oct. 2016, 22:26
Localisation : Planète terre, IDF, 93

Re: Fonctionnement de 'matches'

Message par Fabrice » 17 juin 2018, 09:29

Bonjour,

Pour comprendre la question, il aurait été préférable de donner un exemple. Car là, votre exemple n'est pas bon.

J'avais donné cela est réponse il n'y a pas longtemps :
viewtopic.php?f=32&t=32874&hilit=matche ... 20#p598053

Autre exemple, si le SI à plusieurs possibilité :
#[Météo][Méteo][Numéro condition]# in [500,501,502]
4 in [1,2,3] (faux)
1 in [1,2,3] (vrais)
Raspberry PI 3 B+ : Jeedom 3.2.11 + 21 plugins
Dongle Z-Wave : AEOTEC AEOEZW090-C (5 périphériques)
Passerelle 433 : RFXCOM-RFXtrx433E (FW 1024) (22 périphériques)
BLEA : Sena UD100-G3 / Raspberry PI Zero W : 4 Nut Find3

Avatar de l’utilisateur
Antoinekl1
Actif
Messages : 2925
Inscription : 23 mai 2015, 08:14

Re: Fonctionnement de 'matches'

Message par Antoinekl1 » 17 juin 2018, 09:34

Fabrice a écrit :
17 juin 2018, 09:29
Bonjour,

Pour comprendre la question, il aurait été préférable de donner un exemple. Car là, votre exemple n'est pas bon.
Merci pour la réponse

J'ai donné un exemple, je reçoit une phrase et je veux verifier que la phrase complète n'est pas déjà présenté dans une variable

" La fenêtre de la chambre des parents est ouverte La fenêtre de la chambre d'anaïs est mal fermée La grande baie est mal fermée" matches "/ATTENTION Des fenêtres ou portes ne sont pas fermées/"

Je vais évaluer : " La fenêtre de la chambre des parents est ouverte La fenêtre de la chambre d'anaïs est mal fermée La grande baie est mal fermée" matches "/ATTENTION Des fenêtres ou portes ne sont pas fermées/"
Résultat : 1
Dernière édition par Antoinekl1 le 17 juin 2018, 13:57, édité 1 fois.
JEEDOM Smart Ultimate + 40 modules zwave et 1BLEA
A vendre ; pack POWER jeedom - Console Clazio sous Android 6

Loup99
Timide
Messages : 67
Inscription : 03 mars 2016, 13:31

Re: Fonctionnement de 'matches'

Message par Loup99 » 17 juin 2018, 13:47

Fabrice a écrit :Bonjour,

Pour comprendre la question, il aurait été préférable de donner un exemple. Car là, votre exemple n'est pas bon.

J'avais donné cela est réponse il n'y a pas longtemps :
viewtopic.php?f=32&t=32874&hilit=matche ... 20#p598053

Autre exemple, si le SI à plusieurs possibilité :
#[Météo][Méteo][Numéro condition]# in [500,501,502]
4 in [1,2,3] (faux)
1 in [1,2,3] (vrais)
J'essaie vraiment de comprendre ton exemple.
Peux-tu la mettre en test d'expression valide.
Je ne réussi pas a la reproduire pour comprendre.
Merci pour ton aide.
Loup

Envoyé de mon LG-H831 en utilisant Tapatalk


Avatar de l’utilisateur
noodom
Actif
Messages : 528
Inscription : 13 juil. 2014, 17:25
Contact :

Re: Fonctionnement de 'matches'

Message par noodom » 18 juin 2018, 12:54

@Antoinekl1
Bizarrement, en testant et modifiant ton test, j'en arrive à la conclusion que c'est le ou qui pose problème.
Dès que tu as matches "/xxx ou yyy/" (au moins un mot avant ET après le 'ou'), le résultat donne toujours 1 !

Pour l'explication, par contre .. :?: :?

Avatar de l’utilisateur
loic
Administrateur
Messages : 11837
Inscription : 01 févr. 2014, 16:21

Re: Fonctionnement de 'matches'

Message par loic » 18 juin 2018, 12:58

C'est un bug de jeedom qui ne sera malheureusement pas corrigé.
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

Avatar de l’utilisateur
Antoinekl1
Actif
Messages : 2925
Inscription : 23 mai 2015, 08:14

Re: Fonctionnement de 'matches'

Message par Antoinekl1 » 18 juin 2018, 14:04

noodom a écrit :
18 juin 2018, 12:54
@Antoinekl1
Bizarrement, en testant et modifiant ton test, j'en arrive à la conclusion que c'est le ou qui pose problème.
Dès que tu as matches "/xxx ou yyy/" (au moins un mot avant ET après le 'ou'), le résultat donne toujours 1 !

Pour l'explication, par contre .. :?: :?
Le OU ? pourquoi il fait un OU ?
JEEDOM Smart Ultimate + 40 modules zwave et 1BLEA
A vendre ; pack POWER jeedom - Console Clazio sous Android 6

Avatar de l’utilisateur
Antoinekl1
Actif
Messages : 2925
Inscription : 23 mai 2015, 08:14

Re: Fonctionnement de 'matches'

Message par Antoinekl1 » 18 juin 2018, 14:06

loic a écrit :
18 juin 2018, 12:58
C'est un bug de jeedom qui ne sera malheureusement pas corrigé.
Bonjour Loic

J'ai pas trop compris pourquoi il fait un OU

il fait un OU entre chaque mot compris dans le "/ /" ?

dans mon cas ce serait plutôt un ET que je voudrais

Comment je peux vérifier si une phrase et dans une variable dans ce cas ?

Apres, pourquoi un bug ne serait pas corrigé...
JEEDOM Smart Ultimate + 40 modules zwave et 1BLEA
A vendre ; pack POWER jeedom - Console Clazio sous Android 6

Avatar de l’utilisateur
loic
Administrateur
Messages : 11837
Inscription : 01 févr. 2014, 16:21

Re: Fonctionnement de 'matches'

Message par loic » 18 juin 2018, 15:18

Ca ne sera pas corrigé car ca demanderai a ce que vous repassiez sur tout vos scénarios pour changer les ET en && et les OU en ||
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

Avatar de l’utilisateur
Antoinekl1
Actif
Messages : 2925
Inscription : 23 mai 2015, 08:14

Re: Fonctionnement de 'matches'

Message par Antoinekl1 » 18 juin 2018, 15:59

loic a écrit :
18 juin 2018, 15:18
Ca ne sera pas corrigé car ca demanderai a ce que vous repassiez sur tout vos scénarios pour changer les ET en && et les OU en ||

Ca se fait dans le script de MAJ ca :-)

j'essaye de comprend, c'est le OU de ma phrase "/ATTENTION Des fenêtres ou portes ne sont pas fermées/" qui pose soucis ?

car sur le font, c'est pas un OU de, je recherche "/ATTENTION Des fenêtres OU BIEN portes ne sont pas fermées/"

mais bien une phrase complète "/ATTENTION Des fenêtres ou portes ne sont pas fermées/"

je n'aurais pas eu le soucis avec cette phrase "/ATTENTION Des ouvertures ne sont pas fermées/" ?
JEEDOM Smart Ultimate + 40 modules zwave et 1BLEA
A vendre ; pack POWER jeedom - Console Clazio sous Android 6

Avatar de l’utilisateur
loic
Administrateur
Messages : 11837
Inscription : 01 févr. 2014, 16:21

Re: Fonctionnement de 'matches'

Message par loic » 18 juin 2018, 16:13

Non c'est un changement trop important pour etre faisable désolé.

Pour le soucis je vais réexpliquer c'est le ou qui est transformé en || tu ne peux absolument rien faire pour l'empecher.
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

Avatar de l’utilisateur
Antoinekl1
Actif
Messages : 2925
Inscription : 23 mai 2015, 08:14

Re: Fonctionnement de 'matches'

Message par Antoinekl1 » 18 juin 2018, 16:50

loic a écrit :
18 juin 2018, 16:13
Non c'est un changement trop important pour etre faisable désolé.

Pour le soucis je vais réexpliquer c'est le ou qui est transformé en || tu ne peux absolument rien faire pour l'empecher.
ok c'est donc bien le ou de ma phrase qui est remplacé

suggestion : mais a partir du moment ou il y a encapsulation entre deux ", ne serait il pas possible de ne pas faire la transpo des OU et ET ?
car dans ce cas on se trouve dans une chaîne de caractères qui ne devrait pas être interprétée.
JEEDOM Smart Ultimate + 40 modules zwave et 1BLEA
A vendre ; pack POWER jeedom - Console Clazio sous Android 6

Avatar de l’utilisateur
kiboost
Actif
Messages : 1033
Inscription : 19 déc. 2017, 15:02
Localisation : France, Bretagne

Re: Fonctionnement de 'matches'

Message par kiboost » 18 juin 2018, 16:57

"/ATTENTION Soit des fenêtres, soit des portes ne sont pas fermées/"
"/ATTENTION Des ouvertures ne sont pas fermées/"
"/ATTENTION Des fenêtres / portes ne sont pas fermées/"

:arrow:

Prod : Jeedom Stable sur Smart | Z-wave
Synology DS1512+|Rpis Kodi|Qivivo-Jeedom|Netatmo|SNIPS-Tips
Market

Avatar de l’utilisateur
loic
Administrateur
Messages : 11837
Inscription : 01 févr. 2014, 16:21

Re: Fonctionnement de 'matches'

Message par loic » 18 juin 2018, 17:32

Antoinekl1 a écrit :
18 juin 2018, 16:50
loic a écrit :
18 juin 2018, 16:13
Non c'est un changement trop important pour etre faisable désolé.

Pour le soucis je vais réexpliquer c'est le ou qui est transformé en || tu ne peux absolument rien faire pour l'empecher.
ok c'est donc bien le ou de ma phrase qui est remplacé

suggestion : mais a partir du moment ou il y a encapsulation entre deux ", ne serait il pas possible de ne pas faire la transpo des OU et ET ?
car dans ce cas on se trouve dans une chaîne de caractères qui ne devrait pas être interprétée.
Je ne sais pas faire
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

Avatar de l’utilisateur
kiboost
Actif
Messages : 1033
Inscription : 19 déc. 2017, 15:02
Localisation : France, Bretagne

Re: Fonctionnement de 'matches'

Message par kiboost » 18 juin 2018, 18:33

Petit test en reprenant le fichier utils.inc.php, function evaluate($_string)

Si l'expression SI est: 1 = 2 ET "bibi" = "bibi ou bobo" OU 32 == 24
çà la transforme en: 1 == 2 && "bibi" == "bibi || bobo" || 32 == 24
Avec le test: 1 == 2 && "bibi" == "bibi ou bobo" || 32 == 24

En gros, je détecte les strings entre double quote, je les remplace pour pas les évaluer par la fonction evaluate($_string), puis je les remets.

Code : Tout sélectionner

<?php


$expression = '1 = 2 ET "bibi" = "bibi ou bobo" OU 32 == 24';
echo 'scenario expression: ', $expression, "<br>";


$_string = $expression;

$test = preg_match_all('/"([^"]+)"/', $_string, $matches);
for($i=0; $i<count($matches); $i++){
	echo 'Found: ', $matches[0][$i], "<br>";
	$_string = str_replace($matches[0][$i], '--preparsed'.$i.'--', $_string);
}

echo '_string after parsed: ', $_string, "<br>";

//CODE utils.inc.php function evaluate($_string)

$expr = str_replace(array(' et ', ' ET ', ' AND ', ' and ', ' ou ', ' OR ', ' or ', ' OU '), array(' && ', ' && ', ' && ', ' && ', ' || ', ' || ', ' || ', ' || '), $_string);
$expr = str_replace('==', '=', $expr);
$expr = str_replace('=', '==', $expr);
$expr = str_replace('<==', '<=', $expr);
$expr = str_replace('>==', '>=', $expr);
$expr = str_replace('!==', '!=', $expr);
$expr = str_replace('!===', '!==', $expr);
$expr = str_replace('====', '===', $expr);

//

echo 'expr: ', $expr, "<br>";

for($i=0; $i<count($matches); $i++){
	$expr = str_replace('--preparsed'.$i.'--', $matches[0][$i], $expr);
}


echo 'expr unparsed: ', $expr, "<br>";

?>

C'est un test en 5mins, je n'ai évidemment pas la prétention de trouver la solution aussi rapidement, si çà trouve ce n'est pas là que çà se passe.

Loic jugera donc de la pertinence, sachant que c'est du vite faite et donc que çà risque de tout péter et que je suis sans doute passé à coté de l'essentiel :lol: :lol:

Prod : Jeedom Stable sur Smart | Z-wave
Synology DS1512+|Rpis Kodi|Qivivo-Jeedom|Netatmo|SNIPS-Tips
Market

Avatar de l’utilisateur
loic
Administrateur
Messages : 11837
Inscription : 01 févr. 2014, 16:21

Re: Fonctionnement de 'matches'

Message par loic » 18 juin 2018, 18:54

J'avais testé un truc comme ca ca marche tant qu'on est dans le cas standard mais sur un cas comme ca :
"coucou" == "sla'u" && 'je cherche ou ' == "coucou l'ou" ||'m\'ou' == 'l\"ou'

La de suite ça marche plus... C'est tiré par les cheveux mais c'est du déjà vu....
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

Avatar de l’utilisateur
tomdom
Actif
Messages : 684
Inscription : 14 nov. 2016, 05:46

Re: Fonctionnement de 'matches'

Message par tomdom » 18 juin 2018, 19:16

Bonjour,

Je n'ai pas de solution, par contre une simplification (si un jour la fonction est modifiée). La ligne :

Code : Tout sélectionner

$expr = str_replace(array(' et ', ' ET ', ' AND ', ' and ', ' ou ', ' OR ', ' or ', ' OU '), array(' && ', ' && ', ' && ', ' && ', ' || ', ' || ', ' || ', ' || '), $_string);
pourrait être remplacée par

Code : Tout sélectionner

$expr = str_ireplace(array(' et ', ' and ', ' ou ', ' or '), array(' && ', ' && ' ,' || ', ' || '), $_string);
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.

Avatar de l’utilisateur
Antoinekl1
Actif
Messages : 2925
Inscription : 23 mai 2015, 08:14

Re: Fonctionnement de 'matches'

Message par Antoinekl1 » 18 juin 2018, 19:50

loic a écrit :
18 juin 2018, 18:54
J'avais testé un truc comme ca ca marche tant qu'on est dans le cas standard mais sur un cas comme ca :
"coucou" == "sla'u" && 'je cherche ou ' == "coucou l'ou" ||'m\'ou' == 'l\"ou'

La de suite ça marche plus... C'est tiré par les cheveux mais c'est du déjà vu....
La question est donc quel cas à le plus de chance de se produit ?
JEEDOM Smart Ultimate + 40 modules zwave et 1BLEA
A vendre ; pack POWER jeedom - Console Clazio sous Android 6

Avatar de l’utilisateur
loic
Administrateur
Messages : 11837
Inscription : 01 févr. 2014, 16:21

Re: Fonctionnement de 'matches'

Message par loic » 18 juin 2018, 19:57

Celui que j'ai donné il se produit souvent quand il y a un ' comme valeur de commande
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

Avatar de l’utilisateur
Antoinekl1
Actif
Messages : 2925
Inscription : 23 mai 2015, 08:14

Re: Fonctionnement de 'matches'

Message par Antoinekl1 » 18 juin 2018, 20:20

Un ' utilisé entre 2 " devrait être protégé par un \
JEEDOM Smart Ultimate + 40 modules zwave et 1BLEA
A vendre ; pack POWER jeedom - Console Clazio sous Android 6

Répondre

Revenir vers « Discussions Générales »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 6 invités