Page 2 sur 2
Re: [..] Avoir tous les résultats avec StringRegExp
Posté : lun. 08 sept. 2008 21:29
par tolf
oui mais comme à priori mon script utilise une ligne que l'utilisateur choisit (j'avais oublié de le préciser), il faut que ça marche tout le temps, même avec des symboles improbables qui ne sont pas impossibles.
Re: [..] Avoir tous les résultats avec StringRegExp
Posté : lun. 08 sept. 2008 21:49
par sylvanie
Tlem a écrit :J'ai pas trop compris la remarque de Sylvanie, car ce pattern
[^,"\s]+|("[^"]*") crée bien le tableau comme le souhaite tolf :
Code : Tout sélectionner
[0] salut
[1] "bonjour, comment allez vous ?"
[2] "moi, je vais bien"
[3] #00ffff
[4] 354
et non le résultat présenté par Sylvanie.

c'est par ce que j'ai changé le message d'origine par
'
salut tout le monde,"bonjour, comment allez vous ?","moi, je vais bien",#00ffff,354'
pour illustrer le fait que si on a plusieurs mots séparés par une space aveant de renconter une "," alors on a un découpage mot à mot.
car [^,"\s]+ peut être vu comme un stringsplit qui agirait à la fois sur les guillemet ' " ' les ' , ' et les espaces (retours tab...)
Re: [..] Avoir tous les résultats avec StringRegExp
Posté : lun. 08 sept. 2008 22:17
par moutelous
Euh .... ça veux dire quoi cette petite phrase ?
tolf a écrit :oui mais comme à priori mon script utilise une ligne que l'utilisateur choisit (j'avais oublié de le préciser), il faut que ça marche tout le temps, même avec des symboles improbables qui ne sont pas impossibles.
Re: [..] Avoir tous les résultats avec StringRegExp
Posté : mar. 09 sept. 2008 00:59
par Tlem
Désolé Sylvanie, mais je ne comprend toujours pas.
J'ai pris la chaîne dans tous les sens, je lui ais rajouté des espaces avant, après, avant et après les différentes virgules et guillemets sans obtenir le 'bug' dont tu parle.
Donne nous un exemple de chaîne qui est sensé posé problème s'il te plaît pour que je test ça ...
Re: [..] Avoir tous les résultats avec StringRegExp
Posté : mar. 09 sept. 2008 10:49
par moutelous
Bonjour
@Tlem :
Tlem a écrit :Désolé Sylvanie, mais je ne comprend toujours pas.
J'ai pris la chaîne dans tous les sens, je lui ais rajouté des espaces avant, après, avant et après les différentes virgules et guillemets sans obtenir le 'bug' dont tu parle.

Sylvanie a simplement ajouté des mots et espaces après le premier salut et avant la virgule ...
sylvanie a écrit :c'est par ce que j'ai changé le message d'origine par
'salut tout le monde,"bonjour, comment allez vous ?","moi, je vais bien",#00ffff,354'
pour illustrer le fait que si on a plusieurs mots séparés par une space aveant de renconter une "," alors on a un découpage mot à mot.
Mais bon ... on fini toujours par trouver une solution :
Presque parfait .... il reste un petit défaut minime (mise à part que je n'ai pas pris en compte tous les caractères spéciaux ... )
A+
Re: [..] Avoir tous les résultats avec StringRegExp
Posté : mar. 09 sept. 2008 16:47
par tolf
moutelous a écrit :Euh .... ça veux dire quoi cette petite phrase ?
tolf a écrit :oui mais comme à priori mon script utilise une ligne que l'utilisateur choisit (j'avais oublié de le préciser), il faut que ça marche tout le temps, même avec des symboles improbables qui ne sont pas impossibles.
je répondais à la remarque de Tlem :
Tlem a écrit :@tolf vous pouvez vous simplifier la vie en utilisant comme séparateur une suite de symboles improbable (genre ~#~) et modifier la fonction StringSplit en mettant le flag à 1
et donc je disais que j'avais oublié de préciser que l'utilisateur (différent du programmateur) choisissait la chaîne de caractères qui est ensuite décomposée par mon script.
Re: [..] Avoir tous les résultats avec StringRegExp
Posté : mar. 09 sept. 2008 17:06
par moutelous
Bonjour,
Ok Tolf je n'avais pas suivi ..... et donc
Code : Tout sélectionner
salut,"bonjour, comment allez vous ?" mots hors citation "ceci est la suite de bonjour,...","moi, je vais bien",#00ffff,354,\v marque une virgule de séparation, ce "|" ne sert pas de séparation
ma proposition de Regex juste au dessus ne conviendra pas à cause de l'insertion de guillemet dans une phrase entre virgule .....
A suivre donc ...
Re: [..] Avoir tous les résultats avec StringRegExp
Posté : mar. 09 sept. 2008 21:13
par sylvanie
Bonsoir,
je suis trops fatigué ce soir pour creuser ce sujet, qui pourtant est passionnant ...
c'est juste pour Tlem, si l'explication de moutelous ne suffisait pas :
prends ce morceau de code :
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
$resultat = StringRegExp('salut tout le monde,"bonjour, comment allez vous ?","moi, je vais bien",#00ffff,354', '[^,"\s]+|("[^"]*")', 3)
_ArrayDisplay($resultat)
on observe bien
[0]|salut
[1]|tout
[2]|le
[3]|monde
[4]|"bonjour, comment allez vous ?"
[5]|"moi, je vais bien"
[6]|#00ffff
[7]|354
Alors qu'à la base on cherche un split par virgule :
[0]|salut tout le monde
[1]|"bonjour, comment allez vous ?"
[2]|"moi, je vais bien"
[3]|#00ffff
[4]|354
Bon et bien moi, je ne vais pas faire de vieux os ce soir ... bonne nuit ZZZZZZ
Re: [..] Avoir tous les résultats avec StringRegExp
Posté : mar. 09 sept. 2008 21:56
par moutelous
Bonsoir,
Concernant l'exemple donné par Sylvanie le code suivant est OK ...
► Afficher le texte
#include <Array.au3>
$resultat = StringRegExp('salut tout le monde,"bonjour, comment allez vous ?","moi, je vais bien",#00ffff,354', '[^,"]+\b|("[^"]*")|[%@^\`|{#~}&%]+', 3)
_ArrayDisplay($resultat)
Par contre Tolf a apporté une nouvelle contrainte (phrase entre virgule incluant mot entre guillemet) et donc mon Regex ne match plus ...sniff
► Afficher le texte
#include <Array.au3>
$resultat = StringRegExp('salut,"bonjour, comment allez vous ?" mots hors citation "ceci est la suite de bonjour,...","moi, je vais bien",#00ffff,354,\v marque une virgule de séparation, ce "|" ne sert pas de séparation', '[^,"]+\b|("[^"]*")|[%@^\`|{#~}&%]+', 3)
_ArrayDisplay($resultat)
Bonne soirée et A+
Re: [..] Avoir tous les résultats avec StringRegExp
Posté : mer. 10 sept. 2008 00:45
par Tlem
En tout cas mon code avec le double séparateur fonctionne à merveille.
C'est parfois moins prise de tête quand même.

Re: [..] Avoir tous les résultats avec StringRegExp
Posté : mer. 10 sept. 2008 08:28
par moutelous
Bonjour,
Il est vrai, Monsieur Tlem, que votre solution fonctionne à merveille ,chapeau bas .....
Mais j'adore me prendre la tête .....
A+
Re: [..] Avoir tous les résultats avec StringRegExp
Posté : mer. 10 sept. 2008 10:26
par Tlem
moutelous a écrit :Il est vrai, Monsieur Tlem, que votre solution fonctionne à merveille ,chapeau bas ....
Rhoooo le moqueur ...
moutelous a écrit :Mais j'adore me prendre la tête .....
Idem, quand je connais.
Mais la les expressions régulières, ... je jette l'éponge.

Re: [..] Avoir tous les résultats avec StringRegExp
Posté : mer. 10 sept. 2008 12:25
par tolf
moutelous a écrit :Par contre Tolf a apporté une nouvelle contrainte (phrase entre virgule incluant mot entre guillemet) et donc mon Regex ne match plus ...sniff
a priori, je pensais l'avoir dit dès le départ mais mon exemple n'étais alors pas assez général (vous m'excuserez

).
D'ailleurs, mon premier pattern essayait de bien prendre en compte les guillemets au sein d'une phrase :
[^,"]*("[^"]*")*[^,"]* : ce qui est en rouge marque le début de la phrase et ce qui est en bleu la fin.
J'avais d'ailleurs fait une petite erreur puisque les guillemets peuvent s'ouvrir et se refermer plusieurs fois, ce qui donnerait (si bien sûr il n'y avait pas le bug de la chaîne vide

) :
[^,"]*("[^"]*"[^,"]*)*