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 :

Ecrire à la suite de la ligne en cours d'analyse dans un fichier


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 70
    Points
    70
    Par défaut Ecrire à la suite de la ligne en cours d'analyse dans un fichier
    Bonjour tout le monde,

    Je bloc sur un problème tout simple.

    J'ouvre un fichier, je parcours chaque ligne et je voudrais ajouter une valeurs sur chaque ligne mais ça ne marche pas :

    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
     
    my $file = "export.csv";
    open(my $data, '>>', $file) or die "Could not open '$file' $!\n";
     
    while (my $line = <$data>) {
    	chomp $line;
     
    	my @fields = split ";" , $line;
     
    ......
    	if ($Etat) {
    		print "$Etat\n";
    		print $data ";$Etat";
    	}else{
    		print "Pas en base\n";
    		print $data, ";Pas en base";
    	}
     
    }
    Voyez-vous comment je pourrais réaliser cela svp ?

    D'avance, merci.

  2. #2
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,

    Pour concaténer des chaînes de caractères on utilise le point :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    print $data . ";$Etat";
     
    print $data . ";Pas en base";

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Par contre je ne souhaitais pas concaténer deux chaines mais écrire ma chaine dans mon fichier. Je me suis basé sur cet exemple trouvé sur Internet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open FILE, ">file.txt" or die $!; 
    print FILE $str; 
    close FILE;
    En fait je voudrais qu'il écrive ";$Etat" à la suite de la ligne en cours de traitement (comme je parcours toutes le lignes)

    Mais ça ne fait rien du tout.

  4. #4
    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
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Ouvrir un fichier avec cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    open(my $data, '>>', $file) or die "Could not open '$file' $!\n";
    permet d'ajouter de nouvelles lignes à la fin du fichier, mais pas d'ajouter des mots à la fin des lignes.

    En fait tu ne peux pas éditer les lignes d'un fichier, ce n'est pas possible (sauf pour des fichiers à tailles d'enregistrement constante, comme les fichiers de bases de données, mais ce n'est pas ce que tu cherches à faire ici).

    Pour modifier un fichier, il faut ouvrir ton fichier source en lecture, ouvrir un second fichier en écriture, lire les lignes du fichier source, modifier les lignes en mémoire et écrire les lignes modifiées sur le fichier en écriture. Au besoin, tu commences par modifier le nom de ton fichier source et façon à donner à ton fichier en écriture le nom du fichier d'origine.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    Bonsoir Lolo,

    Merci pour la réponse. Je vais faire ainsi alors, créer un autre fichier.

    Cordialement

  6. #6
    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
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour Julie,

    je voudrais affiner ou compléter un peu ce que j'ai dit ci-dessus.

    Citation Envoyé par Lolo78 Voir le message
    En fait tu ne peux pas éditer les lignes d'un fichier, ce n'est pas possible.
    Ça, c'est vrai, tu ne peux pas éditer directement les lignes d'un fichier (du moins pas avec les méthodes habituelles).

    Citation Envoyé par Lolo78 Voir le message
    Pour modifier un fichier, il faut ouvrir ton fichier source en lecture, ouvrir un second fichier en écriture, lire les lignes du fichier source, modifier les lignes en mémoire et écrire les lignes modifiées sur le fichier en écriture. Au besoin, tu commences par modifier le nom de ton fichier source et façon à donner à ton fichier en écriture le nom du fichier d'origine.
    Là, en revanche, c'est incomplet. La méthode indiquée est correcte, mais ce n'est pas la seule possible. A condition que ton fichier ne soit pas trop gros, il est possible d'ouvrir le fichier en lecture, de charger le contenu en mémoire, puis fermer le fichier, effectuer les changements en mémoire, rouvrir le fichier cette fois en écriture (ce qui a pour effet d'effacer tout ce qui s'y trouve), et d'écrire le contenu modifié. Par exemple quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    my $fic = "fichier.txt";
    open my $FIC_IN, "<", $fic or die "Impossible d'ouvrir $fic en lecture $!";
    my @contenu = <$FIC_IN>; # charge le contenu dans le tableau @contenu en mémoire 
    close $FIC_IN;
    for my $lines (@contenu) {
         # faire les changements voulus au contenu du fichier
         # ...
    }
    open my $FIC_OUT, "<", $fic or die "Impossible d'ouvrir $fic en écriture $!";
    print $FIC_OUT @contenu;
    close $FIC_OUT;
    Une variation consiste à ouvrir le fichier en mode lecture-écriture (+<), charger le contenu en mémoire, effacer le contenu du fichier (fonction truncate), repositionner le descripteur au début du fichier (fonction seek) et écrire le contenu sur le descripteur repositionné, mais c'est généralement bien moins pratique (et plus dangereux en cas d'erreur).

    Les deux méthodes ci-dessus exigent que le fichier ne soit pas trop gros pour pouvoir tenir en mémoire; c'est pourquoi je n'ai pas pensé à t'en parler, je travaille presque toujours avec des fichiers bien trop gros pour cela. De plus, je trouve qu'il est plus fiable de faire une copie temporaire: si le programme plante, on a toujours au moins l'exemplaire non modifié du fichier, alors qu'avec les deux méthodes ci-dessus, il y a un risque de tout perdre si le programme plante au mauvais moment.

    Pour moi, donc, la première méthode que j'ai donnée (dans mon post du 6 août) est la meilleure.

    Pour plus de détails voir les tutoriels et cours de formation pour apprendre PERL : http://perl.developpez.com/cours/

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/10/2012, 20h04
  2. récupérer la ligne en cours de lecture dans un datagridview
    Par leeloo95 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 20/01/2010, 10h21
  3. Comment sauter une ligne lors de l'ecriture dans un fichier
    Par Harald dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 29/05/2009, 18h01
  4. Réponses: 2
    Dernier message: 16/08/2006, 14h47
  5. Passer à la ligne lors de l'écriture dans un fichier
    Par hams dans le forum Assembleur
    Réponses: 4
    Dernier message: 17/04/2005, 19h25

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