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 d'un fichier


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut Probleme de lecture d'un fichier
    salut,

    j'ai un probleme lors de la lecture du contenu d'un fichier *.sql, meme si ce probleme n'est pas tres grave il me plairait quand meme de le resoudre.

    voici le probleme:

    j'utilise pour lire le contenu d'un fichier ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    open(SQLFILE, "<request.sql") || die "the SQL file was not found\n";
    while(<SQLFILE>)
     {
    	...code...
     }
    close(SQLFILE);
    j'ai entre autre un "print" dans cette boucle while et c'est la que je m'apercois qu'en fait le fichier est "scanner" plusieurs fois, en effet je fait 5 fois le tour du fichier avant de sortir de la boucle. si quelqu'un siat pourquoi, merci

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Par défaut
    5 tours du fichier entier ou 5 passages dans le while?
    le while va executer le block pour chaque ligne du fichier, en assignant à chaque fois cette ligne à $_, donc si tu a 5 ligne dans ton fichier c'est normal d'avoir 5 passage.

  3. #3
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    non dans mon fichier j'ai en gros 50 lignes et j'ai donc 5 fois ces 50 lignes

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  4. #4
    Membre éprouvé Avatar de spirit_epock
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 153
    Par défaut
    C'est dans ta boucle qu'il y a un pb alors.

    Si tu veux scanner ton fichier à la place tu affectes le contenue de ton fichier à une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open(SQLFILE, "<request.sql") || die "the SQL file was not found\n";
    my @file = <SQLFILE>;
    close(SQLFILE);
    Puis ensuite tu effectues ton code sur cette variable

    a+

  5. #5
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    euh ma question va etre "conne" mais dans la variable @file, comment on test chaque ligne du fichier d'origine?

    est ce que while(@file) suffit a faire le tour?

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  6. #6
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    et sinon pourquoi quand j'execute ton exemple suivi d'un foreach.. print la varaible @file ne contient pas la 1ere ligne?

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Par défaut
    Salu,
    Citation Envoyé par Jim_Nastiq
    salut,

    j'ai un probleme lors de la lecture du contenu d'un fichier *.sql, meme si ce probleme n'est pas tres grave il me plairait quand meme de le resoudre.

    voici le probleme:

    j'utilise pour lire le contenu d'un fichier ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    open(SQLFILE, "<request.sql") || die "the SQL file was not found\n";
    while(<SQLFILE>)
     {
    	...code...
     }
    close(SQLFILE);
    j'ai entre autre un "print" dans cette boucle while et c'est la que je m'apercois qu'en fait le fichier est "scanner" plusieurs fois, en effet je fait 5 fois le tour du fichier avant de sortir de la boucle. si quelqu'un siat pourquoi, merci
    Je crois qu'il faut montrer ce que contient pour savoir pourquoi le fichier en lecture est parcouru 5 fois.

    Pour ça
    est ce que while(@file) suffit a faire le tour?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach(@file){...traitement...}
    lami20j

  8. #8
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    Citation Envoyé par lami20j
    Salu,Je crois qu'il faut montrer ce que contient lami20j

    ceci :
    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
    	 if ( ($_ !~ /^--/) && ($_ !~ /^INSERT/) )
    	{
    		if($_ =~ /(\d{4})-(\d{2})/)
    		{
    			$table_name = $1.'-'.$2;
    			print 'the table is '.$table_name.'<br>';
    		}
    		foreach my $table (@exist_tables) 
    		{
    			print $table.'<br>';
    			if ($table_name eq $table)
    			{
    				$flag = 1;
    			}
    		}
    		print 'the flag is : '.$flag.'<br>';
    		chomp();
    		$request_string .= $_;
    	}

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  9. #9
    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
    Tu ne parcours pas 5 fois le fichier avec ce code. Le plus probable c'est que ta confusion vienne de ta boucle où tu fais aussi un print :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach my $table (@exist_tables) 
    		{
    			print $table.'<br>';
    			if ($table_name eq $table)
    			{
    				$flag = 1;
    			}
    		}
    Si tu as vraiment l'impression que tu parcoures bien 5 fois le fichier, donne nous un morceau de code minimal qui reproduise le problème. (mais je doute fortement que ce soit le cas).

    --
    Jedaï

  10. #10
    Membre éprouvé Avatar de spirit_epock
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 153
    Par défaut
    @file contient toutes les données de ton fichier. Il ne manque pas de données.
    Tu as du te trompé.

    cf faq
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach (@file)
    {
      # bloc d'instruction
      # l'élément en cours est $_
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $line;
    foreach $line (@file)
    {
      # bloc d'instruction
      # l'élément en cours est $line
      print $line."\n";
    }

    Je vois pas comment il boucle 5 fois sinon

  11. #11
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    non mea culpa c'etait mon print que j'interpretais mal !

    mais bon tant que j'y suis ce script me pose un probleme. en effet je test d'abord la ligne ou il y a une create pour recuperer le nom de la table a créer puis je verifie si ce nom n'est pas deja utilisé si ce n'est pas le cas j'effectue toutes les requetes (ce qui fonctionne parfaitement) cependant quand la table existe deja je ne sais pas pourquoi mon script tourne dans le vide et ne m'affiche rien et la barre de progression IE avance lentement sans jamais obtenir quelque chose. Pourtant c'est tout simple c'est juste un if else . Une idée?? parce que c'est bizarre qu'il ne m'affiche pas les print utiliser dans la verification de la table a créer...

    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
    while(<SQLFILE>)
     {		
    	 #if there is commentary we don't keep them
    	 if ($_ =~ /^CREATE/) 
    	{
    		if($_ =~ /(\d{4})-(\d{2})/)
    		{
    			$table_name = $1.'-'.$2;
    			print 'the table is '.$table_name.'<br>';
    		}
    		foreach my $table (@exist_tables) 
    		{
    			if ($table_name eq $table)
    			{
    				$flag = 1;
    			}
    		}
    	}
     }
    close(SQLFILE);
    print 'the flag is : '.$flag.'<br>';
    if ($flag != 1)
    {
    	if ( ($_ !~ /^--/) && ($_ !~ /^INSERT/) )
    	{		
    		chomp();
    		$request_string .= $_;
    	}
    	my $SQL_request = $dbh->prepare(qq{$request_string});
    	$SQL_request->execute;
    	open(SQLFILE, "<request.sql") || die "the SQL file was not found\n";
    	while(<SQLFILE>)
    	{
    		if ( ($_ !~ /^--/) &&  ($_ =~ /^INSERT/) )
    		{
    			chomp();
    			my $tmp = $_;
    			my $INSERT_request = $dbh->prepare(qq{$tmp});
    			$INSERT_request->execute;
    			$tmp ="";
    		}
    	}
    	close(SQLFILE);	
     
    		print '<br><br><center><b>All request was done successfully </b></center></body></html>';
    }
    else
    {
    	print '<br><br><center><b>The table you are trying to create already exist </b></center></body></html>';
    }

    merci de votre aide

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

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

Discussions similaires

  1. Probleme de lecture d'un fichier
    Par Sleeping Lionheart dans le forum C++
    Réponses: 5
    Dernier message: 02/03/2007, 12h21
  2. Probleme de lecture dans un fichier
    Par Bebert71 dans le forum C
    Réponses: 7
    Dernier message: 15/01/2007, 19h28
  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