Bonjour à tous.
Voilà j'ai un dossier avec des fichiers pdf dont les noms répondent à une logiques
ex : EE020-F201608.pdf

Est-il possible de récupérer dans une variable l'ensemble des fichiers contenant dans leur nom : "2016".
J'imagine que l on peut faire cela grâce au regex mais ne suis pas sur du tout.
De plus, l'an prochain, le dossier contiendra des fichiers appelés "EE020-F201708.pdf", peut-on donc intégrer une $variable dans une expression régulière ?

Merci de votre coup de pouce
Modifié par urlien (16 Sep 2016 - 15:19)
J'ai omis de vous monter mon exemple :

$test = 2015;
if (preg_match("#^[\w.-]+F[".$test."]{4}+[\d]{2}\.pdf#i", "EE020-F201603.pdf"))
{
	debug('VRAI');
}
         else
{
	debug('FAUX');
}
?>

Cela semble fonctionner, mais puis-je faire cela :

//Je récupère dans ma variable 2016, tous les noms de fichiers qui comporte 2016
$2016 = $dir->find("#^[\w.-]+F[".$test."]{4}+[\d]{2}\.pdf#i");
Merci de ton retour.
Pourquoi ne pas l'utiliser ? Parce-que je la découvre Smiley cligne !

Du coup un peux de mal à comprendre son fonctionnement :
Dans mon dossier, je veux récupérer tout les fichiers PDF dont le nom est composé de ...2016...

$files = glob("*2016*"); 
foreach ($files as $filename) { 
$list2016 = $filename; 
} 


Mais j'ai 0 retour !
Smiley confus
urlien a écrit :
Merci de ton retour.
Pourquoi ne pas l'utiliser ? Parce-que je la découvre Smiley cligne !


héhé


curieux.. moi cela fonctionne
// Recupère les images qui contienne _thumb.  
foreach (glob("*_thumb.*") as $filename) {  
    echo $filename."<br />";  
} 

du coup quelque chose comme cela :

$report_files = glob("TON_REPERTOIRE\/(.*)2016(.*)\.pdf");




EDIT :

mais...

$files = glob("*2016*"); 
foreach ($files as $filename) { 
$list2016 = $filename; 
} 


glob("*2016*"); ... il manque ton répertoire ?
Modifié par JENCAL (16 Sep 2016 - 18:14)
J ai pas compris l exemple du manuel php alors...
Je teste ça alors...
Je tente ça et fais un retour.
Hello,
Bon je penses que le souci est dans ma regex Smiley ohwell

Puisque si je note cela, c'est à dire je cherche le fichier avec son nom complet, cela fonctionne


foreach (glob(WWW_ROOT . 'files\facture\030\CC030-F201608.pdf') as $filename) {  
		debug($filename);  
	} 


alors que là


	foreach (glob(WWW_ROOT . 'files\facture\030\/(.*)2016(.*)\.pdf') as $filename) {  
		debug($filename);  
	} 


Il me retourne rien...
Bonsoir.

Il vaut mieux tester ses regex avant de les utiliser...

Le caractère * est délicat à manier... (PapyJP en sait quelque chose...)

L'expression suivante :
files\\facture\\030\\.*?-.*?2016.*?\.pdf
fonctionne pour l'exemple que vous citez, mais peut-être cherchez-vous à être plus restrictif...

Smiley smile
Modifié par Zelena (22 Sep 2016 - 20:27)
Bonjour, et merci pour votre réponse.

Quel outil existe-t-il, à votre œil, pour tester ces REGEX. Smiley smile

Suivant votre post, mon code devrait être celui là, non ?


foreach (glob(WWW_ROOT . 'files\\facture\\030\\.*?-.*?2016.*?\.pdf') as $filename)
	{  
		debug($filename);
	} 


Cela ne récupère rien. Du coup j'ai écrit cela mais sans résultats également :

foreach (glob(WWW_ROOT . 'files\facture\030\.*?-.*?2016.*?\.pdf') as $filename)
	{  
		debug($filename);
	} 


Pour infos, le nom des fichiers qui sont dans le dossier 030 sont de l’écriture suivante :
CC030-F201608.pdf

Ce que je veux donc faire c'est récupérer tous les noms de fichiers dans lesquels ont retrouve "2016".

Par contre, après avoir récupéré mes noms de fichiers dans un dossier, la fonction preg_grep me permet de réaliser ce que je souhaite :

$list2016  = preg_grep ('/2016/i', $allfactures);
debug($list2016);
//$allfactures est mon tableau correspondant au dossier 030 ( toutes les fichiers sont là)

Un avis la dessus ?

Merci en tous les cas de votre écoute.
Modifié par urlien (23 Sep 2016 - 09:51)
Bonjour.
urlien a écrit :
foreach (glob(WWW_ROOT . 'files\\facture\\030\\.*?-.*?2016.*?\.pdf') as $filename)
	{  
		debug($filename);
	}

Difficile à dire... 'files\\facture\\030\\.*?-.*?2016.*?\.pdf' fonctionne chez moi pour 'files\facture\030\CC030-F201608.pdf'... ce 'WWW_ROOT', je ne le connais pas, est-il fiable ?

urlien a écrit :

Quel outil existe-t-il, à votre œil, pour tester ces REGEX. Smiley smile

J'ai entendu parler de Regex Buddy mais je ne l'ai jamais utilisé.
Je me suis fait mon petit programme en local avec Wamp et Ajax...

urlien a écrit :

Ce que je veux donc faire c'est récupérer tous les noms de fichiers dans lesquels ont retrouve "2016".

C'est plus simple que de tester si une chaine est correctement écrite. Cela dit, il faut être sûr que vous voulez tous les fichiers dont le nom contiendra la chaine de caractères '2016'.

Smiley smile
Merci à vous !
Effectivement les régex çà demande une certaine logique !

En définitive, utiliser la fonction preg_grep suffit à mon application.

Avec vos différent commentaire, je continue à bidouiller avec glob() pour comprendre pourquoi rien ne sort !

WWW_ROOT est propre à Cakephp si je ne dis pas de bétise !