Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1838 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  compter nombre de ligne entre deux mots

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

compter nombre de ligne entre deux mots

n°2272328
Z_cool
HFR profile rating:⭐⭐⭐⭐
Posté le 28-12-2015 à 12:34:05  profilanswer
 

Salut,
 
je début un peut avec Perl, et je sais pas trop comment prendre mon probleme en main, donc si vous aviez une idée.
 
en fait, je dois compter les nombre de ligne qu'il y a entre deux mots dans un fichier text.
 
en gros, la source est du genre :

debut liste_1
 a
 b
 c
fin
 
debut liste_2
 d
 e
 f
fin
 


 
et j'aurai besoin de connaitre le nombre de ligne qu'il y a par exemple dans liste_2
 
voila, si vous avez une petite idée pour m’orienter ?
merci d'avance


---------------
#mais-chut
mood
Publicité
Posté le 28-12-2015 à 12:34:05  profilanswer
 

n°2272332
Z_cool
HFR profile rating:⭐⭐⭐⭐
Posté le 28-12-2015 à 14:04:05  profilanswer
 

Bon, je crois que j'ai ressui, c’est surement très très crade, mais ca semble marcher  :D  
 
 

#!/usr/bin/perl -w
 
use strict;
use Date::Manip;
use LWP::Simple;
 
 
##my $baseDir = '/log/Accounting';
my $baseDir = '/home/moi/FreeURL';
my $resultDir = "$baseDir/Results";
my $dataDir = "$baseDir/DataBase";
my $url = 'http://cfg-store/P/DatabaseP.bc';
 
my $ins = 0;
my $CountFreEURL = 0;
 
 
getstore($url, "$dataDir/databaseP.bc" );
open(DATABASE, "$dataDir/databaseP.bc" )     || die("$0: Cannot open '$dataDir/databaseP.bc': $!n" );
 
 
while(<DATABASE> ) {
    chomp;
    next if(/^Id/);
    next if(/^$/);
    next if(/^#/);
    next if(/^s;;/);
    next unless /S/;
 
    if ((/debut list_2/)&&($ins==0)) {
        printf ("%sn", $_);
        $ins = 1;
    }
    elsif ((/fin/)&&($ins==1)) {
        print ("Exitingn" );
        $ins = 0;
    }
    elsif ($ins==1) {
        $CountFreEURL+=1;
        printf ("tEntry:%sn", $_);
    }
         
}
printf ("Count: %dn", $CountFreEURL);
exit 0;


c'est chaud bouillant le perl en fait :)


---------------
#mais-chut
n°2272338
gilou
Modérateur
Modzilla
Posté le 28-12-2015 à 16:05:13  profilanswer
 

Code :
  1. if ((/debut list_2/)&&($ins==0)) {
  2.        printf ("%sn", $_);
  3.        $ins = 1;
  4.    }
  5.    elsif ((/fin/)&&($ins==1)) {
  6.        print ("Exitingn" );
  7.        $ins = 0;
  8.    }
  9.    elsif ($ins==1) {
  10.        $CountFreEURL+=1;
  11.        printf ("tEntry:%sn", $_);
  12.    }


 
Si tu veux compter qu'une seule section entre debut list_2 et fin, ça peut se simplifier:
 

Code :
  1. if (/debut list_2/) {
  2.    print $_, "\n";
  3.    ++$CountFreEURL;  # ça va pouvoir faire double emploi: flag et compteur
  4. }
  5. elsif ($CountFreEURL) {
  6.    if (/fin/) {
  7.        print "Exiting\n";
  8.        last;  # on sort de la boucle ici, c'est ce qui permet de ne pas se préoccuper du traitement des lignes restantes
  9.    }
  10.    print "\tEntry:", $_, "\n";
  11.    ++$CountFreEURL;
  12. }


 
A+,


Message édité par gilou le 28-12-2015 à 16:16:55

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2272341
gilou
Modérateur
Modzilla
Posté le 28-12-2015 à 16:48:04  profilanswer
 

Bref, en reprenant le tout, ça pourrait ressembler à:

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. use Date::Manip;
  7. use LWP::Simple;
  8.  
  9. ##my $baseDir = '/log/Accounting';
  10. my $baseDir = '/home/moi/FreeURL';
  11. my $resultDir = "$baseDir/Results";
  12. my $dataDir = "$baseDir/DataBase";
  13. my $url = 'http://cfg-store/P/DatabaseP.bc';
  14.  
  15. getstore $url, "$dataDir/databaseP.bc";
  16. open my $db_handle, "$dataDir/databaseP.bc";
  17. my $CountFreEURL = 0;
  18.  
  19. while (<$db_handle> ) {
  20.    chomp;
  21.    next unless /\S/;  # ça comprends le cas /^$/
  22.    next if(/^(Id|#|\s;;)/);  # c'est pas \s*;; dans le 3e cas?
  23.  
  24.    if (/debut list_2/) {
  25.        print $_, "\n";
  26.        ++$CountFreEURL;  # ça va pouvoir faire double emploi: flag et compteur
  27.    }
  28.    elsif ($CountFreEURL) {
  29.        if (/fin/) {
  30.            print "Exiting\n";
  31.            last;  # on sort de la boucle ici, c'est ce qui permet de ne pas se préoccuper du traitement des lignes restantes
  32.        }
  33.        print "\tEntry:", $_, "\n";
  34.        ++$CountFreEURL;
  35.    }        
  36. }
  37. close $db_handle;
  38.  
  39. print "Count: ", $CountFreEURL, "\n";
  40. exit 0;


 
A+,


Message édité par gilou le 28-12-2015 à 16:52:47

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2272345
Z_cool
HFR profile rating:⭐⭐⭐⭐
Posté le 28-12-2015 à 18:46:03  profilanswer
 

Merci tout plein , je regarde ça demain en arrivant au boulot  
 
:)


---------------
#mais-chut

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  compter nombre de ligne entre deux mots

 

Sujets relatifs
Transformer une chaine en nombre complexeAjouter une autre ligne à mon tableau css ?
Concatenation lignes[SQL] Select un nbre max de données = selectionner une ligne sur n.
remplacer des mots par des liens (XML to HTML via XSLT)[EXCEL] Associé nombre à mot depuis une liste déroulante
[RegExp] Expression régulière : recherche sur 2 motsComment protéger mes vidéos html5 en ligne
Nombre de lignes maj supérieur au nombre de lignes de la table 
Plus de sujets relatifs à : compter nombre de ligne entre deux mots


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR