[Perl] Split d'une chaine de caractères

Bonjour,

Je cherche à extraire des valeurs numériques d'un texte. Ces valeurs numériques sont disséminés dans le texte, et varient.
Exemple de texte:

test.log

chapitre1
blablablablablabla
blabla 28 blabla
blablablablablabla

chapritre2
blablablablablabla
blabla 85 blabla
blablablablablabla

chapritre2
blablablablablabla
blabla 44 blabla
blablablablablabla

Ici, il faudrait chercher la section "chapitre1" et récupérer la PREMIERE valeur numérique dans le texte qui suit, et faire de même pour chaque "chapitre" rencontré ...

j'ai fait un petit essaie avec "split" mais sans réel succès ..

#!/usr/bin/perl -i.orig
use strict;
use warnings;

my @table = (test.log);
my @table = split(/[a-z]/g,$test);
print "$table[0]\n";
print "$table[1]\n";
print "$table[2]\n";


D'avance merci ! :)

3 réponses

  1. Modérateur
    Salut,

    Je n'ai pas compris.
    Peut tu donner un exemple concret.
    Donc un exemple de ton fichier réel et aussi ce que tu veux obtenir comme résultat.
    Merci.
    1. Salut Lami20j :)

      Petit extrait de la page web avec ses balises xml ..

      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-fr">
      	<div data-id="0" data-type="1" class="slot slot-1 item-quality-4" style=" left: 0px; top: 0px;"><span class="level">378</span></div>
      	<div data-id="1" data-type="2" class="slot slot-2 item-quality-3" style=" left: 0px; top: 58px;"><span class="level">346</span></div>
      </html>


      Je récupère la page web dans un fichier. L'objectif est ensuite de la parcourir pour en retirer 2 infos :

      "slot-x" et la valeur "level" associée ... Donc ici, implémenter un fichier avec :

      slot-1, level 378
      slot-2, level 346
      ...
      ..
      .

      Le nombre de slot est déternimé, mais il faudrait récupérer la valeur level à chaque fois.

      Merci pour ton aide en tout cas en espérant avoir été un peu plus clair ..

      Phoenix
      1. Modérateur
        Salut,

        Voici un exemple
        :~/perl$ cat slot.txt 
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-fr">
        	<div data-id="0" data-type="1" class="slot slot-1 item-quality-4" style=" left: 0px; top: 0px;"><span class="level">378</span></div>
        	<div data-id="1" data-type="2" class="slot slot-2 item-quality-3" style=" left: 0px; top: 58px;"><span class="level">346</span></div>
        </html>
        :~/perl$ cat slot.pl
        #!/usr/bin/perl
        use strict;use warnings;
        
        open F,"slot.txt" or die "E/S : $!\n";
        my %h;
        
        while(<F>){
            next unless 
            /class\s*=\s*"slot\s*(slot-\d+).*"(level)">(\d+)\s*.*/;
            $h{$1}="$2 $3";
        }
        
        print "$_, $h{$_}\n" for sort keys %h;
        __END__


        Exécution de script

        :~/perl$ perl slot.pl
        slot-1, level 378
        slot-2, level 346