[R] Utilisation de StringRegExReplace

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Adenadels
Niveau 2
Niveau 2
Messages : 15
Enregistré le : dim. 24 mai 2009 11:22
Localisation : Strasbourg
Status : Hors ligne

[R] Utilisation de StringRegExReplace

#1

Message par Adenadels »

Peux-t-on remplacer le code ci-dessous par une seule ligne en utilisant StringRegExReplace ? (j'avoue ne pas trop comprendre encore le fonctionnement des regex).
Mon tableau (au départ une ligne texte) fait plus de 40 caractères, donc la boucle se ferait 40 fois...

Le but étant de taper un texte, et de le transformer pour donner les touches équivalentes pour un clavier qwerty...
par exemple un mot de passe bios, alors que le clavier est encore en qwerty... un mot de passe azure donnerait qwure
(à taper sur son clavier azerty)

Code : Tout sélectionner

For $i = 1 To $Array[0][0]
   $Qwerty = StringReplace($Texte, $Array[$i][0], $Array[$i][1])
Next
Merci
Modifié en dernier par Adenadels le sam. 13 févr. 2010 05:37, modifié 1 fois.
Salutations
Jean-Luc
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Utilisation de StringRegExReplace

#2

Message par Tlem »

StringRegExpReplace comme sont nom l'indique au début, traite une chaine et non un tableau. Donc en la circonstance il ne vous amènera rien de plus car il faudra d'une manière ou d'une autre lire le tableau. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Adenadels
Niveau 2
Niveau 2
Messages : 15
Enregistré le : dim. 24 mai 2009 11:22
Localisation : Strasbourg
Status : Hors ligne

Re: [..] Utilisation de StringRegExReplace

#3

Message par Adenadels »

Comme je le disais, mal exprimé peut-être, je n'ai pas de tableau au départ, mais deux chaînes de caractère :
Soit
$Azerty = "AZERTYUIOP.....,;:..."
$Qwerty = "QWERTYUIOP....,Mm..."

Et le texte à modifier : $Texte = "quel texte a modifier"

Ce que je voudrais réalier, et je me suis rendu compte que mon script ne fonctionnerait pas (un A serait transformé en Q, mais par la suite le Q serait à nouveau transformé en A !!).

Et je me demandais si StringRegExReplace pouvait faire un truc genre
$Result = StringRegExReplace($Texte, $Azerty, $Qwerty)

$Result devrait être égal à "auel texte q ,odifier"

Remplacer dans la chaîne texte tous les éléments de $Azerty par ceux de $Qwerty (tous les A en Q, tous les Z en W etc..), et en une seule passe (pas de A en Q pour revenir de Q en A ensuite comme avec StringReplace et un tableau).

Donc, ma question à un spécialiste des expressions régulières (que je ne maîtrise pas du tout), est : est-ce que RegEx sait faire ça ?

Merci
Salutations
Jean-Luc
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Utilisation de StringRegExReplace

#4

Message par Tlem »

Comme je vous l'ai dit, StringRegExReplace() ne peut vous aider dans ce cas, car cette fonction remplace une expression et non de multiples expressions ...

Si on s'en tient aux lettres, voici une solution :

Code : Tout sélectionner

$String = "AzERTYUIOPm"

$Azerty = "aAzZqQmMwW,,"
$Qwerty = "qQwWaA;;zZmM"
$aAzerty = StringSplit($Azerty, "")
$aQwerty = StringSplit($Qwerty, "")

For $i = 1 To $aAzerty[0]
    $String = StringReplace($String, $aAzerty[$i], $aQwerty[$i], default, 1)
Next

MsgBox(0, '', $String)
Si vous en voulez plus, alors complétez avec les autres caractères. :roll:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Adenadels
Niveau 2
Niveau 2
Messages : 15
Enregistré le : dim. 24 mai 2009 11:22
Localisation : Strasbourg
Status : Hors ligne

[R] Utilisation de StringRegExReplace

#5

Message par Adenadels »

Dans votre exemple, le résultat n'est pas bon... seule la lettre m est changée, les autres sont revenues à leur état initial, parce que changées deux fois... comme chez moi.
Il va falloir traiter le string d'entrée en tant que tableau également !!

Voilà ce que ça donne :
► Afficher le texte
Dommage pour les expressions régulières (que je vais quand même tâcher d'étudier si je trouve un bon tuto).

Merci pour vos réponses
Salutations
Jean-Luc
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Utilisation de StringRegExReplace

#6

Message par Tlem »

Effectivement, j'avais oublié l'histoire du chien qui ce mord la queue ...
Donc me revoici avec une nouvelle version bien plus logique.
► Afficher le texte
En effet, il faut impérativement traiter la chaine caractère par caractère, ce qui évite de modifier une lettre qui l'à déjà été ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Adenadels
Niveau 2
Niveau 2
Messages : 15
Enregistré le : dim. 24 mai 2009 11:22
Localisation : Strasbourg
Status : Hors ligne

Re: [R] Utilisation de StringRegExReplace

#7

Message par Adenadels »

Dans votre dernier exemple, qui évite l'usage des Array et le StringReplace, ce qui le rend certainemement plus rapide, il suffit de remplacer la ligne
If $Char = $aAzerty[$i] Then
par
If $Char == $aAzerty[$i] Then
Pour obtenir la différenciation majuscules/minuscules, et le tour est joué.

En plus, dans ce programme, il sufft de ne nommer que les caractères différents entre azerty et qwerty.

Merci pour toutes vos réponses et suggestions.

Et voilà le résultat : (édité pour tenir compte de la fonction de Tlem et la possibilité de traduire dans les deux sens)
► Afficher le texte
Modifié en dernier par Adenadels le dim. 14 févr. 2010 11:07, modifié 1 fois.
Salutations
Jean-Luc
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Utilisation de StringRegExReplace

#8

Message par Tlem »

Oui, je connais l'utilisation de '==', mais dans votre cas, il faut comparer tous les caractères 1 par 1 et le changer par l'équivalent dans l'autre 'table'.

Si vous voulez gagner quelques micro-secondes, vous pouvez vérifier que le caractère à contrôler se trouve dans la chaine $Azerty, auquel cas on fait le traitement.
Mais je doute que vous votre chaine à convertir soit très longue. :roll:

Edit : Voilà quelque chose qui va mieux. ;)
http://www.autoitscript.fr/forum/viewto ... =21&t=4688
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre