[..] Récupéré le nom d’un fichier avec son extension dans une chaine de caractère

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
TravelSolar
Niveau 1
Niveau 1
Messages : 2
Enregistré le : jeu. 11 août 2022 23:12
Status : Hors ligne

[..] Récupéré le nom d’un fichier avec son extension dans une chaine de caractère

#1

Message par TravelSolar »

Bonjour, j’ai récupéré une chaine de caractère comme si dessous en exemple :
C:\Users\Windows11\paneau solaire\verre goutiere\0\verre goutiere vue de dessus.jpg

J’aimerais dans cet exemple juste récupérer uniquement le nom du fichier avec son extension verre gouttière vue de dessus.jpg
Comment faire ?
Sachant que je dois traiter un fichier qui fait plus de 7 000 lignes et que les informations du fichier ont déjà était traité et filtré en amont à partir d’une bibliothèque contenant plus de 70 000 fichiers. De plus, la valeur de la chaine change en fonction du résultat de la fonction random. Certaine chaine peuvent contenir 20 caractères comme 90 par exemple. Un aperçu du code en question sera plus parlant.
for $y=1 to 10
   $v=_FileCountLines($fc)   ; $fc est la variable qui pointe au fichier déjà traité au dessus de ce code, code non affiché ici.
   $z=random(0,$v,1)
   $x=fileopen($fc,0)
   $w=filereadline($x,$z)
   fileclose($x)
   if $w="" then
   else
        ; action a faire en utilisent la variable $w. C'est $w qui me retourne la chaine de caractère.
   endif
next
Bien amicalement,
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Récupéré le nom d’un fichier avec son extension dans une chaine de caractère

#2

Message par walkson »

Bonjour,
Je vous mets 3 méthodes

Code : Tout sélectionner

#include <WinAPIShPath.au3>
; première méthode
$Filename = _WinAPI_PathFindFileName("C:\Users\Windows11\paneau solaire\verre goutiere\0\verre goutiere vue de dessus.jpg")
MsgBox(0,"1",$Filename)

; seconde méthode
$Filename = ""
$rep = StringRegExp("C:\Users\Windows11\paneau solaire\verre goutiere\0\verre goutiere vue de dessus.jpg","([^:\\/]*?)(?:\.([^ :\\/.]*))?$",1)
$Filename = $rep[0]&"."& $rep[1]
MsgBox(0,"2",$Filename)

; troisième méthode
$Filename = ""
$rep = StringSplit("C:\Users\Windows11\paneau solaire\verre goutiere\0\verre goutiere vue de dessus.jpg","\")
$Filename = $rep[$rep[0]]
MsgBox(0,"3",$Filename)
Si Michel passe par ici, il vous proposera une méthode encore plus simple pour les StringRegExp() :mrgreen:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
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écupéré le nom d’un fichier avec son extension dans une chaine de caractère

#3

Message par mikell »

Youps le voilà :mrgreen:
Evidemment c'est du regex. On peut traiter les lignes une par une, ou traiter carrément l'ensemble du texte issu du FileRead (à éventuellement adapter selon la forme du texte dans le fichier)
Il y a plusieurs expressions possibles, voilà 2 exemples :

; Pour une ligne :
$path = "C:\Users\Windows11\paneau solaire\verre goutiere\0\verre goutiere vue de dessus.jpg"
$res = StringRegExpReplace($path, '.+\\(.+)$', "$1")
MsgBox(0, "", $res)

; pour plusieurs lignes :
#Include <Array.au3>

$s = "C:\Users\Windows11\paneau solaire\verre goutiere\0\verre goutiere vue de dessus 1.jpg" & @crlf & _
   @crlf & _
   "C:\Users\Windows11\paneau solaire\verre goutiere\0\verre goutiere vue de dessus 2.jpg" & @crlf & _
   "C:\Users\Windows11\paneau solaire\verre goutiere\0\verre goutiere vue de dessus 3.jpg"
$res = StringRegExp($s, '(?m)[^\\\v]+$', 3)
_ArrayDisplay($res)
" 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 : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupéré le nom d’un fichier avec son extension dans une chaine de caractère

#4

Message par Tlem »

Bonjour.
Sinon, pour les non initiés a la RegEx, il existe la fonction

Code : Tout sélectionner

_PathSplit()
.

Par rapport à ce que Michel vous a donné il faudra un code un peu plus long, mais là compréhension sera meilleure. 😉

;)
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é".
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] Récupéré le nom d’un fichier avec son extension dans une chaine de caractère

#5

Message par jpascal »

Pourquoi $res = StringRegExp($s, '(?m)[^\\\v]+$', 3) ?

Normalement ce code est suffisant : $res = StringRegExp($s, '(?m)[^\\]+$', 3)
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Répondre