Tom's Guide > Forum > Programmation > perl : suppression de ligne dans un fichier

perl : suppression de ligne dans un fichier

Forum Programmation : perl : suppression de ligne dans un fichier

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour tout le monde !

Voila j'ai un petit souci, je viens tout juste de commencé le perl (donc pas de moquerie), et je cherche quel code me permetterait de supprimer certaine ligne d'un fichier. une partie de ce fichier est ci dessous :


207 00:04:75:E9:EC:15 255.255.255.255 unknown
207 00:20:ED:6C:53:31 255.255.255.255 unknown
207 00:0F:1F:64:18:F2 14.75.15.200 srv35.conseil

il s'agit de champs qui sont respectivement n° de port/ adresse Mac / adresse IP / nom de machine collecté par snmp bref le souci n'est pas la.
Il y en a d'autres mais je n'ai pas tout mis car ce n'est pas important.

je suis allé voir dans certaines documentation et ca parlais vaguement de la fonction truncate() mais ca disait que ca supprimait seulement la derniere ligne


En fait il faudrait que le code supprime les lignes du fichier dans lesquelle se trouve les adresses 255.255.255.255 afin que celui ci s'en retrouve modifié.


Bon si vous savez quelquechose c'est gentil de m'aider
Merci d'avance
A+

ps : le fichier à modifier s'appelerait decoup.txt et on l'insererait dans la variable PORT grace à

Code :
  1. OPEN(PORT, c:/... /decoup.txt);

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

en remplacant l'occurence de la chaine "207 00:04:75:E9:EC:15 255.255.255.255 unknown" par un vide .
$file=~s/207 00:04:75:E9:EC:15 255.255.255.255 unknown//
sa syntaxe est s/modele initiale /modele de remplacement/

Répondre à defaultuser

ok d'accord mais le probleme c'est qu'il faut que cette opération ce réa lise dans une boucle if.

en gros if $ligne[2] eq "255.255.255.255" then ... (suppression de la ligne)
parceque les information qui sont a coté de 255.255.255 ne sont jamais les meme.

Autre chose, je travaille sur un logiciel qui existe déja et il ne faut pas qu'il y est de blanc dans le fichier PORT. une fois qu'une ligne est supprimée, il faut que toutes lignes du dessous "remonte" afin qu'elle se colle (sinon le logiciel plante).

merci de votre aide :-D

Répondre à Grom51

Plop, je ne suis pas sur que l'on puisse mettre de scalaires dans un sed mais bon.

Sinon tu pourrais test un truc dans le genre. Si vous sauriez gerez les open mieux que la je suis preneur!

Code :
  1. #!/usr/bin/perl -w                       
  2.                                                                      
  3. open(FILE, "< decoup.txt" )
  4.     or die ("prob a l'ouverture du fichier" );
  5. @save = <FILE>;
  6. close(FILE);
  7. foreach (@save)
  8. {
  9.     $_ = "" if ($_ =~ m/255.255.255.255/);
  10.     chomp $_;
  11. }
  12. open(FILE, ">decoup.txt" )
  13.     or die ("prob a l'ouverture du fichier" );
  14. foreach (@save)
  15. {
  16.     print FILE $_."\n" if ($_);
  17. }
  18. close(FILE);

Répondre à AsMoDaiii

ok mais je viens de voir sur commentcamarche.com que pour ouvrir un fichier en écriture (ce qui est le cas en l'occurence) il faut mettre devant le chemin du fichier >> :

Code :
  1. open(FILE, ">>decoup.txt" )



enfin je vais essayé ce que tu m'as donné ;-)

Répondre à Grom51

Non, ca ca va mettre tout ce que tu ecris a la fin.
Edit: donc ca ne supprimera pas les lignes non souhaitees

Répondre à AsMoDaiii

CA MAAAAAAAAAAAARCHE !!!!!!!!!
Franchement t'as trop assuré AsMoDaiii ca commencais a me prendre la tete. MERCI MILLE FOIS !! :-D :-D

Répondre à Grom51
Tom's Guide > Forum > Programmation > perl : suppression de ligne dans un fichier
Aller à :

Il y a 2123 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens