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] Suppression de lignes redondantes dans un fichier


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 31
    Points : 17
    Points
    17
    Par défaut [langage] Suppression de lignes redondantes dans un fichier
    Bonjour,

    Voilà j'ai ce type de fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	"10.23.131.173" -- "10.23.131.205"
    	"10.23.131.173" -- "10.23.129.27"
    	"10.23.131.173" -- "10.23.129.59"
     
    	"10.23.131.205" -- "10.23.131.173"
    	"10.23.131.205" -- "10.23.129.26"
    	"10.23.131.205" -- "10.23.129.58"
    chaque ligne definit un lien entre 2 equipements reseau.

    Je souhaite supprimer les lignes redondantes, comme par ex
    et qui définissent 2 fois le meme lien, et n'en laisser qu'une seule des 2. (les liens sont définis au max 2 fois)

    J'ai codé ça :

    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
    $fichier1 = "$dirGrapheComplet/Graphe.dot";
    $fichier2 = "$dirGrapheComplet/GrapheSansDoublon.dot";
     
    #On ouvre le fichier à modifier :
    open(AMODIFER,"$fichier1") || die "Pb a l'ouverture de $fichier1 !" ;
     
    #On ouvre le fichier temporaire et on le crée si necessaire :
    open(TEMPORAIRE,">$fichier2") || die "Pb a l'ouverture de $fichier2 !" ; 
     
    # Pour chaque ligne du fichier à modifier on l'inscrit dans le fichier temporaire,
    # sauf si elle correspond au critère de la ou les lignes à supprimer.
    while(<AMODIFER>)
    {
    	chomp ;
    	if ($_ =~ /^\s+"([0-9.\/]*)"\s\-\-\s"([0-9.\/]*)"/)
    	{
        		$ip1 = $1 ;
    		$ip2 = $2 ;
    		print "ip1 : $ip1\tip2 : $ip2\n" ;
      	} 
    	elsif ($_ =~ /^\s+"$ip2"\s\-\-\s"$ip1"/)
    	{
    		# ligne redondante a supprimer
    		print "a supp :\n$_\n" ;
    		next ;
    	}
    	else
    	{
    		print TEMPORAIRE "$_\n" ;
    	}
    }
    mais ca me supprime toutes les lignes.... ?!
    merci de votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    Ma methode (qui semble fonctionner) :
    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
     
     
    #!/usr/bin/perl
    use strict;
    open (FILE,"<liste.txt") || die "Erreur : $!\n";
    my @new_liste;
    while (<FILE>){
    	my $ligne=$_;
    	chomp $ligne;
    	my $is_ok=1;
    	my ($Aip1,$Aip2)=split " -- ",$ligne;
    	# on va regarder si une ligne "inverse" existe
    	foreach (@new_liste)
    	{
    		@_=split " -- ",$_;
    		if ((($_[0] eq $Aip2) and ($_[1] eq $Aip1)) or (($_[0] eq $Aip1) and ($_[1] eq $Aip2))){
    			$is_ok=0;
    			last;
    		}
    	}
    	if ($is_ok){
    		push @new_liste, $ligne;
    		print "$ligne\n";
    	}
    }
    close (FILE);
    les fautes d'orthographe de ce texte sont sous license GPL. Merci d'informer le proprietaire de la faute en cas de modification.

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Merci mais je ne parviens pas a adapter ton code et je suis donc toujours bloquée

    voila a koi ressemble mon fichier :

    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
    edge [
    	fontsize = "14"
    	fontname = "Arial"
    	fontcolor = "black"
    	color = "turquoise1"
    	labelfontcolor = "blue"
    	labeldistance = "1.5"
    ]
     
    	"10.23.131.173" -- "10.23.131.205" [fontcolor="purple", label="1", color="purple"...]
    	"10.23.131.173" -- "10.23.129.27" [fontcolor="purple", label="2", color="purple" ...]
     
    "10.23.131.173"[
    	label = "\N\nS-COU-S2J27H-BB"
    	color = "black"
    	width = "0.75"
    merci pour votre aide

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    si ayè

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    cool
    les fautes d'orthographe de ce texte sont sous license GPL. Merci d'informer le proprietaire de la faute en cas de modification.

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

Discussions similaires

  1. supprission des lignes redondantes dans un fichier
    Par goldray dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 20/10/2013, 21h50
  2. Suppression de lignes blanches dans un fichier texte
    Par supcomingenieur dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 15/05/2013, 22h42
  3. Suppression d'une ligne particulière dans un fichier texte
    Par Aymeric41 dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 29/08/2011, 13h53
  4. Réponses: 4
    Dernier message: 26/07/2007, 11h35
  5. Réponses: 6
    Dernier message: 04/03/2004, 09h35

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