Récupérer une chaine de caractère à droite

Bonjour à tous,

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

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. Contributeur
    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
    3
    1. Bonjour,

      Merci pour ta réponse mais la ligne de commande n'ont aucun effet, même pas de message d'erreur.

      Penses-tu qu'il peu y avoir un soucis dans mon code ?
      0
    2. Contributeur
      en ligne 10, à la place de "# do something with $totally", fait quelque chose avec $totally, par exemple :
      print "totally = $totally\n";
      0
    3. Contributeur
      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 ;-)
      0
    4. Peut être que je pourrais vous mettre mon code pour voir si vous voyez le problème ?
      0
    5. Excuse moi mais j'ai utilisé ton code dans mon script je l'ai intégré si tu veux pour le faire fonctionner pour mon utilisation.
      0
  2. 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;
    1
    1. Bonjour,

      Merci pour ta réponse mais les lignes de commandes n'ont aucun effet, même pas de message d'erreur.

      Penses-tu qu'il peu y avoir un soucis dans mon code ?
      0
    2. @Mel14141Je ne te comprends pas, les codes données sont testés est fonctionne…
      0
    3. je ne sais pas ce qu'il se passe
      0
    4. As-tu besoin de mon code pour voir ce que j'ai fait ?
      0