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 de lecture simultanée de fichiers


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    BTS Systeme Numérique et Informatique Réseau . (2014-2016)
    Inscrit en
    Juin 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : BTS Systeme Numérique et Informatique Réseau . (2014-2016)
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 30
    Par défaut Probleme de lecture simultanée de fichiers
    Bonjours à tous ,
    J’espère que je poste mon problème au bon endroit :/ Je suis nouveau et ceci est mon premier message
    Je vous explique mon problème :
    Je suis étudiant en première année de BTS et je suis en stage de 6 semaines.
    Le but de mon stage est de créer un script ( j'ai choisit Perl ) pour associé a chaque port , la description du Vlan qui lui est donnée plus celle du port initial .
    J'ai fait une ébauche de programme qui lit dans le fichier ( que j'ai arrangé ) pour trouvé le nom du port ligne 1 puis navigue dans le fichier des vlan ( arrangé aussi ) pour trouver la description du Vlan correspondant au port.

    Voici le programme que j'ai commencé :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    use strict;
    use warnings;
     
    my $numVlan;
    my $fVlan = 'E:\\Vlan.txt'; # fichier des données Vlan
    my $fInt = 'E:\\Interf.txt';#Fichiers des données interfaces
    my $fFinale = 'E:\\Conf.txt';#Fichiers final
    my $compteur = "0";
    my @ligneInt;
    my @ligneVlan;
    my $portVlan;#Les interfaces occupées pas le n-ieme Vlan
    my $descInt;
    my $descVlan;
    my $Interface;
    open(my $fh1, '<', $fVlan) or die "[$fVlan]: fichier introuvable!"; # Ouverture en lecture du fichier vlan
    open(my $fh2, '<', $fInt) or die "[$fInt]: fichier introuvable!"; # Ouverture en lecture du fichier Interface
    open(my $fh3, '>>',$fFinale) or die "[$fFinale]: Fichier introuvable."; # Ouverture en écriture (ajout) du fichier final
     
    # on a pu ouvrir. On ecrit la ligne d'en tête
     
    print ( $fh3 "-------------------------------------------------\n");
    print ( $fh3 "Interface                    Description Complete\n");
    print ( $fh3 "-------------------------------------------------\n");
     
    while ( my $fichier2 = <$fh2>) #PROBLEME
    {
    	@ligneInt = split(/;/,$fichier2);
    	$descInt = pop @ligneInt;#@ligneInt ne garde que le nom du port
    	chomp $descInt;
    	$descInt = "$descInt +";#On sépare les descriptions par le signe +
    	while (my $fichier1 = <$fh1>) #On recherche les Vlans occupés
     	{	
     
     	 	if( $fichier1 =~ m/@ligneInt/ ) #Si la ligne de l'autre fichier contient le nom du port
     	 	{
     	 		@ligneVlan =split (/;/,$fichier1);#On sépare les différentes parti de la ligne
        		$portVlan = pop @ligneVlan;#Tous les numéro de ports du Vlan numéro n
        		$descVlan = pop @ligneVlan;#La description du Vlan correspondnat au port
        		#@ligneVlan ne contient plus que le numeror de Vlan
        		if ($descVlan eq 'default') #Supprime la description du Vlan 1 qui est inutilisé
        		{
        			$descVlan ='Port non utilise';
        		}
      		} else #Si le port n'est pas trouvé
      			{
      				$descVlan="";
      			}	
     
      	}
     
    			 	print ( $fh3 "@ligneInt                    $descInt $descVlan\n");
     }
     
    <>;
    Mon problème est que le script ne lit que la première ligne du $fh2
    Sauriez vous où est mon probleme ?
    Je vous remercie d'anace et vous souhaites à tous une bonne journée .
    Merci .

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Bonjour,


    Et juste ce petit script, qu'est-ce que cela te donne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    use strict;
    use warnings;
     
    my $fInt = 'E:\\Interf.txt';
    open(my $fh2, '<', $fInt) or die "[$fInt]: fichier introuvable!"; # Ouverture en lecture du fichier Interface
     
    while ( my $fichier2 = <$fh2>)
    {
    	print "$. ".$fichier2;
     }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( $fichier1 =~ m/@ligneInt/ ) #Si la ligne de l'autre fichier contient le nom du port
    Qu'as-tu dans @ligneInt ? Les noms de ports ne sont-ils pas dans $descInt ?

    Jasmine.

  3. #3
    Membre averti
    Homme Profil pro
    BTS Systeme Numérique et Informatique Réseau . (2014-2016)
    Inscrit en
    Juin 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : BTS Systeme Numérique et Informatique Réseau . (2014-2016)
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 30
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Qu'as-tu dans @ligneInt ? Les noms de ports ne sont-ils pas dans $descInt ?
    Le fichier Vlan.txt est du style :


    Num_du_Vlan;Description;Port(s)_associé;

    Et le fichier Interf.txt est du style :

    Nom_du_port;Description_du_port

  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 : 59
    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
    Par défaut
    Un de tes problèmes (je n'ai pas cherché les autres) est que tu ouvres ton fichier de vlan au début de script, puis, tu essayes de le lire en intégralité dans la boucle du fichier des ports, à chaque ligne de ce fichier (donc plusieurs fois).
    À la première ligne du fichier des ports, tu lis entièrement ton fichier vlan, mais comme tu ne le rouvre pas, à la deuxième ligne, tu ne lis plus rien.
    Tu devrais ouvrir le fichier vlan dans la boucle de lecture du fichier des ports, avant le while qui lit les lignes du fichier vlan. Ainsi, tu lirais à nouveau depuis le début du fichier vlan.

    PS : pour une meilleure lisibilité, merci d'écrire en mode normal (c'est à dire par en italique+gras, et aligné à gauche).

  5. #5
    Membre averti
    Homme Profil pro
    BTS Systeme Numérique et Informatique Réseau . (2014-2016)
    Inscrit en
    Juin 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : BTS Systeme Numérique et Informatique Réseau . (2014-2016)
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 30
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Un de tes problèmes (je n'ai pas cherché les autres) est que tu ouvres ton fichier de vlan au début de script, puis, tu essayes de le lire en intégralité dans la boucle du fichier des ports, à chaque ligne de ce fichier (donc plusieurs fois).
    À la première ligne du fichier des ports, tu lis entièrement ton fichier vlan, mais comme tu ne le rouvre pas, à la deuxième ligne, tu ne lis plus rien.
    Tu devrais ouvrir le fichier vlan dans la boucle de lecture du fichier des ports, avant le while qui lit les lignes du fichier vlan. Ainsi, tu lirais à nouveau depuis le début du fichier vlan.
    Bonjours et merci tout d'abord .
    Ce que vous voulez dire c'est que je dois fermer et ré-ouvrir le fichier Vlan.txt à chaque ligne d'Interf.txt ?
    Je ne savais pas :/
    Merci en tout cas je vais essayer .
    Et excuser moi pour le manque de lisibilité du premier post.

  6. #6
    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 : 59
    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
    Par défaut
    Citation Envoyé par SupraPF Voir le message
    Ce que vous voulez dire c'est que je dois fermer et ré-ouvrir le fichier Vlan.txt à chaque ligne d'Interf.txt ?
    Je ne savais pas :/
    Oui, c'est ce que je voulais dire. Déplacer la ligne 15 après la ligne 26.

  7. #7
    Membre averti
    Homme Profil pro
    BTS Systeme Numérique et Informatique Réseau . (2014-2016)
    Inscrit en
    Juin 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : BTS Systeme Numérique et Informatique Réseau . (2014-2016)
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 30
    Par défaut
    Très bien je vous remercie tout deux pour votre aide.
    Bonne journée.

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    C'est tout de même très inefficace de relire l'intégralité du fichier fVlan pour chaque port en entrée, surtout si tes fichiers sont un tant soit peu volumineux.

    Je te conseillerais plutôt de lire ce fichier une seule fois avant de commencer et de stocker les données qu'il contient (du moins celles dont tu as besoin) dans une structure de données appropriée en mémoire (par exemple un hachage). Cela fait, tu lis ton autre fichier et vas récupérer les infos dont tu as besoin dans cette structure de données. Cela peut donner un programme 1000 à 10000 fois plus rapide, voire plus.

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

Discussions similaires

  1. Probleme de lecture dans un fichier
    Par Bebert71 dans le forum C
    Réponses: 7
    Dernier message: 15/01/2007, 19h28
  2. Probleme de lecture d'un fichier
    Par Jim_Nastiq dans le forum Langage
    Réponses: 10
    Dernier message: 27/06/2006, 09h53
  3. Probleme de lecture d'un fichier avec caractères speciaux
    Par bygui dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 26/06/2006, 09h35
  4. Gros probleme de lecture d'un fichier texte
    Par Draekonyss dans le forum C
    Réponses: 12
    Dernier message: 25/04/2006, 09h25
  5. Probleme de lecture d'un fichier XML
    Par chleuh dans le forum Langage
    Réponses: 8
    Dernier message: 30/08/2005, 12h04

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