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 :

Probleme lecture dans un fichier


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Juillet 2008
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Probleme lecture dans un fichier
    Bonjour a tous, je debute en Perl et j'ai quelques problemes!

    Tout d'abord, auriez-vous une doc solide sur le module Tkx? Parce que c'est un peu le parcours du combattant la, je cherche je cherche et j'essaye de transposez les exemples de Tk en Tkx mais sa marche pas toujours

    Sinon la n'est pas vraiment la question! Oui en effet, je n'arrive pas a lire un fichier! He oui, je suis bloque par quelque chose d'aussi simple T_T

    Il me detecte que c'est bien un fichier, mais lorsque je tente de lire le 'flux' bah, c'est comme s'il detecte que le fichier etait vide

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #!/perl -w
     
    use strict;
     
    my $way = "C:/Documents and Settings/iit/Bureau/log/";
    my $file;
    my $line;
     
    opendir R_LOG, "$way";
    while ($file = readdir(R_LOG))
    {	open FILE, "< $way"."$file";
    	if (-f "$way"."$file")
    	{
    		print "Good File\n";
    		while ($line = <FILE>)
    		{
    			print "HERE\n";
    		}
    	}
    	else
    	{
    		print "Not a File\n";
    	}
    	close FILE;
    }
    closedir R_LOG;
    -------------------------------------------------------------

    Si quelqu'un pourrait m'aider ce serait tip top
    Je precise que je suis sous Windows XP et que j'utilise Active Perl

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Tu devrais utiliser les balises CODE afin de rentre ton texte plus lisible.

    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
    #!/perl -w
     
    use strict;
     
    my $way = "P:/Perl/scripts2/Test";
    my $line;
     
    opendir R_LOG, $way or die "Problème lors de l'ouverture du dossier";
    my @files  = readdir(R_LOG);
    @files = grep{$_!~ /^\.\.?$/}@files;
     
     
     
    foreach my $file (@files){
     
        if (-e $way.$file){
            print "Good File\n";
            open FILE, $way.$file or die "Problème lors de l'ouverture du fichier $file";
            while ($line = <FILE>){
                print "HERE\n";
            }
        }
     
        else{
            print "Not a File\n";
        }
     
        close FILE;
    }
    closedir R_LOG;
    Le problème vient probablement des fichiers . et ..

    nb: inutile d'encadrer tes variables de double quotes quand tu en fais des concaténations.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Juillet 2008
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Merci pour les remarques mais sa ne marche toujours pas

    D'autre part => "$_!~ /^\.\.?$/" pourrait tu m'explique la syntaxe ^^

    Je pense avoir trouver d'ou viens mon probleme mais je suis incapable de dire pourquoi. En fait je lis des fichier de log Unix. Il doit y avoir un probleme comme j'ai un windows justement ... mais comment le resoudre?! ^^

  4. #4
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    $_!~ /^\.\.?$/

    $_ est la variable par défaut qui va prendre une à une les valeurs de l'array

    // encadre ton expression régulière

    !~ signifie qu'elle ne doit pas être égale

    \. est le point
    ? 1 à 0 fois
    ^ ancre de depart
    $ ancre de fin

    Tu ne récupère donc grâce au grep que ce qui n'est pas égal à . ou à ..

  5. #5
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Il manque peut-être un slash quelque part dans ton script
    Par exemple à la fin du chemin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $way = "P:/Perl/scripts2/Test/";
    ou quand tu ouvres le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open FILE, $way.'/'.$file or die ...
    Ne change pas les deux


    Sinon, quel est le message d'erreur?
    En tous cas, cela fonctionne chez moi.

    Pour te simplifier la vie, il existe la fonction glob qui récupère directement le chemin vers tes fichiers.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my @files = glob("C:/Documents and Settings/iit/Bureau/log/*");
    @files = grep{$_!~ /^\.\.?$/}@files;
    ...
    open FILE, $file or die "Problème lors de l'ouverture du fichier $file";

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Juillet 2008
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Et bien en fait je n'ai pas de messages d'erreurs
    Il reconnait le fichier, l'ouvre mais ne lit pas ce qu'il y a dedans :/

  7. #7
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    il n'affiche pas de 'HERE'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            open FILE, $way.$file or die "Problème lors de l'ouverture du fichier $file";
            while ($line = <FILE>){
                print "HERE\n";
            }
    Tu ne lui demandes pas d'afficher le contenu du fichier mais d'écrire HERE à chaque ligne. Remplace donc print "HERE\n"; par print ligne;

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code propre
    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
    32
    33
    34
    35
    #!/usr/bin/perl
    use strict;
    use Carp;
    use warnings;
     
    my $way = "P:/Perl/scripts2/Test";
     
    opendir (R_LOG, $way) or die "Problème lors de l'ouverture du dossier";
     
    # Recuperation des fichiers et repertoires de $way sauf (. et .. )
    my @FilesRep = grep {! /^\.\.?$/ } readdir(R_LOG);
    closedir(R_LOG); 
     
     
    foreach my $Liste (@FilesRep){
      $Liste = "$way/$Liste";
      if ( -f  $Liste ) {
        print "Good File\n";
        open (FILE, $Liste) or die "Problème lors de l'ouverture du fichier $Liste\n";
        print "===================\n";
        print "Affichage du contenu du fichier $Liste\n";
        while (my $line = <FILE>){
          chomp($line);
          print "$line\n";
        }
        close FILE;
        print "===================\n\n";
      }
      elsif ( -d  $Liste ) {
        print "Repertoire : $Liste\n";
      }
      else {
        print "Not a file or directory\n";
      }
    }

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Juillet 2008
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup pour vos réponse, je me suis installé une Debiane pour faire du Perl, je pense (et j'en suis casi sur) que c'est mieux pour coder que Windows ^^

  10. #10
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    Citation Envoyé par Diabolikjo Voir le message
    Merci beaucoup pour vos réponse, je me suis installé une Debiane pour faire du Perl, je pense (et j'en suis casi sur) que c'est mieux pour coder que Windows ^^
    moui enfin on code tres bien avec win aussi le perl (demande à jasmine et djibril ... )

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

Discussions similaires

  1. Probleme lecture dans un fichier Excel ferme
    Par kent17 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/07/2010, 09h29
  2. probleme windows form, lecture dans un fichier texte
    Par fbarbin dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/09/2008, 14h06
  3. probleme de lecture dans des fichiers
    Par xanatos dans le forum VB.NET
    Réponses: 1
    Dernier message: 21/03/2008, 15h19
  4. [C# CF1.1]Probleme de lecture dans un fichier texte
    Par Papy_Guik dans le forum Windows Mobile
    Réponses: 10
    Dernier message: 21/05/2007, 17h43
  5. Probleme de lecture dans un fichier
    Par Bebert71 dans le forum C
    Réponses: 7
    Dernier message: 15/01/2007, 19h28

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