Supprimer extension fichier

Supprimer extension fichier - Perl - Programmation

Marsh Posté le 16-06-2015 à 18:42:12    

Bonjour,
 
Pouvez-vous m'aider à supprimer l'extension d'un fichier ?
 
Exemple : J'ai un fichier "toto.txt". J'aimerais récupérer juste "toto".
 
Merci d'avance pour vos réponses.

Reply

Marsh Posté le 16-06-2015 à 18:42:12   

Reply

Marsh Posté le 16-06-2015 à 21:53:50    

Code :
  1. my $fichier='toto.txt';
  2. $fichier=~s/\.[\w_]+$//;


 
ou un truc du genre. Ou alors avec un split() mais attention si le nom de fichier contient d'autres points (toto.tata.txt).
 

Reply

Marsh Posté le 16-06-2015 à 22:02:58    

En ce qui me concerne, je ferais ceci:

Code :
  1. my $fichier = 'toto.txt';
  2. $fichier =~ s/(.+)\.[^.]+/$1/;


 
A+,


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

Marsh Posté le 16-06-2015 à 22:24:42    

+1 pour gilou, c'est bien plus universel. ;)

 

edit: ou les deux melangés: $fichier=~s/\.[^.]+$//;


Message édité par rat de combat le 16-06-2015 à 22:27:19
Reply

Marsh Posté le 16-06-2015 à 22:51:16    

Sauf que la tu va supprimer le nom d'un fichier comme .emacs  
 
A+,


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

Marsh Posté le 16-06-2015 à 23:06:29    

Bien vu gilou!
 
Voyons, peut-être ainsi?
 

Code :
  1. $fichier=~s/(?<=.)\.[^.]+$//;

Reply

Marsh Posté le 17-06-2015 à 02:48:12    

Pourquoi pas, mais ceci:
$fichier=~s/(?<=!\.)\.[^.]+$//;
serait peut être mieux, ou son équivalent avec ma ligne:  
$filename =~ s/(.*[^.])\.[^.]+/$1/;
 
A+,


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

Marsh Posté le 17-06-2015 à 07:29:45    

Bonjour à tous les deux.
 
Merci beaucoup pour vos réponses, ça fonctionne à merveille.

Reply

Marsh Posté le 17-06-2015 à 18:11:16    

Merci gilou, j'apprends pleins de trucs perl en regardant tes réponses!  :)

Reply

Marsh Posté le 20-06-2015 à 03:13:29    

gilou a écrit :

Pourquoi pas, mais ceci:
$fichier=~s/(?<=!\.)\.[^.]+$//;
serait peut être mieux, ou son équivalent avec ma ligne:  
$filename =~ s/(.*[^.])\.[^.]+/$1/;
 
A+,

Corrections:
pour la ligne avec s/(.*[^.])\.[^.]+/$1/;
J'avais oublié le $ final, nécessaire puisque je n'ai plus .* en fin de regexp
ce devrait donc être
$filename =~ s/(.*[^.])\.[^.]+$/$1/;
 
 
 
Pour la ligne avec s/(?<=!\.)\.[^.]+$//;
il y avait clairement une faute de frappe (le copier coller hâtif à encore frappé): c'était (?<!\.) avec un look-behind négatif que je voulais.
Mais ça marche pas, car un tel contexte est matché par le vide, et l'ensemble matcherait un nom comme ".toto"
Il vaut mieux donc un  look-behind positif:
$fichier=~s/(?<=[^.])\.[^.]+$//;
Note: (?<=!\.) ne déclenchait pas d'erreur sur mes essais, mais je n'ai aucune idée de la manière dont c'était interprété par Perl, et, c'était hautement risqué d'employer ça :D
 
A+,


Message édité par gilou le 20-06-2015 à 11:32:41

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

Sujets relatifs:

Leave a Replay

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