recherche d'un mot dans un fichier

recherche d'un mot dans un fichier - Perl - Programmation

Marsh Posté le 19-12-2016 à 21:08:50    

Bonsoir tout le monde,  
 
Je débute en perl, en fait j'ai besoin de faire un code perl permettant de chercher l'occurrence d'un mot dans un ensemble des fichiers, en fait le résultat est le nom de premier fichier contenat ce mot ...
quelqu'un peut m'aider SVP ?

Reply

Marsh Posté le 19-12-2016 à 21:08:50   

Reply

Marsh Posté le 19-12-2016 à 23:58:46    

http://perldoc.perl.org/functions/readdir.html pour faire la liste des fichiers, puis les fonctions usuelles pour ouvrir les fichiers un a un et http://perldoc.perl.org/functions/index.html pour savoir si il y a le mot cherché. Pour les détails voir sur internet, c'est pas difficile.

Reply

Marsh Posté le 20-12-2016 à 02:01:46    

use File::Grep
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 20-12-2016 à 12:03:36    

gilou a écrit :

use File::Grep

 

A+,

Ah ben oui, j'aurais dû y penser qu'il existe déjà un module tout fait pour n'importe quelle tâche en Perl. :lol:


Message édité par rat de combat le 20-12-2016 à 12:04:13
Reply

Marsh Posté le 20-12-2016 à 14:19:09    


Bonjour,
 
Merci pour les réponses , en fait j'ai essayé ce code:  
 

Code :
  1. use strict;
  2. use warnings;
  3. use diagnostics;
  4. use utf8;
  5. use autodie;
  6. use File::Spec;
  7. use CGI::Carp 'fatalsToBrowser';
  8. my $dir = "/home/dossier";
  9. my @listeFichiersMem;
  10. #open my $FIC1, "<", $file1 or die "Can't open $file1 for reading: $!";
  11. # read all entries in the directory:
  12. opendir DIR, $dir or die "Cannot open $dir $!";
  13. @listeFichiersMem = grep { !/^\.\.?$/ } readdir DIR;
  14. my @sorted = sort @listeFichiersMem;
  15. my $size = @listeFichiersMem;
  16. my $mot="pomme";
  17. foreach my $File  (@sorted) {
  18. #print "$File\n"; $File est le nom de fichier
  19.         open my $FIC, "<", "$dir/$File" or die "!!!!Can't open $File for reading!!!!";
  20. my @tab = <FIC>;
  21. my $sizeTab = $#tab+1;
  22. print $sizeTab; print "\n";
  23. for (my $i = 0; $i < $sizeTab; $i++)
  24. {
  25. chomp();
  26. chomp($tab[$i]);
  27. chomp($mot);
  28. if($tab[$i] eq $mot)
  29. {
  30. print "le mot $mot existe dans le fichier $File"; print "\n";
  31. }
  32. else
  33. {
  34. print "erreur";
  35. }
  36. }
  37. }


 
Mais il y a un problème au niveau de lecture dans les fichiers ..

Reply

Marsh Posté le 20-12-2016 à 21:09:52    

Bonsoir à tous, c'est encore moi.. j'arrive pas à résoudre le problème , en fait mon bjectif est ouvrir un dossier des fichiers, rechercher un mot dans ces fichier , le programme doit afficher le premier fichier contenant ce mot et s'arrête dès qu'il trouve le mot,
voilà le code  

Code :
  1. #
  2. # GetFilesList - Renvoie la liste des fichiers d'un repertoire (en mode recursif)
  3. #
  4. sub GetFilesList
  5. {
  6.         my $Path = $_[0];
  7.         my $FileFound;
  8.         my @FilesList=();
  9.         # Lecture de la liste des fichiers
  10.         opendir (my $FhRep, $Path)
  11.                 or die "Impossible d'ouvrir le repertoire $Path\n";
  12.         my @Contenu = grep { !/^\.\.?$/ } readdir($FhRep);
  13.         closedir ($FhRep);
  14.         foreach my $FileFound (@Contenu) {
  15.                 # Traitement des fichiers
  16.                 if ( -f "$Path/$FileFound" ) {
  17.                         push ( @FilesList, "$FileFound" );
  18.                 }
  19.                 # Traitement des repertoires
  20.                 elsif ( -d "$Path/$FileFound" ) {
  21.                         # Boucle pour lancer la recherche en mode recursif
  22.                         push (@FilesList, GetFilesList("$FileFound" ) );
  23.                 }
  24.         }
  25.         return @FilesList;
  26. }
  27. #
  28. # Boucle principale
  29. #
  30. my $mot="fruit";
  31. chomp($mot);
  32. my @Files = GetFilesList ("/home/lenovo/Bureau/dossier" );
  33. my @sorted = sort @Files;
  34. LOOP1: foreach my $File  (@sorted) {
  35.     open my $FIC, "<", "$dir/$File" or die "!!!!Can't open $File for reading!!!!";
  36.     while (my $line = <$FIC> ) {
  37.  chomp($line);
  38.         if ($line =~ /$mot/) {
  39.             print "$File: $line"; print "ok"; print "\n";
  40.             last LOOP1;
  41.         }
  42.     }
  43. }


 
 
mais il y a un pblme dans l'ouverture de fichier en lecture!!!

Reply

Marsh Posté le 23-12-2016 à 11:13:11    

> mais il y a un pblme dans l'ouverture de fichier en lecture!!!  
Fermer les fichiers ouverts, ça peut être utile...
Un truc dans ce style la, ça devrait le faire (mais j'ai pas teste, pas le temps)

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. sub GetFilesList {
  7.     .................
  8. }
  9.  
  10. my $dir = '/home/lenovo/Bureau/dossier';
  11. my $mot = "fruit";
  12. my @files = sort(GetFilesList($dir));
  13. my $found = 0;
  14.  
  15. foreach my $file  (@files) {
  16.    open(my $fh, "<", $file);
  17.    while (<$fh> ) {
  18.          if (/\b$mot\b/) {
  19.            print "$file: $_ ok\n";
  20.            $found = 1;
  21.            last;
  22.        }
  23.    }
  24.    close($fh);
  25.    last if ($found);
  26. }


A+,


Message édité par gilou le 23-12-2016 à 11:15:27

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed