[R] Expression régulière

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

[R] Expression régulière

#1

Message par Laddy »

Bonjour à tous,

dans le cadre de mon projet, je dois traquer certaines lignes en définissant un pattern , expression régulière pour mettre en couleur dans une listview les différentes lignes.

Fichier txt contient ce type de ligne :
O42 - Logiciel: Adobe Flash Player 10 ActiveX - (.Adobe Systems Incorporated.) [HKLM] -- Adobe Flash Player ActiveX
O42 - Logiciel: Adobe Flash Player 10 Plugin - (.Adobe Systems Incorporated.) [HKLM] -- Adobe Flash Player Plugin
O42 - Logiciel: Adobe Reader 7.0.8 - Français - (.Adobe Systems Incorporated.) [HKLM] -- {AC76BA86-7AD7-1036-7B44-A70700000002}
O42 - Logiciel: Adobe Reader 9.4.1 - Français - (.Adobe Systems Incorporated.) [HKLM] -- {AC76BA86-7AD7-1036-7B44-A94000000001}
O42 - Logiciel: Adobe Shockwave Player 11.5 - (.Adobe Systems, Inc..) [HKLM] -- Adobe Shockwave Player
O42 - Logiciel: Assistant de connexion Windows Live - (.Microsoft Corporation.) [HKLM] -- {DCE8CD14-FBF5-4464-B9A4-E18E473546C7}
J'ai réussi en autohotkey à une époque mais je n'y parviens pas en autoit.
► Afficher le texteAutohotkey
Avant de m'attaquer à la lecture du fichier je voulais travailler sur une ligne précise afin de voir si mon pattern était bon et en lisant la documentation de StringRegExp.
Tous les exemples trouvés reposent sur des pages html

y aurait il une personne pour m'expliquer mon erreur ?

Code : Tout sélectionner

$nOffset = 1
local $i

$array = StringRegExp('O42 - Logiciel: Adobe Reader 7.0.8 - Français - (.Adobe Systems Incorporated.) [HKLM] -- {AC76BA86-7AD7-1036-7B44-A70700000002}','^Adobe Reader [0-9\.]+',1, $nOffset)
for $i = 0 to UBound($array) - 1
If $array > 0 Then
    msgbox("0","Old", $array[$i])
EndIf
Next
 
J'ai tenté aussi avec le fichier sans résultat
ConsoleWrite me met erreur, ou plusieurs 00000

Code : Tout sélectionner

$nOffset = 1
local $i
$OpenDialog = "file.txt"
$file = FileOpen($OpenDialog, 0)
While 1
$ligne = FileReadLine($file) ; ou on lit une ligne
                If @error = -1 Then ExitLoop
$array = StringRegExp($ligne,'^Adobe Reader [0-9\.]+',1, $nOffset)
If $array > 0 Then
for $i = 0 to UBound($array) - 1
    msgbox("0","Old", $array[$i])
Next
EndIf
ConsoleWrite($array[$i])
WEnd
            FileClose($file)
 
Merci d'avance
Laddy
Modifié en dernier par Laddy le mer. 23 févr. 2011 15:44, modifié 1 fois.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Expression régulière

#2

Message par TommyDDR »

^ = Exclusion.

Votre valeur doit-elle matcher ?

Si oui :
► Afficher le texte
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Expression régulière

#3

Message par Laddy »

En fait le résultat doit me sortir toutes les versions en dessous de la version Adobe Reader X
Pour l'exclusion mince je ne l'avais pas compris ainsi mais par commencer par..

Code : Tout sélectionner

$nOffset = 1
$OpenDialog = "File.txt"
$file = FileOpen($OpenDialog, 0)
While 1
Local $Patern = 'Adobe Reader [0-9\.]+'
$ligne = FileReadLine($file) ; ou on lit une ligne
                If @error = -1 Then ExitLoop
$array = StringRegExp($ligne, $Patern, 1, $nOffset)
for $i = 0 to UBound($array) - 1
;~ If $array > 0 Then
    msgbox("0","Old", $array[$i])
;~ EndIf
Next
WEnd
            FileClose($file)
 
Merci TommyDDR, j'ai pu me corriger ;D
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [R] Expression régulière

#4

Message par TommyDDR »

J'ai aussi souvenir que (en java par exemple) ^ servait aussi pour signifier "commence par" cependant, je ne le trouve pas en autoit (l'avez vous lu dans la doc ?).
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [R] Expression régulière

#5

Message par Laddy »

Oui il me semble mais bon mon anglais est rouillé.

Code : Tout sélectionner

Match any character not in the set. e.g. [^0-9] matches any non-digit. To include a caret (^) in a set, put it after the beginning of the set or escape it (\^).
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [R] Expression régulière

#6

Message par TommyDDR »

Moi je le traduit comme ca :

Match any character not in the set. e.g. [^0-9] matches any non-digit. To include a caret (^) in a set, put it after the beginning of the set or escape it (\^).

Match seulement si le caractère n'est pas dans le set. Exemple [^0-9] match tout sauf les chiffres. Pour inclure le symbole (^) dans un set, mettez le après le début du set ou échappez le avec \ (\^)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [R] Expression régulière

#7

Message par Laddy »

Mdr meme traduit je ne le comprend pas plus lol Merci TommyDDR pour la traduction.
Les expressions avec le symbole pas facile en tout cas
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [R] Expression régulière

#8

Message par TommyDDR »

Bref, il ne dit pas que cela signifie "débute par :" ^^
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Expression régulière

#9

Message par jchd »

Oui je sais, la doc manque sur ^ (début de ligne ou de sujet) et $ (fin de ligne ou de sujet).
J'en avais déjà parlé à un dev qui ne souhaitais pas faire figurer cette info pour des raisons inconnues.

Ceci dit, il y a une révision [mollement] en cours sur l'ensemble de l'aide et c'est un vrai gros morceau.
Il y aura d'ici là des nouveautés concernant l'aide sur les RegExps, j'espère.

En attendant, la "saveur" de regexp implémentée dans AutoIt est PCRE de PCRE.org en version 8.0 ou 8.1 (j'sais plus).
Toute doc en hexagonal, en brichou ou en chinois sur PCRE doit pouvoir vous dépanner sur 99% des fonctionnalités employées par quiconque n'est pas gourou patenté en la matière.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [R] Expression régulière

#10

Message par Laddy »

Merci jchd
Je ne sais pas si ça peut aider au niveau d'autoit, mais sur les expressions régulières j'ai retrouvé ce lien : http://www.siteduzero.com/tutoriel-3-14 ... e-1-2.html
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Expression régulière

#11

Message par jchd »

Mouais, c'est orienté PHP, donc ne pas tenir compte des signes # entourant les expressions, c'est un minimum.

Si on reconnaît bien PCRE il y a des contre-vérités grotesques dans ce laïus, comme le fait que les regexp Posix (DFA) sont plus lentes que PCRE (variante améliorée de NFA). C'est juste le contraire : il n'y a _jamais_ de backtracking en DFA (Posix) alors qu'en PCRE, un patron/motif (pattern) mal ficelé ou très inadapté au sujet peut amener à tutoyer l'infini, en temps de traitement.
Il n'empêche que la présentation des métacaractères est correcte.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre