[R] Une histoire de RegExp

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
Popwers
Niveau 4
Niveau 4
Messages : 66
Enregistré le : ven. 01 juin 2012 12:40
Localisation : La Réunion
Status : Hors ligne

[R] Une histoire de RegExp

#1

Message par Popwers »

Bonjour/Bonsoir à tous,

Voila mon problème,
Je souhaite récupéré une valeur précise donc un exemple vaut mieux qu'un long discourt,

Code : Tout sélectionner

$FileSendF = "C:\Lol\Salut\Tu.Avi" ;~ Je souhaite récupéré seulement Tu.Avi
$FileName = StringRegExpReplace($FileSendF,"[\\]",@CRLF) ;~ La il me faut donc mettre le saut de ligne au dernier \
$FilePos = StringInStr($FileName,@CRLF) ;~ Je récupère la position du saut de ligne
$FileName = StringMid($FileName,$FilePos);~ Puis je prend la valeur
étant nul en RegExp :cry:
Je n'arrive pas a faire remplacer le dernier \ par un saut a la ligne, :roll:

Merci d'avance pour votre aide :mrgreen:
Modifié en dernier par Popwers le sam. 23 juin 2012 06:55, modifié 1 fois.
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: [..] Une histoire de RegExp

#2

Message par jchd »

Ta spécification "le dernier backslash" me semble insuffisante :
C:exemple.txt
D:/abc/def/exemple.txt
//serveur/répertoire/fichier.txt
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [..] Une histoire de RegExp

#3

Message par TT22 »

Pourquoi t'embêter à remplacer les \ par des saut de ligne ?
Il existe une fonction qui découpe une chaine de caractères en fonction d'un délimiteur (StringSplit).
Ensuite tu prend la dernière valeur de ton tableau.

Comme ci-dessous :

Code : Tout sélectionner

$FileSendF = "C:\Lol\Salut\Tu.Avi" ;~ Je souhaite récupérer seulement Tu.Avi
$Split = StringSplit($FileSendF,"\")
$FileName = $Split[UBound($Split)-1]

MsgBox(0,"",$FileName)
Cordialement,
TT22
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Une histoire de RegExp

#4

Message par sylvanie »

Code : Tout sélectionner

$name=StringRegExpReplace(@ScriptName,".*\","")
msgbox(0,"Nom du fichier",$name)
 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Popwers
Niveau 4
Niveau 4
Messages : 66
Enregistré le : ven. 01 juin 2012 12:40
Localisation : La Réunion
Status : Hors ligne

Re: [..] Une histoire de RegExp

#5

Message par Popwers »

Merci pour vos aide :)
TT22 a écrit :Il existe une fonction qui découpe une chaine de caractères en fonction d'un délimiteur (StringSplit)
Je ne la connaisser pas :roll:
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Une histoire de RegExp

#6

Message par mikell »

@sylvanie
Je perçois la grosse fatigue du vendredi soir :mrgreen:

Code : Tout sélectionner

msgbox(0,"Nom du fichier",StringRegExpReplace(@scriptfullpath,".*[color=#FF0000][b]\\[/b][/color]",""))
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Une histoire de RegExp

#7

Message par Tlem »

Plutôt que de réinventer la roue, le mieux serait d'utiliser la fonction qui va bien : _PathSplit

Celle-ci permettra de prendre en compte un chemin classique ou UNC ...
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é".
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] Une histoire de RegExp

#8

Message par jchd »

Voilà ! C'est (encore et toujours) le boss qui doit s'y coller. J'avais pourtant bien indiqué les voies sans issue...

Astuce : on peut rechercher dans l'aide.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [R] Une histoire de RegExp

#9

Message par sylvanie »

@Mikell : Ah oui complètement ... les vacances arrivent bientôt :D

Sinon je ne suis pas un fana de _PathSplit, car déclarer 4 variables pour en avoir qu'une d'utile à la fin... c'est pas terrible.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Une histoire de RegExp

#10

Message par mikell »

Pas de voie sans issue si on s'en tient strictement au cahier des charges tel qu'il est présenté dans le post n°1
Et ce n'est pas réinventer la roue que de vouloir récupérer juste la variable recherchée, plutôt qu'une array inutile avec un code plus lourd

Code : Tout sélectionner

;$txt = "\\serveur/répertoire/fichier.txt"
;$txt = "D:/abc/def/exemple.txt"
;$txt = "D://abc//def//exemple.txt"
$txt = "C:\Lol\Salut\Tu.Avi"
msgbox(0,"Nom du fichier", StringRegExpReplace($txt,".*[/|\\]",""))
EDIT : @sylvanie, +1 pour les variables inutiles :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Une histoire de RegExp

#11

Message par Tlem »

@sylvanie et @mikell
Vous n'avez effectivement pas tord dans le fond, mais vous oubliez que tous le monde ne maitrise pas les expressions régulières.

Si tous les codes étaient basés sur les RegExp, ils deviendraient vite imbuvables voir dans certains cas incompréhensibles. AutoIt possède des fonctions intégrées éprouvées qu'il suffit d'utiliser à bon escient.
Certes, une expression régulière peut très largement remplacer une foultitude de lignes de code, mais la moindre petites erreurs dans le pattern risque de renvoyer dans les cas particuliers un résultat erroné.

De plus, vous ne savez pas si Popwers aura besoin ou non de récupérer le chemin ou le lecteur du fichier voir simplement l’extension. Si tel était le cas, il faudrait rajouter une autre RegExp pour le chemin puis encore une autre pour le lecteur, éventuellement encore une pour l’extension, sans compter les questions annexes qui feront que ce sujet comme d'autres deviendra inutilement long.

Par rapport aux machines actuelles, le fait de déclarer 4 variables "inutilement" et de rajouter à une compilation de 1Mo les quelques 37 Ko de l'include File.au3 ne changera pas grand chose.
Sans oublier que la compilation doit probablement contenir plusieurs includes et des centaines de variables inutiles voir même déjà contenir l'include File.au3. ^^

Bref, la RegExp c'est bien et ça fait gagner des tas de lignes, mais la compréhension du code c'est mieux.
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é".
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [R] Une histoire de RegExp

#12

Message par blacksoul305 »

Si je pouvais maîtriser ces satanées expressions régulières comme Mikell... :twisted:
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [R] Une histoire de RegExp

#13

Message par Iste »

blacksoul305 a écrit :Si je pouvais maîtriser ces satanées expressions régulières comme Mikell... :twisted:
Il ne s'y est pourtant pas mis il y a longtemps, il suffit de s'y investir un peu..
Tlem a écrit :Par rapport aux machines actuelles, le fait de déclarer 4 variables "inutilement" et de rajouter à une compilation de 1Mo les quelques 37 Ko de l'include File.au3 ne changera pas grand chose.
Sans oublier que la compilation doit probablement contenir plusieurs includes et des centaines de variables inutiles voir même déjà contenir l'include File.au3. ^^
Tout a fait, on fait de l'AutoIt ici. Ce ne sont pas des problématiques que l'on doit avoir
On compte les variables que quand on fait du bas niveau, ce qui n'est pas le cas avec AutoIt.
Signez ici
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Une histoire de RegExp

#14

Message par mikell »

@black, je te rappelle qu'il y a quelques mois, je n'y connaissais rien ^^
En plus dans ce cas précis, c'est une expression très simple, et très facile à expliquer si le user veut des éclaircissements (ce qui peut être une bonne occasion de s'initier au regexp, d'ailleurs)

@boss, d'accord, c'est pour ça que j'ai bien pris la peine de mentionner "si on s'en tient strictement au cahier des charges tel qu'il est présenté dans le post n°1"

@Iste, et l'optimisation alors ? certains includes sont vraiment *très* gros, et pour ce qui est de la compréhension du code (de manière générale), pas sûr que prendre l'habitude d'utiliser des fonctions pré-construites le plus possible soit si instructif que ça
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Une histoire de RegExp

#15

Message par Tlem »

Certes, mais parfois, il faut lire entre les lignes ... :roll:
Popwers : Age 13 ans
Popwers a écrit :Je souhaite récupéré une valeur précise
Précise ne veut pas forcément dire unique.
Popwers a écrit :étant nul en RegExp
Effectivement on peut diriger notre cher ami vers un tutoriel qui lui permettra de mieux appréhender l'utilisation des RegExp.
Popwers a écrit :Je n'arrive pas a faire remplacer le dernier \ par un saut a la ligne
Pourquoi garder la première partie ? Est-ce pour une utilisation ultérieure ?

Bref, l'interprétation de la lecture d'une question peut être multiple. Il faut donc essayer de répondre au mieux, mais en devançant les questions future. :D
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é".
Avatar du membre
Popwers
Niveau 4
Niveau 4
Messages : 66
Enregistré le : ven. 01 juin 2012 12:40
Localisation : La Réunion
Status : Hors ligne

Re: [R] Une histoire de RegExp

#16

Message par Popwers »

Ouh...
Je ne sait plus quoi dire avec tous c'est messages,
Mais je vous dit quand même merci :mrgreen:

Donc je vois que l'on veut plus de précision,
Alors je veut juste récupéré le nom et l'extension du fichier ensuite je le décortique pour n'avoir que l'extension et avant d'avoir a trouvé le nom du fichier j'utilise le chemin retourné précédemment avec la fonction FileOpenDialog,

J'utilise une include,Mon but étant de faire un transfert de fichier, j'envoie d'abord le nom et l'extension du fichier puis le serveur se charge de le recréer, ensuite j'ouvre mon fichier et le transforme en données Binaire puis j'envoie c'est données et le serveur se charge de reconstruire le fichier avec les données reçues.

Voila :)
Modifié en dernier par Popwers le dim. 24 juin 2012 06:42, modifié 1 fois.
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [R] Une histoire de RegExp

#17

Message par TT22 »

Popwers a écrit :le nom est l'extension [...] le nom est l'extension
Heu t'es sûr là ?
Je ne pense pas que le nom soit le même que l'extension :P
Cordialement,
TT22
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] Une histoire de RegExp

#18

Message par jchd »

Tout ceci dit, si l'entrée fournie est "abc.txt", on trouve quoi en sortie ?
Si elle est "Z:def.zip" : itou ?
Idem encore avec "C:\chemin\fichier.toto.abc. version 5.4.0.exe"
etc.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Popwers
Niveau 4
Niveau 4
Messages : 66
Enregistré le : ven. 01 juin 2012 12:40
Localisation : La Réunion
Status : Hors ligne

Re: [R] Une histoire de RegExp

#19

Message par Popwers »

TT22 a écrit :
Popwers a écrit :le nom est l'extension [...] le nom est l'extension
Heu t'es sûr là ?
Je ne pense pas que le nom soit le même que l'extension :P
Mince pourtant je me suis corrigé en plus avec un correcteur.... (C'est un et) :oops:

@Jchd : Bin euh...on retrouve tourjour le nom du fichier ?
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [R] Une histoire de RegExp

#20

Message par Iste »

@mikell : je maintien. On ne peut parler d'optimisation que dans de très rare cas. Dans tout les autre, c'est la clarté du code et sa propreté qui a la priorité.
Ces cas sont :
-le temps reel, quand on travail en dev sys ou du nomade
-les maths, quand on a des formules tres lourdes qui doivent etre abordé avec une conception mathématique.
-le client/server lourd, quand on a beaucoup de dialogues entre un client et un server (type client léger)
-les traitement dépendants des perf matérielles, comme lire beaucoup d'info sur un DD "lent"
-les opérations lourde, du genre de tres gros traitements de plusieurs secondes.


Avec AutoIt, on a déja pas de temps reel, et il n'est pas optimisé pour les maths.
Donc a moins d'etre en client/server, de certain cas particuliers avec le matos ou d'un script réellement gourmand, on ne fait pas d'optimisation qui grignotent la clarté du script.
D'autant plus pour des raison de légèreté quand on sait que l'interpréteur fait a lui seul l'équivalent de milliers de lignes de code.

En gros :
On gagne presque rien en perf, on perd beaucoup en propreté du code.

Je rejoint donc intégralement Tlem sur ce point.
Signez ici
Répondre