Bonjour,
Je souhaiterais savoir quelle(s) commande(s) en PERL permet(tent) d'insérer une ligne dans un fichier entre deux lignes (entre les lignes 3 et 4 par exemple).
Merci d'avance.
Bonjour,
Je souhaiterais savoir quelle(s) commande(s) en PERL permet(tent) d'insérer une ligne dans un fichier entre deux lignes (entre les lignes 3 et 4 par exemple).
Merci d'avance.
Ajouter une ligne dans un fichier ne fait pas spécialement partie des attributions de perl et de ce fait, par défaut ce n'est pas forcément très simple.
La première méthode consiste à lire le fichier et de le réécrire avec les modifications dans un autre fichier.
une autre méthode consiste à utiliser le module Tie::File qui permet d'accéder aux ligne d'un fichier via un tableau.
D'accord merci mais il ne serait pas possible sinon de chercher la position de la ligne suite à laquelle on souhaite ajouter une ligne (la ligne 2 si on souhaite ajouter une ligne entre les lignes 2 et 3 par exemple) et de la remplacer par elle-même avec un ou deux sauts de lignes pour ensuite faire un "print" de la ligne que l'on souhaite ajouter en y indiquant la position où on veut ajouter la ligne.
Ainsi la ligne 3 se retrouverait à la ligne 4 et on ferait un "print" en indiquant dans cette commande que l'on souhaite ajouter la ligne dans la ligne 3 (je ne sais pas si c'est clair ...).
Et sinon ca se passerait comment avec Tie::File?
Salut,
Par défaut perl sais lire un fichier, mais pas le modifier directement en ligne.
d'où le lire, puis le réécrire dans un autre fichier.
Le module Tie::file, lui le permet.
Le principe avec ce module c'est qu'il "voit" le fichier en tant que tableau. Chaque ligne du fichier correspond à une entrée dans le tableau
Tu manipules un tableau mais en fait c'est le fichier lui même
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 use Tie::File; tie @array, 'Tie::File', filename or die ...; array[13] = 'blah'; # line 13 of the file is now 'blah' print $array[42]; # display line 42 of the file
voilà le lien de la doc Cpan du module:
http://search.cpan.org/~mjd/Tie-File...ib/Tie/File.pm
Voici un exemple d'insertion entre 2 lignes:
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 #!/usr/bin/perl use Tie::File; use strict; use warnings; my $filename = "tiefileinput.txt"; my @array; #ouverture du fichier tie @array, 'Tie::File', $filename or die print "error: while opening $filename\n"; # Affichage du fichier for (my $i=0; $i<scalar(@array); $i++) { print $array[$i]."\n"; } # insertion d'une ligne entre la ligne 2 et 3 splice @array, 2, 0, 'Coooool'; # Affichage du fichier for (my $i=0; $i<scalar(@array); $i++) { print $array[$i]."\n"; } # Fermeture du fichier untie @array;
Pour le fun, un one-liner qui ajoute une ligne contenant "toto" entre la troisième et la quatrième ligne du fichier en entrée.
D'accord, il ne touche pas au fichier d'origine, et ne fait que produire le texte modifié, mais il suffit d'ajouter une option de ligne de commande pour qu'il le fasse. Ce qui n'est à faire qu'avec une extrême prudence. J'insiste. Je me sers des one-liners tous les jours, je me considère comme plutôt calé en la matière, mais je n'ai pas utilisé cette option depuis près de trois ans. Et c'est pourquoi je ne précise pas l'option en question : elle sert de toute façon rarement, et j'estime préférable de laisser à un novice le temps de réfléchir et de se renseigner en la cherchant dans la documentation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part perl -lpe'print "toto" if $.==4' fichier_en_entrée
@djibril: n'oublie pas d'ajouter cet uniligne ici, si schmorgluck est d'accord : http://perl.developpez.com/sources/?...lignes-fichier![]()
Je l'aurais bien proposé moi-même, mais je ne pensais pas qu'il serait intéressant.![]()
@Philou67430 : pas de soucis.
@Schmorgluck : Mets-nous un exemple plus propre qui modifie le fichier original, vu que c'est le but premier. Met le ici. N'hésite pas de rajouter l'option -pi.bak pour une éventuelle sauvegarde du fichier original.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager