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 :

Ecriture d'info. récup. sur un .txt


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut Ecriture d'info. récup. sur un .txt
    Salut suite à un précédent post dans la partie web, j'ais refait mon script et poster au bon endroit cette fois si !

    Je re-explique pour ceux qui n'étaient pas là:
    - je voudrais récupérer des infos sur un .log
    - écrire ces infos sur un autre fichier.

    Ici le soucie est que le fichier creer pour stocker les info prise sur le .log
    est bien là mais les info ne sont pas dedans ?!

    Pourriez vous m'aider?

    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
    #! /Perl/bin/perl -w
     
    use strict;
     
    # Déclaration Variables
     
    my @infos_fichier = &lecture;
    &ecriture(@infos_fichier);
    my (@valeur);
     
    # Subroutine Lecture
     
    sub lecture {
    	my $fichier_in = "emplacement du fichier tina.log";
    	open (IN, "$fichier_in") || die "Impossible d'ouvrir le fichier tina.log pour la cause suivante : $!\n";
      my @infos_fichier = split (/\\s+/, $fichier_in);
      close IN;
    	return @infos_fichier;
    }
     
    # Subroutine Ecriture
     
    sub ecriture {
    	my $fichier_out = "emplacement di fichier sortie.txt";
    	open (OUT,">$fichier_out");
    	foreach my $valeur (@_) {
    		print OUT $valeur[2], "\n" if @infos_fichier >= 2;
    	}
    	close(OUT);
    }
     
    __END__
    S'il y des questions ou des remarques n'hésitez pas!
    Merci d'avance!

  2. #2
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Par défaut
    J'ai pas trop le temps de tester ton code, mais tu as déjà fait un print de ton tableau que tu remplis, juste pour voir que tu l'as bien rempli ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     foreach $element (@infos_fichier) {
    print $element." " ;
    }

  3. #3
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    1. ton shebang a un espace gênant

    2. [déjà dit] &lecture est obsolète et déconseillé

    3. dans lecture tu ouvre ton fichier mais ne le lis pas

    4. dans lecture le split est appliqué au nom du fichier

    5. dans lecture le split a un \ non voulu

    6. si tu as vraiment besoin de subroutines passe une ref sur tes valeurs en argument [ca aussi déjà dit, tu lis les réponses?]

    7. dans ecriture : même si tu avais lu le fichier dans lecture (ce qui n'est pas le cas) tu ne ferais qu'écrire la donnée extraite de la dernière ligne.

    Veux-tu faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (<>) {
        my $data = (split /\s+/)[2];
        print $data, "\n" if defined $data;
    }
    Version uniligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    perl -lne 'print (split /\s+/)[2], "\n"' file1 > file2
     
    # ou encore (équivalent) :
    perl -lane 'print "$F[2]\n"' file1 > file2

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut
    Merci pour vos réponse je test ça !
    *Je lis mes réponses*

    Je vous prévient si ça fonctionne !

    Merci beaucoup

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut
    Je re!

    Je voudrais savoir quelque petit truc:
    1. qu'es ce qu'un SHEBANG?
    2. comment lire le fichier ouvert?
    3. comment appliquer le split a la lecture et nom au nom du fichier?
    3. pourquoi j'écrirais que la dernière ligne même si j'avais lu le fichier?

    Encore désoler mais je suis au début du début en perl et je me perd...

    Merci pour ta patience iblis

    Bonne journée.

  6. #6
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    1.
    le shebang est le #! en tête de fichier. il indique à ton shell le chemin vers l'interpréteur. il ne doit pas y avoir d'espace entre #! et /Perl/bin/perl (au fait es-tu sûr du chemin ? quel est ta plateforme ?)
    2.
    le mieux est de boucler sur les lignes (lire une ligne tant que la fin de fichier n'est pas atteinte). voici comment le faire proprement:
    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
    use strict; use warnings;
     
    open $inputfile_h, '<', 'path/to/mylogfile'
        or die "$!\n";
     
    open $outputfile_h, '>', 'path/to/myreport'
        or die "$!\n";
     
    while ( my $line = <$inputfile_h> ) {
        my @fields = split /\s+/, $line;
        my $data = @fields[2];
        if (defined $data) {
            print $outputfile_h $data, "\n";
    }
    3.
    en lisant les lignes et en appliquant le split au résultat de cette lecture (comme ci-dessus)

    4.
    a) parce que tu ne boucles pas à lecture et donc @infos ne contient au mieux que la première ligne b) si tu laisses @infos tel quel dans la boucle alors tu écrases sa valeur à chaque passage et à la fin @infos contient les données de la dernière ligne.
    Question à te poser: pourquoi veux-tu passer par des subroutines (quel est ton objectif) ?

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

Discussions similaires

  1. Info bulle sur SELECT
    Par Maxbenji dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 14/09/2007, 11h47
  2. [C#] [Win forms] Info bulle sur bouton
    Par RobinJulie dans le forum Windows Forms
    Réponses: 4
    Dernier message: 25/11/2004, 16h12
  3. Info bulle sur un TImage
    Par Dauphin dans le forum C++Builder
    Réponses: 4
    Dernier message: 30/09/2004, 13h56
  4. Réponses: 7
    Dernier message: 18/08/2004, 15h08
  5. pb d'affichage d'info stoké sur Bd
    Par krown dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/05/2003, 09h25

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