Récupérer extension d'un fichier

Récupérer extension d'un fichier - Perl - Programmation

Marsh Posté le 19-06-2015 à 12:22:51    

Bonjour,
 
J'aimerais récupérer l'extension d'un fichier.
 
J'ai un fichier << toto.txt >>. Je voudrais juste récupérer << txt >>.
J'ai un peu de mal avec les expressions régulières donc est-ce quelqu'un pourrait m'aider svp ?
 
Merci d'avance.

Reply

Marsh Posté le 19-06-2015 à 12:22:51   

Reply

Marsh Posté le 19-06-2015 à 14:33:31    

Je te laisse cogiter sur ce que fait ce programme:

Code :
  1. use strict;
  2. use warnings FATAL => 'all';
  3.  
  4. my @testdata = ('toto.txt',
  5.         'toto.new.txt',
  6.         'toto...text',
  7.         'toto.',
  8.         '.toto',
  9.         '.toto.',
  10.         '.to.to',
  11.         '.to.to.',
  12.         'to.to.',
  13.         '.',
  14.         '..',
  15.         '...',
  16.         'toto..25.text',
  17.         '.toto..25.text',
  18.         'toto..25.text.',
  19.         'toto..25..text',
  20.         );
  21.  
  22. foreach (@testdata) {
  23.  if (/^(.*[^.])\.([^.]+)$/) {
  24.    print "File: $_\tExtension: $2 (and basename: $1)\n";
  25.  }
  26.  else {
  27.    print "File: $_\t No extension\n";
  28.  }
  29. }


A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 19-06-2015 à 14:37:00    

Tu as déjà posé pratiquement la même question: http://forum.hardware.fr/hfr/Progr [...] 3889_1.htm

 

Tu prends la réponse de gilou et tu adaptes, soit transformer en regex "simple" et modifier la place des parenthèses.

 

EDIT: Regarde chez gilou, j'ai dit des bêtises. :-(


Message édité par rat de combat le 19-06-2015 à 14:41:54
Reply

Marsh Posté le 19-06-2015 à 14:43:05    

Je pensais qu'il y avait une solution plus simple pour récupérer une extension !
 
Comme par exemple en shell ou je ferai :
 
echo toto.txt |awk -F "." '{print $NF}'
 
Ou dans le même esprit, en perl récupérer juste le nom de fichier sans l'extension avec la commande :
 
$fichier =~ s/(.+)\.[^.]+/$1/;
 
Il n'y a pas une commande plus simple ?

Reply

Marsh Posté le 19-06-2015 à 15:23:42    

Dans le même esprit, tu aurais bien $fichier =~ s/^.*[^.]\.([^.]+)$/$1/; mais le problème, c'est qu'il n'y a pas toujours une extension, et que quand il n'y en a pas, ça foire. Alors il faut bien tester avec un if à un moment donné.
 
Dans la pratique en fait, pour ce genre de chose, on utilise le module standard File::Basename qui est le truc standard pour les noms de fichiers & co
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 19-06-2015 à 15:33:38    

Ok merci. C'est exactement ça que je voulais.
Il y aura toujours une extension donc aucun soucis !
 
Merci encore pour ton aide.
 
@+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed