[Perl] cmd simmliaire à cut ??

cmd simmliaire à cut ?? [Perl] - Perl - Programmation

Marsh Posté le 28-07-2003 à 18:17:42    

Slt all,
 
Y'a-t-il un code perl similaire à ce qui suit:
 
cut -d/ -f-2 fichier
 
Ex: toto/tata/titi/tete
Resultat => toto/tata/titi
 
En gros je veux pas le dernière chaine.
 
merci d'avance

Reply

Marsh Posté le 28-07-2003 à 18:17:42   

Reply

Marsh Posté le 28-07-2003 à 18:37:40    

je ne connais pas la commande cut
 
par exemple si tu a a/b/c/d/ tu veux k'il te retourne a/b/c ou a/b/c/d ?
Et tu peu avoir autre chose que / comme separateur?

Reply

Marsh Posté le 28-07-2003 à 18:52:52    

vfqs a écrit :

Slt all,
 
Y'a-t-il un code perl similaire à ce qui suit:
 
cut -d/ -f-2 fichier
 
Ex: toto/tata/titi/tete
Resultat => toto/tata/titi
 
En gros je veux pas le dernière chaine.
 
merci d'avance


si je ne m'abuse, ta commande devrait plutot te renvoyer "tata" qui est le 2e champ de l'expression delimitée par des "/".
L'equivalent de cut peut se faire par un split (cette cmd transforme une chaine en tableau, tu prends ensuite le champ qui t'interesse)

Reply

Marsh Posté le 29-07-2003 à 09:52:49    

sinon avec un regex c'est assez vite fait:

Code :
  1. my $texte ="tata/titi/toto/tete";
  2. $texte =~ s/(.*?)\/([^\/]*)$/$1/;
  3. print "$texte\n\n";

Reply

Marsh Posté le 29-07-2003 à 10:33:34    

Muchacho: Nono via la cmd cut j'obtiens bien le résultat que j'avance. :)
 
Anapajari: C a l'air pas mal ton bout de code. Je vais essayer de suite.  :jap:


Message édité par vfqs le 29-07-2003 à 11:03:10
Reply

Marsh Posté le 29-07-2003 à 11:02:50    

Anapajari a écrit :

sinon avec un regex c'est assez vite fait:

Code :
  1. my $texte ="tata/titi/toto/tete";
  2. $texte =~ s/(.*?)\/([^\/]*)$/$1/;
  3. print "$texte\n\n";



Tu peux m'expliquer ce que fait la partie en bleu ?
 
s/(.*?)\/([^\/]*)$/$1/

Reply

Marsh Posté le 29-07-2003 à 11:19:47    

([^\/]*)$ on décompose:

Code :
  1. [^\/] -> tous les caractères qui ne sont pas des /
  2. *     -> 0 ou plusieurs fois ( en fait je pense qui vaut mieux mettre un +, pour eviter les problemes si $texte se termine par /)
  3. $     -> qui termine la chaine


Donc en fait avec ce motif je prends "tous les caractères qui ne sont pas des / et qui terminent $texte.  
Du coup /(.*?)\/([^\/]*)$/ nous donne:
tout et n'importe quoi suivi d'un / suivi de plusieurs caracteres qui ne sont pas des / et qui terminent la chaine.
 
Huumum pas sur d'avoir été très clair moi!

Reply

Marsh Posté le 29-07-2003 à 14:23:25    

[^\/] -> tous les caractères qui ne sont pas des /  
 
En fait c'est cette partie que je pigeais po. :)
 
je pensais que "^" indiquer en debut de ligne et non une négation comme "!".
Ce sont les crochets qui influe sur ^ ?

Reply

Marsh Posté le 29-07-2003 à 14:26:09    

absolument!!!

Reply

Marsh Posté le 29-07-2003 à 14:28:30    

un grand merci pour ce code. Cela m'évitera de rajouter du shell dans mon code.  :jap:  
 

Reply

Sujets relatifs:

Leave a Replay

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