Bonjour,
Comment fait-on pour supprimer toutes les lignes d'un fichier qui ne contient pas de balises sinon on les laisse et on garde aussi les espaces qu'il y a ?
Merci
Bonjour,
Comment fait-on pour supprimer toutes les lignes d'un fichier qui ne contient pas de balises sinon on les laisse et on garde aussi les espaces qu'il y a ?
Merci
Bah c'est à toi de le faire.
Et un exmple ne ferait pas de mal![]()
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
J'ai obtenu ce que je souhaitais de cette manière :
Maitenant je voudrais remplacer les 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 #!/usr/bin/perl sub Supression { my ($file) = @_; my $temp = "$file.bak"; rename($file, $temp); open NOUVEAU, '>', $file; open ANCIEN, '<', $temp; while(<ANCIEN>) { # ligne stockée automatiquement dans $_ if ($_ !~ /^\s*<.*>(.*<\/.*>\s*)*$/) { next; } else { print NOUVEAU; } } close ANCIEN; close NOUVEAU; unlink $temp; } Supression("example.xml");
<toto></toto> -> <toto />
<titi></titi> -> <titi />
et dans le cas ou les balises contiennent des données, on ne fait rien.
Dans ma boucle while, j'ai fait :
mais j'obtiens comme erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 while(<ANCIEN>) { # ligne stockée automatiquement dans $_ if ($_ = /^\s*<.*>.*<\/.*>\s*$/) { $_ = s/^\s*<(.*)>.*<\/.*>\s*$/^\s*<$1 \/>\s*$/ ; print NOUVEAU; } else { next; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Final $ should be \$ or $name at modif_balise.pl line 15, within string syntax error at modif_balise.pl line 15, near "= s/^\s*<(.*)>.*<\/.*>\s*$/^\s*<$ 1 \/>\s*$/" Execution of modif_balise.pl aborted due to compilation errors.
Dans la deuxième partie de la substitution, ça n'a pas de sens d'utiliser les quantificateurs * ? + et les ancres les ancres ^ $. L'erreur vient de là.
De plus, tu utilises des quantificateurs gloutons (greedy) .* ; cela risque de poser des problèmes car le moteur de regex va matcher au maximum (tout jusqu'au dernier > de la ligne dans ton cas). Utilise la version non-gloutonne: .*?
Si j'ai bien compris, en fait tu veux simplement quelque chose commeJe te conseille d'utiliser un vrai parseur, à moins que ton code XML soit vraiment ultra simple et régulier et limité à un nombre très restreint de cas de figure.
Code : Sélectionner tout - Visualiser dans une fenêtre à part perl -ple 's|<(.*?)></\1>|<$1 />|g' old > new
Partager