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 :

[langage] Effacer une ligne dans un fichier


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 16
    Points
    16
    Par défaut [langage] Effacer une ligne dans un fichier
    Salut,

    j'ai une liste de mots dans un fichier avec une une phrase à côté, quelque chose du genre

    mot1 : phrase1
    mot2 : phrase2
    etc.

    J'aimerais pouvoir supprimer des lignes qui commencent par certains mots, par exemple les mots dont la longueur est plus petite que 2, comment est-ce que je peux faire?

    Pour le test c'est bon, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @mail = <FILE>;
    for ($i=0; ($i< scalar @mail); $i++){
    $word = $mail[$i];
    $word =~ m/^\w+/;
    $word = "$&";
    chomp($word);
    Ensuite je voudrais faire quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (length(word) < 3) {
    #supprimer la ligne
    }
    Merci!

    Sébastien

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Tu peux essayer quelquechose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (length($word) < 3) {
      delete $mail[$i];
    }
    à l'intérieur de ta boucle en $i

    Attention, toutefois, car l'élément supprimé par le delete laisse une place vide. Avant toute opération subséquente sur un élément de @mail, il faut faire un test de validité avec defined. Comme par exemple pour le sortir dans un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open NEWFILE,  ">essai.txt" ;
    map { print NEWFILE $_."\n" if (defined $_) } @mail;
    close NEWFILE;
    à mettre après ta boucle en $i.

    Le "map" parcours tous les éléments de la liste passée en second paramètre et applique le traitement du bloc passé en premier paramètre, soit ici une sortie dans le fichier si la valeur courante ($_) est définie (i.e. pas supprimée).

    Bonne continuation.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  3. #3
    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
    La façon "habituelle" de le faire relèverait plutôt de la lecture ligne à ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    open FILE, '<', 'machin.txt';
    open NEWFILE,  '>', 'essai.txt' ;
     
    while( my $mail = <FILE> ) {
      my $word = ($mail =~ m/^\w+/);
      print NEWFILE $mail unless length( $word ) <= 2;
    }
    Libre à toi bien sûr de mettre un push à la place du print, si tu envisages de réutiliser ces données (ou d'utiliser un hash, plus vraisemblablement, mais dans ce cas, il faudra perfectionner la regex).

    --
    Jedaï

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

Discussions similaires

  1. Effacer une ligne dans un fichier .dat
    Par Ben.r dans le forum Android
    Réponses: 8
    Dernier message: 29/07/2013, 13h15
  2. effacer une chaine de caractère dans une ligne dans un fichier texte
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/08/2010, 10h22
  3. [CSV] Effacer une ligne dans un fichier CSV
    Par poulepexo dans le forum Langage
    Réponses: 1
    Dernier message: 22/04/2009, 12h12
  4. Effacement d'une ligne dans un fichier txt
    Par DjChat dans le forum Langage
    Réponses: 4
    Dernier message: 09/06/2008, 10h41
  5. [FSO] Effacer une ligne dans un fichier
    Par Johnbob dans le forum ASP
    Réponses: 4
    Dernier message: 30/05/2007, 16h23

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