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 :

Supprimer la ligne courante dans un ficher


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 7
    Points
    7
    Par défaut Supprimer la ligne courante dans un ficher
    slt a tous

    voila, je suis en train de manipuler un fichier texte avec perl,
    en effet ce que je fait c'est extraire des donnees (ca c'est bon) puis j'aimerai bien supprimer la ligne traiter (ca c'est ) je vous envoie mon petit programme si quelqu'un peu m'aider....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #!/bin/perl 
    use strict;use warnings;
     
    open (F, '+< /root/.gnome-desktop/fichier' )|| die "probleme d'ouverture du fichier ";
    while(<F>){
    ###je fait le traitement de la ligne $_
    $_ = "";
    chomp $_;#je supprime le retour chariot
    ###ce j'arrive pas a terminer est la suite, j'ai pas su quoi faire
    }
    close F;

  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
    Tout d'abord : ON NE POSTE PAS DANS CE FORUM, on poste dans les sous-forums, comme c'est clairement indiqué en haut de ce forum... Ton prochain message ici sera supprimé sans avertissement (à part un MP), pour celui-ci je me contente de le déplacer dans le sous-forum Langage.


    On ne peut pas simplement "supprimer une ligne" dans un fichier, ceci est rendu impossible par la façon dont est stocké un fichier. En effet le fichier est une suite d'octet contigus en mémoire (ou du moins qui nous apparaissent ainsi à notre niveau), donc "supprimer une ligne" implique forcément de déplacer toute la fin du fichier pour combler le trou...

    C'est pourquoi on rencontre plusieurs stratégies pour traiter ce problème :
    1. On ouvre en lecture/écriture, on met l'ensemble du fichier en mémoire (par exemple dans un tableau de lignes), on le modifie là, on tronque le fichier initial et on réécrit la version modifiée
    2. On lit enregistrement par enregistrement (ligne par ligne par exemple) le fichier, et on modifie chaque enregistrement selon ses besoins, puis on le réécrit dans un autre fichier, finalement on écrase le fichier original par la version modifiée.
    3. Variation 1 : On ne met en mémoire que la fin du fichier, la partie à partir de la première modification
    4. Variation 2 : On utilise un tampon pour mettre à jour la fin du fichier en procédant par petit bout, sans écraser les données qu'on n'a pas encore mis en mémoire.


    Chacune de ses solutions a ses avantages et ses inconvénients :
    1. Pour les gros fichiers cette stratégie est très lourde en mémoire.
    2. Bonne solution, sauf si ton disque est encombré... De plus ce n'est pas forcément optimal de tout recopier alors qu'on a modifié qu'un enregistrement
    3. Pas mal, mais même problème que le 1 si l'enregistrement est au début du fichier.
    4. L'idéal, ou presque, mais très complexe à mettre en place, surtout de façon intelligente (c'est à dire par exemple en permettant de faire plusieurs modifications avant de commencer à modifier le fichier).


    Je te conseille de t'en tenir à la solution 2 dès lors que tu as de grosses modifications à effectuer sur des fichiers dont tu n'es pas sûr de la taille.
    La solution 1 peut convenir si tu es sûr que tes fichiers resteront petits (mais on peut rarement être vraiment sûr dans un environnement informatique).

    La solution 4 est trop complexe pour être utilisé à la main, mais ça tombe bien, Perl est fourni en standard depuis la 5.8 avec un module Tie::File qui implémente ce modèle de façon intelligente. (Tie::File est compatible avec Perl depuis la version 5.4 mais n'est pas en standard avec les versions inférieures à la 5.8) Tie::File permet de "lier" un tableau à un fichier, de sorte que tu peux manipuler ton fichier comme s'il s'agissait d'un tableau de lignes, et Tie::File s'occupe de toutes les modifications réelles du fichier. Par exemple tu peux supprimer une ou des lignes avec splice().

    --
    Jedaï

Discussions similaires

  1. [VBA] Comment supprimer une ligne entiere dans excel
    Par babouoles dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 06/07/2017, 08h34
  2. Supprimer des lignes vides dans un label
    Par benjhe dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/12/2007, 08h57
  3. Réponses: 4
    Dernier message: 26/07/2007, 11h35
  4. Obtenir l'index de la ligne courante dans une repeating table
    Par stephane eyskens dans le forum InfoPath
    Réponses: 7
    Dernier message: 25/05/2007, 17h55
  5. [MySQL] Supprimer une ligne afficher dans une base de donnée
    Par julienchpt dans le forum PHP & Base de données
    Réponses: 31
    Dernier message: 14/10/2005, 15h45

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