Récupérer une chaine de caractère à droite
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
Je débute complètement en perl et j'ai besoin d'aide sur un sujet.
J'ai créé un petit programme en perl qui permet :
- d'aller dans un répertoire
- de lire tous les fichiers qui s'y trouvent
- de créer un fichier excel
- de mettre dans ce fichier excel certaines données
Etant donné que ces données sont des log je n'ai pas besoin de tout récupérer.
Je m'explique :
sur une ligne j'ai : "blablablablablabla - bliblibliblibliblibliblibli bliblibliblibliblibliblibli "
Je voudrais récupérer la chaine derrière le "-" soit "bliblibliblibliblibliblibli bliblibliblibliblibliblibli " sachant que je récupére la totalité de la chaine dans une variable qui s'appelle "$totally".
Merci d'avance
2 réponses
La discussion porte sur Perl et l’extraction du texte après le tiret dans des lignes de logs, afin d’isoler la portion après le séparateur et de la stocker. Plusieurs propositions utilisent soit split sur ' - ', soit des expressions régulières pour capturer le contenu après la séquence, pour obtenir la partie souhaitée et la placer dans une variable. En Perl 5, on peut matcher avec $totally =~ /^.+ - (.+)$/ ou utiliser split sur ' - ' pour accéder à la seconde partie, tandis qu’en Perl 6 les mêmes alternatives restent valables. D'autres solutions soulignent l’intérêt d’adapter le parsing selon le format exact des lignes, notamment lorsque plusieurs occurrences du séparateur entourent d'autres champs, ou lorsque des horodatages interviennent.
-
Salut,
Si tu as un seul-
séparé par un espace avant et après, c'est assez facile :
#!/usr/bin/perl use strict; use warnings; my $st = "blablablablablabla - bliblibliblibliblibliblibli bliblibliblibliblibliblibli "; if ($st =~ /\s-\s(.*)$/) { my $totally = $1; # do something with $totally } else { print "Error, incorrect format in $st\n"; }
Dal-
-
-
autres précisions : ce n'est pas une "ligne de commande" mais un script Perl, à mettre dans un fichier texte et à faire exécuter par ton interpréteur Perl, et ce n'est pas ton code, c'est le mien :-)
ou celui de Felice_
P.S.
Salut Felice_ ! c'est sympa d'avoir un contributeur sur le forum Perl, et qui en plus est lettré en Perl 6 ;-) -
-
-
-
Bonjour :
Soit tu coupes avec la fonction « split » :
En Perl 5 :use strict; use warnings; my $totally = 'blablablablablabla - bliblibliblibliblibliblibli bliblibliblibliblibliblibli '; my @donnees = split(' - ', $totally); print $donnees[1] . "\n";
En Perl 6 :my $totally = 'blablablablablabla - bliblibliblibliblibliblibli bliblibliblibliblibliblibli '; my @donnees = split(' - ', $totally); put @donnees[1];
Soit tu utilises les expressions régulières :
En Perl 5 :my $totally = 'blablablablablabla - bliblibliblibliblibliblibli bliblibliblibliblibliblibli '; $totally =~ /^[^-]+ - (.+)$/; print $1 . "\n";
En Perl 6 :my $totally = 'blablablablablabla - bliblibliblibliblibliblibli bliblibliblibliblibliblibli '; $totally ~~ /^.+ \- (.+)$/; put $0;