IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Recuperez le nombre de ligne de plusieur fichier txt contenu dans un repertoire


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Recuperez le nombre de ligne de plusieur fichier txt contenu dans un repertoire
    Bonjour,
    j'aimerais savoir comment faire pour lire le nombre de lignes de plusieurs fichier dans un répertoire en Perl.
    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/usr/bin/perl
     
    opendir REP, "test" or die "impossible d'ouvrir le repertoire";
    open(FICHIER,"<Lettre.txt") || die "Problème à l\'ouverture : $!";
    open (WRITER,">> TraceNbLigne.txt") or die "Le fichier ne peut etre édité ! \n";
    $i = 0;
    while(<FICHIER>)
    {
    $i ++;
    }
    print WRITER "Il y a $i lignes \n";
    print "\nNombre de lignes : $i\n";
    close FICHIER || die "Problème à la fermeture : $!";
    close Rep ;
    close WRITER
    quand je lit seulement le fichier.txt qui est sur mon bureau, j'arrive a relever le nombre de lignes, et a le tracer dans un fichier.txt, mais quand je place mon fichier dans un répertoire, je n'arrive pas a aller le lire, si quelqu'un peut m'aider, merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Pour afficher du code dans un message, utilise la balise [code] (icône ).

    Sinon, pour ton cas de figure, il suffit d'ouvrir le fichier en précisant son répertoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(FICHIER,"<test/Lettre.txt") || die "Problème à l\'ouverture : $!";
    Si néanmoins tu souhaites ouvrir tous les fichiers d'un répertoire, il faut ouvrir le répertoire et boucler sur tous les fichiers qu'il contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/usr/bin/perl
     
    open (WRITER,">> TraceNbLigne.txt") or die "Le fichier ne peut etre edité ! \n";
    opendir REP, "test" or die "impossible d'ouvrir le repertoire";
    foreach my $fichier (readdir REP)
    {
      open(FICHIER,"<test/$fichier") || die "Problème à l\'ouverture : $!";
      $i = 0;
      while(<FICHIER>)
      {
        $i ++;
      }
      print WRITER "Il y a $i lignes \n";
      print "\nNombre de lignes : $i\n";
      close FICHIER || die "Problème à la fermeture : $!";
    }
    close Rep ;
    close WRITER
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Avec cette méthode, mon code lit bien le fichier si je l'ai spécifier, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(FICHIER,"<test/Lettre.txt") || die "Problème à l\'ouverture : $!";
    là il me dit bien que j'ai 25 lignes dans le fichier, mais il me le dit 4 fois :s.
    Mais quand je met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(FICHIER,"<test/$fichier") || die "Problème à l\'ouverture : $!";
    il me dit: Problème a l'ouverture : Permission denied at EssaiPerl.pl line 7.
    Celle cités juste au dessus en l'occurrence.

    ai-je oublié un morceau?

    Mais merci de ta réponse, ça commence a rentré un peu dans ma tête, c'est mon premier code en Perl, mais j'ai du mal.

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    C'est sans doute que tu n'as pas les droits de lecture sur ces fichiers... ce n'est pas lié à perl, mais à ton système de fichier.

    Tu as bien lancé le script dans le répertoire dans lequel se trouve le répertoire test ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Oui mon EssaiPerl.pl, ce trouve sur mon bureau ainsi que le répertoire test. Et j'ai bien tous les droit sur les fichier et le répertoire

  6. #6
    Membre confirmé Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Points : 515
    Points
    515
    Par défaut
    Bonjourr,

    Sais-tu quel fichier te pose problème ? (par exemple tu fais un print $fichier avant de l'ouvrir). Peut être que cela t'aidera à comprendre ton erreur de lecture...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    si je fait ce que tu m'as dit, sur mon invite de commande voila ce qui s'affiche:

    .
    Nombre de lignes : 0
    ..
    Nombre de lignes : 0
    decode.txt
    Nombre de lignes : 0
    Lettre.txt
    Nombre de lignes : 0

    Je ne sais pas ce que sont les . et ..
    Le fichier lettre est sencé contenir 25 Lignes et le fichier decode 12 lignes.

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Addramyr Voir le message
    Je ne sais pas ce que sont les . et ..
    Le fichier lettre est sencé contenir 25 Lignes et le fichier decode 12 lignes.
    Les fichiers . et .. sont listés par readdir lorsque tu parcours un répertoire. Il représentent respectivement le répertoire courant, et le répertoire parent. Il faut il ignorer dans ton script.

    Par contre, je soupçonnes que tu n'ouvres pas le bon nom de fichier (que tu n'inclues pas le répertoire). Pourrais-tu poster ton script entier ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/usr/bin/perl
     
    opendir REP, "test" or die "impossible d'ouvrir le repertoire";
    open (WRITER,">> TraceNbLigne.txt") or die "Le fichier ne peut etre édité ! \n";
    foreach my $fichier (readdir REP)
    	{
    	#print $fichier;
    		open (FICHIER, "test/$fichier") || die "Probleme à l\'ouverture : $!";
    		$i = 0;
    		while(<FICHIER>)
    		{
    			$i++;
    		}
    		print WRITER "Il y a $i lignes \n";
    		print "\n Nombre de lignes : $i\n";
    		close FICHIER || die "Problème à la fermeture : $!";
     
    	}
    	close REP;
    	close WRITER;
    voila mon script, et merci pour l'aide que vous l'apporté

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ton script, adapté pour un de mes répertoires fonctionne parfaitement.

    Cela vient donc soit du fait que tu lances le script dans le mauvais répertoire, soit que tes droits de lecture du répertoire et/ou des fichiers qu'il contient sont insuffisants. Je ne vois pas d'autre explication.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Mon fichier .pl ce trouve sur mon bureau, mon répertoire test aussi...
    aux niveaux des droits sur répertoire/Fichiers je suis bien admin dessus.

    Je ne voit pas d'où cela viens, je vais essayer de plancher dessus.
    Merci pour votre aide apporter.
    Bonne continuation

  12. #12
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Essaye de faire ton test dans un répertoire indépendant, depuis la racine du disque dur par exemple.

    Perso, je me suis mis dans le même contexte que toi (répertoire dans le bureau windows), et je n'ai aucun problème.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Si j'enleve la ligne qui me met l'erreur, la ligne 8 qui est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (FICHIER, $fichier) || die "Probleme à l\'ouverture : $!";
    il me trace bien dans mon fichier, le nom et le nombres de lignes qui sont dans le répertoire, mais ne compte pas, m'affiche "nombres de lignes 0"

    donc comment faire pour compter correctement le nombre de lignes dans mes fichier avec ce code?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/usr/bin/perl
     
    opendir (REP, "test") or die "impossible d'ouvrir le repertoire";
    open (WRITER,">> TraceNbLigne.txt") or die "Le fichier ne peut etre édité ! \n";
    foreach my $fichier (readdir REP)
    	{
    	print $fichier;
    		#open (FICHIER, $fichier) || die "Probleme à l\'ouverture : $!";
    		$i = 0;
    		while(<FICHIER>)
    		{
    			$i++;
    		}
    		print WRITER "Il y a $i lignes \n";
    		print "\n Nombre de lignes : $i\n";
    		#close FICHIER || die "Problème à la fermeture : $!";
     
    	}
    	close REP;
    	close WRITER;

  14. #14
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Tu ne peux pas supprimer la ligne qui ouvre le fichier, car sinon, tu ne peux pas compter les lignes.

    Au passage, à titre informatif, il existe un module qui compte le nombre de ligne (File::CountLines) et il existe une façon simple (une fois que le fichier est ouvert), de compter le nombre de ligne. C'est d'utiliser le pseudo opérateur goatse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $file_size = () = <FICHIER>;
    Mais pour l'ouverture de ton fichier, je ne vois vraiment pas d'où cela peut venir, mais probablement de ton système d'exploitation.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Après une recherche forcé ce week end, j'ai enfin trouver la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/usr/bin/perl
     
    opendir (REP, "test") or die "impossible d'ouvrir le repertoire";
    open (WRITER,">>TraceNbLigne.txt") or die "Le fichier ne peut etre édité ! \n";
    foreach my $fichier (readdir REP)
    	{
    		print "$fichier\n";
    		next if $fichier=~/^\./;
    		print "$fichier\n";
    		open (FICHIER,"<test/$fichier") || die "Probleme à l\'ouverture : $!";
    		my $i = 0;
    		my $is= 0;
    		#my $contenuligne;
    		while($contenuligne = <FICHIER>)
    		{
    			$i++;
    			#$is=($i%2==1);
    			if ($is == 1)		#Check la parité de la ligne
    			{
    				print WRITER"$contenuligne";
    				#defined(<FICHIER>)	#permet de sauter la ligne, inutile avec le check parité.
    			}
    		}
    		#print WRITER "Il y a $i lignes \n";
    		print WRITER "\n Le fichier $fichier contiens : $i lignes\n";
     
    		close FICHIER || die "Problème à la fermeture : $!";
     
    	}
    close REP;
    close WRITER;
    Maintenant tou marche nickel, merci pour votre aide

  16. #16
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je n'avais pas vu que dans ton open, tu n'avais pas précisé le répertoire du fichier à ouvrir ("test/$fichier"). Désolé.

    Sinon, je pense que tu peux supprimer le code pour les lignes paires, je ne vois pas son intérêt.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Oui, le code pour les lignes paires, s'etait pour faire des test, je ne comptait pas les garder ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Nombre de lignes d'un fichier xls (Excel)
    Par BouB dans le forum Windows Forms
    Réponses: 8
    Dernier message: 30/03/2009, 11h58
  2. retourner le nombre de ligne d'un fichier txt
    Par naazih dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2008, 14h16
  3. Retourner le nombre de lignes d'un fichier txt
    Par El-Diablo- dans le forum C++Builder
    Réponses: 1
    Dernier message: 14/02/2008, 17h25
  4. Déterminer le nombre de lignes d'un fichier [.txt]
    Par Metallic-84s dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2006, 10h34
  5. Nombre de ligne d'un fichier
    Par charliejo dans le forum MFC
    Réponses: 4
    Dernier message: 07/04/2005, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo