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 :

lire un fichier + perl


Sujet :

Langage Perl

  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 25
    Par défaut lire un fichier + perl
    Salut, je suis débutant en perl. Le programme ci-dessous ne fais pas exactement ce que je voudrais. J'aimerais écrire dans deux fichiers sous des conditions différentes. L'écriture dans le deuxième fichier pose problème. Il ne doit etre écrit dans le deuxième fichier que si un "Pattern" (Regulaire Expression) ne s'y trouve pas encore.
    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
    27
     
     open (loghistory, ">>$datei_bt_history") or die ("Can not open $datei_bt_history");
        print loghistory ("[$day.$month.$year - $hour:$min:$sec]  $bt_address $bt_host\n");
        sleep (30);
      close loghistory;
     
    #  open (log_first_connection, ">>$datei_bt_device_connected") or die ("Can not open $datei_bt_device_connected");
      my $count = -1; 
      open (IN, ">>$datei_bt_device_connected") or die ("Can not open $datei_bt_device_connected"); 
      my @list_of_line = <IN>;
      my $line_counter = 0;
       while ($line_counter < @list_of_line)
       {
         if ($list_of_line[$line_counter] !~ /$bt_address/)
           {
             $count++;	
           }  
     
       }  #while<IN>-closed
      close (IN);
      if ($count<0)
        { 
          open (log_first_connection, ">>$datei_bt_device_connected") or die ("Can not open $datei_bt_device_connected");  
          print log_first_connection ("[$day-$month-$year - $hour:$min:$sec]  $bt_address $bt_host is connected\n");
        }  
        close (log_first_connection); print "Device found: ".$bt_host."\n";  
      }  #if($bt_address ne "")-closed
    Merci de vos aides

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 606
    Par défaut
    Bonjour,

    est-ce une expression régulière que tu veux conserver ou bien plutôt une chaîne de caractères ?

    S'il s'agit d'une chaîne de caractères, de quelle forme est-elle ? Une phrase de plusieurs mots ? Un mot ? Quel aspect a-t-elle ?

    As-tu beaucoup de données à écrire dans ton second fichier ?

    Toutes ces questions pour voir si ce ne serait pas plus souple d'employer un hachage pour charger en mémoire les chaînes de caractères recherchées et de les écrire toutes en fin de traitement plutôt que de devoir en permanence relire un fichier qui ne va cesser de grossir.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 25
    Par défaut
    Bonjour et merci de ta réponse,
    c un mot dans une phrase que je cherche et il y a plusieur données à traiter.

    Par exemple, la requete "hcitool scan" me retourne des données sur les appareils Bluetooth dans un environnement. Je voudrais écrire toutes les infos qu'il me retourne dans un premier fichier. Puisque la requete "hcitool" se repète à interval de temps régulier, il retrouvera dans certains cas les meme appareils. Dans un second fichier j'écris juste les infos sur les appareil une seule fois s'il ne fiqure pas encore dans ce dernier fichier.

    Je sais pas si c'est compréhensible ce que j'ai expliqué plus haut. Sinon, je te fourni volontier plus d'info!

    Merci @+

  4. #4
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Bonjour,

    J'ai du mal à comprendre ton code... Tu fais une boucle infinie non ? Ton while ne se termine jamais normalement... En effet, tu ne modifies dans ton while ni $line_counter ni scalar(@list_of_line)... Et à priori, il y a un if que l'on ne vois pas (mais c'est sûrement volontaire de ta part).

    A priori, comme l'a dit Arioch, la solution peut être de mettre tous les appareils pour lesquels tu as déjà écris les infos dans ton txt. Ensuite, tu récupère l'appareil avec une regex et tu fais un exists sur ton hash.

    Donne nous quand même plus de détail, histoire de voir si on a bien compris le problème et si on ne peut pas faire mieux

  5. #5
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 25
    Par défaut
    Salut à vous,
    en effet, le script doit se repeter infiniment. D'autre part, on ne sais pas à l'avance les appareils Bluetooth qui se trouve dans notre environnement. Et c'est ca le but: Documenter les appareils qui passe dans le coin un un fichier. Dans un autre fichier collectionner les appareils actuellement connecté, et dans un troisième fichier éventuellement les appareils déconnectés. En fait c à peu pret ca le but. Je ne sais pas si le concepte est ok.

  6. #6
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par odi_9 Voir le message
    En fait c à peu pret ca le but
    Tu es sûr ? Tu n'es pas en train de nous décrire un moyen plutôt qu'un but ? A quoi sont censé servir ces données ?
    Combien de périphériques bluetooth t'attends-tu à avoir au moment où tu vas archiver ? Tu vas bien archiver périodiquement, n'est-ce pas ?

    --
    Jedaï

  7. #7
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 25
    Par défaut
    Voici la solution à mon problème, pour lire un fichier ligne par ligne. Merci pour vos contributions!

    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
    #!/usr/bin/perl
     
    @Ligne = ("");
    open(MAILDAT, "<inbox.dat") || die "Le fichier avec E-Mails n'a pu etre trouvé\n";
    while(<MAILDAT>)
     {
      push(@Ligne,$_);
     }
    close(MAILDAT);
    for(@Ligne)
     {
      if(/HTML/)
       { 
        print $_;
       }
      }

Discussions similaires

  1. Réponses: 10
    Dernier message: 25/06/2015, 15h18
  2. lire un fichier excel avec Perl
    Par nayo8233 dans le forum Langage
    Réponses: 17
    Dernier message: 20/06/2012, 11h13
  3. [débutant]Perl lire un fichier texte
    Par Ralfman68 dans le forum Langage
    Réponses: 5
    Dernier message: 06/06/2007, 20h28
  4. [PERL] lire un fichier bytes à bytes
    Par LE NEINDRE dans le forum Langage
    Réponses: 1
    Dernier message: 09/01/2006, 10h59
  5. Lire le fichier du port série
    Par saibe dans le forum Linux
    Réponses: 7
    Dernier message: 09/04/2003, 09h29

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