Bonjour,

J'ai un fichier qui se compose comme cela :

Type de document Ouvrage
Thème ARCHITECTURE
Titre Symboles et décors des maisons villageoises : marques sociales, protections magiques
Auteurs FILLIPETTI Hervé
isbn 2-84038-219-9
Référence Rustica
Commentaire fgsdfgsdfggggfdgfssdfg
sdfgdsfgdsfgsd
sdfgdfgs
Numéro 121
Titre2 test


Toutes mes lignes commencent pas des "intitulés de champs", malheureusement dans le champ commentaire il y arrive qu'il y ait des retour à la ligne. J'ai un script qui interpret ses retour à la ligne comme des chagements de champs. Je voudrais donc supprimer tout les \n qui ne sont pas suivit d'un intitulé(Auteurs,isbn,Numéro...).

Je ne connais vraiment pas grand chose à Perl et je ne vois aps comment mettre en forme mon idée.


Je pensais à

récupéré les saut de lignes et le mot suivant avec un /(\n)(.*\s)/

Puis tester si $2 etait dans ma liste de champs(Auteurs,isbn,Numéro...).
Si c'est le cas je ne fais rien sinon je fais un s/$1$2//g.


Je ne sais pas si cette solution est correcte, en tout cas si elle l'est je ne vois aps comment appliquer ca en perle, quelqueu pourrait m'aideR?

Merci!


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
 
open(FH, 'fichiertest.txt');
my $content;
$content .= $_ while (<FH>);
close(FH);
 
my $condition = '(\n)(\p{L}*)';
my $champok = 1;
my @montableau_de_champ = ("Titre","Numéro","Auteurs");
 
while ( $content =~ /$condition/)
{
	foreach $mavar (@montableau_de_champ)
	{
		if ($2 == $mavar)
		{
			$champok=0;
		};
	}
	if ( $champok == 1 )
	{
		$content =~ s/$1$2//;
	} 
}