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

Mel14141 Messages postés 20 Statut Membre -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -
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. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    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. Mel14141 Messages postés 20 Statut Membre
       
      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. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      en ligne 10, à la place de "# do something with $totally", fait quelque chose avec $totally, par exemple :
      print "totally = $totally\n";
      0
    3. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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. Mel14141 Messages postés 20 Statut Membre
       
      Peut être que je pourrais vous mettre mon code pour voir si vous voyez le problème ?
      0
    5. Mel14141 Messages postés 20 Statut Membre
       
      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. Felice_ Messages postés 271 Statut Membre 11
     
    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. Mel14141 Messages postés 20 Statut Membre
       
      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
      1. Felice_ Messages postés 271 Statut Membre 11 > Mel14141 Messages postés 20 Statut Membre
         
        Je ne te comprends pas, les codes données sont testés est fonctionne…
        0
    2. Mel14141 Messages postés 20 Statut Membre
       
      je ne sais pas ce qu'il se passe
      0
    3. Mel14141 Messages postés 20 Statut Membre
       
      As-tu besoin de mon code pour voir ce que j'ai fait ?
      0