Forum Programmation.perl Parser une variable en Perl

Posté par .
Tags : aucun
1
14
avr.
2009
Vu que maintenant je dois faire ca en perl , je repose cette question mais dans le forum Perl !!!!! (Merci à ceux qui m'ont répondu en bash ...)

Je dois parser cette variable
7845124512200904091025.pdf de façon à récupérer
la chaine 20090409

Il faut que je commence impérativement par la fin car la chaine avant 2009 ..
est variable.
Pourriez vous m'aider, je galère un peu

Merci d'avance
  • # Miam perl !

    Posté par (page perso) . Évalué à 4.


    #!/usr/bin/perl
    my $nom='7845124512200904091025.pdf';
    if($nom=~m/(\d{8})\d{4}\.pdf$/){
       print "$1\n";
    }
  • # Parser une variable en Perl

    Posté par . Évalué à 1.

    J'avais oublié de mentionner :
    L'extension n'est pas toujours pdf ca peut etre autre chose
    • [^] # Re: Parser une variable en Perl

      Posté par (page perso) . Évalué à 2.

      dans le code (qui répond à ta question) au dessus, tu remplaces "\.pdf" par "\..+" qui signifie une extension d'au moins un caractère.
      Si tu peux cumuler les extensions (foo.tar.gz), je peux te répondre aussi, mais ça ne sera plus gratuit :)
    • [^] # Re: Parser une variable en Perl

      Posté par (page perso) . Évalué à 3.

      En partant du principe que ton extension est faite de "." et de lettres :

      #!/usr/bin/perl
      my $nom='7845124512200904091025.pdf';
      if($nom=~m/(\d{8})\d{4}[\.a-zA-Z]*$/){
          print "$1\n";
      }


      et c'est gratuit ;)
      • [^] # Re: Parser une variable en Perl

        Posté par . Évalué à 2.

        et si l'extension est .mp3 ? :)
        • [^] # Re: Parser une variable en Perl

          Posté par (page perso) . Évalué à 1.

          c'est un script pour le travail, non ?
          Alors pas de mp3 !

          sinon il y a un truc crade mais qui marche :
          #!/usr/bin/perl
          my $nom='7845124512200904091025.mp3.gz.tar.pdf.paf';
          my $no_dot=(split /\./,$nom)[0]; # recup le premier element du split
          if($no_dot=~m/(\d{4})(\d{2})(\d{2})\d{4}$/){
              print "Fichier : $nom\n";
              print "Annee : $1\n";
              print "Mois : $2\n";
              print "Jour : $3\n";
          }
  • # Parser une variable en Perl

    Posté par . Évalué à 1.

    Merci Arthur
    Et comme c'est gratuit aprés j'arrete ( et je vais bouquiner un peu Perl même si RegExp m'a toujours foutu un mal de tronche !!!)

    #!/usr/bin/perl
    my $nom='7845124512200904091025.pdf';
    if($nom=~m/(\d{8})\d{4}[\.a-zA-Z]*$/){
    print "$1\n";
    }

    et si je veux en sortie ?:

    $nom $1 (exemple : 7845124512200904091025.pdf 2009 04)

    Puisse ta gratuité répondre à ma question et aprés je disparais ...

    Merci d'avance
    • [^] # Re: Parser une variable en Perl

      Posté par (page perso) . Évalué à 1.

      Pour decouper annee / mois / jour :
      #!/usr/bin/perl
      my $nom='7845124512200904091025.pdf';
      if($nom=~m/(\d{4})(\d{2})(\d{2})\d{4}[\.a-zA-Z]*$/){
          print "Fichier : $nom\n";
          print "Annee : $1\n";
          print "Mois : $2\n";
          print "Jour : $3\n";
      }
  • # Parser une variable en Perl

    Posté par . Évalué à 0.

    Merci Arthurr,

    Par contre je souhaiterai que $nom et $1, $2 soient sur une même ligne
    sans retour à la ligne

    (cf ex: 7845124512200904091025.pdf 2009 04 ..... )

    quesaco ?
    • [^] # Re: Parser une variable en Perl

      Posté par (page perso) . Évalué à 2.


      #!/usr/bin/perl
      my $nom='7845124512200904091025.pdf';
      if($nom=~m/(\d{4})(\d{2})(\d{2})\d{4}[\.a-zA-Z]*$/){
          print "Fichier : $nom $1 $2\n";
      }


      c'est juste un print ... le $1 est la premiere expression "matchee" avec les parenthese (\d{4}), $2 la seconde, ...
  • # Parser une variable en Perl

    Posté par . Évalué à 1.

    Ca y est !!
    Merci Arthurr pour tout.

    Il fallait juste que je rajoute un chop $nom avant le print ( mon fichier devait contenir un retour à ligne).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.