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 :

[PERL]Prob lecture/écriture dans un fichier ".TXT"


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Points : 14
    Points
    14
    Par défaut [PERL]Prob lecture/écriture dans un fichier ".TXT"
    Tout d'abord, bonjour à tous...

    Voilà, j'ai un petit soucis en Perl... Je précise aussi que je suis un novice...
    En gros ce que je fais, c'est que je lis un fichier texte (lettre.txt) dans laquelle j'ai parfois rajouter à la place d'un espace entre deux mots, le mot "turlu" ...
    Donc ce que mon script fait, c'est qu'il ouvre la lettre, pour chaque ligne il vérifie qu'il n'y a pas de "turlu" (si il y'en a, il remplace par un espace) et si tout est bon, il copie la ligne dans un nouveau fichier texte(correction_lettre.txt) dans lequel, j'ai un espace entre chaque ligne. (vous comprendrez surement en lisant mon code)
    Donc jusque ici, pas de problèmes... Malheureusement pour la suite de ce que je souhaite faire, ça ne va pas...
    Donc directement, après la création du fichier "correction_lettre.txt", j'ouvre celui-ci pour le lire. Bref ce que je voudrais faire c'est supprimer les retours à la ligne entre deux lignes de texte et tout ça dans un nouveau fichier nommé "correction_modif.txt"... malheureusement ce dernier reste vide ...

    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
     
    #! /usr/bin/perl -w
     
    open TEXTE, "< /home/nvb/Desktop/lettre.txt" or die "Fichier n'existe pas : $!";
    open CORRECTION, "> /home/nvb/Desktop/lettre_correction.txt" or die "Impossible de creer le fichier : $!";
    while ($ligne = <TEXTE>) {
    	chomp ($ligne);
    	$ligne =~ s/turlu/ /;
    	print (CORRECTION "$ligne\n");
    	print (CORRECTION "\n");
    }
    close CORRECTION;
    close TEXTE;
     
    open MODIF, "+> /home/nvb/Desktop/correction_modif.txt" or die "Fichier non trouve : $!";
    while ($line = <MODIF>) {
    	chomp($line);
    	if (!(defined($line))) {
    		print (MODIF "$line\n");
    	}
    }
    close MODIF;
    Merci d'avance pour les solutions que vous me donnerez !!

  2. #2
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Je ne comprend pas bien... Tu ouvres MODIF en lecture-écriture (donc tu écrases tout contenu précédent éventuel), puis tu essaies de lire dans ce fichier que tu viens de vider, et si tu trouve une ligne qui n'est pas définie (impossible remarque puisque de toute façon la boucle WHILE se serait déjà terminée).
    Pourquoi ne pas suivre exactement le même schéma que pour la première partie ?

    --
    Jedaï

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    A vrai dire, je me suis planté...

    En gros ce que je veux faire dans ma partie deux, c'est de lire le fichier lettre_correction.txt et chaque fois que je rencontre un "trou" entre deux ligne de texte, de le supprimer dans ce même fichier texte.
    Je sais pas si j'ai été clair dans mon explication ...

  4. #4
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Ok, tu veux faire une modification du fichier "sur place", c'est ça ? C'est une opération délicate en tout langage. Dans ce cas consulte le sujet que j'ai consacré à la question.

    --
    Jedaï

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Ok, tu veux faire une modification du fichier "sur place", c'est ça ? C'est une opération délicate en tout langage. Dans ce cas consulte le sujet que j'ai consacré à la question.

    --
    Jedaï
    Il est présent dans la FAQ maintenant

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    Parfait, grand merci !
    Explications claires et précises !
    Encore merci et bonne après midi.

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Dommage les liens de cette page ne sont plus accessibles, pourtant, je recherche aussi à faire de la "modification de fichier sur place"...

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Le lien a en effet été modifié par mes soins et il l'explication se trouve dans les sources de la rubrique Perl ici :
    - Modifier un fichier préexistant

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Après quelques recherches (et beaucoup de tests), j'ai trouvé qu'on pouvait utiliser l'option -i de façon très efficace dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #!/usr/bin/perl -pli
     
    if($. == 3) {
    	$_ .= 'et Bob était là !';
    }
    Je pense que c'est la méthode la plus efficace et élégante pour Modifier un fichier préexistant.

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

Discussions similaires

  1. lecture/écriture dans un fichier
    Par benkunz dans le forum Langage
    Réponses: 3
    Dernier message: 10/04/2007, 11h35
  2. Réponses: 47
    Dernier message: 28/01/2007, 19h39
  3. lecture écriture dans un fichier
    Par poukill dans le forum C++
    Réponses: 9
    Dernier message: 23/05/2006, 11h02
  4. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15

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