Page 1 sur 1

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

Posté : ven. 12 août 2022 17:01
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,

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

Posté : ven. 12 août 2022 19:48
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:

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

Posté : ven. 12 août 2022 22:33
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)

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

Posté : lun. 15 août 2022 10:06
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. 😉

;)

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

Posté : mer. 12 oct. 2022 11:05
par jpascal
Pourquoi $res = StringRegExp($s, '(?m)[^\\\v]+$', 3) ?

Normalement ce code est suffisant : $res = StringRegExp($s, '(?m)[^\\]+$', 3)