[Perl] Extraction de texte d'une fichier
BB31
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Salut,
j'aimerai extraire des paramètres d'une fonction précise dans plusieurs fichiers appelant cette fonction.
Le parcours des fichiers, la recherche du mot clé est déjà codé.
Par contre, je n'ai aucune idée de comment est-ce qu'on va extraire des bouts de ligne.
Ma boucle :
# Run function search through each file
foreach $file (@files)
{
# Parse C file to find suRegisterPortName
print "\n\t$file";
open (SRC_FILE, "$file") or warn "E/S : $!\n";
while(<SRC_FILE>)
{
if (/suRegisterPortName/)
{
?? TO DO
}
}
close(SRC_FILE);
}
Sachant que ma function, selon les fichiers C, peut etre écrit des manières suivantes :
suRegisterPortName(toto, tata, titi);
suRegisterPortName(toto,
tata,
titi);
suRegisterPortName(toto, tata);
Et j'aimerai isoler toto et tata dans un fichier d'output pour avoir:
toto tata
toto' tata'
...
En attendant vos aides, je vais tenter ma chance :)
Merci
Benoit
j'aimerai extraire des paramètres d'une fonction précise dans plusieurs fichiers appelant cette fonction.
Le parcours des fichiers, la recherche du mot clé est déjà codé.
Par contre, je n'ai aucune idée de comment est-ce qu'on va extraire des bouts de ligne.
Ma boucle :
# Run function search through each file
foreach $file (@files)
{
# Parse C file to find suRegisterPortName
print "\n\t$file";
open (SRC_FILE, "$file") or warn "E/S : $!\n";
while(<SRC_FILE>)
{
if (/suRegisterPortName/)
{
?? TO DO
}
}
close(SRC_FILE);
}
Sachant que ma function, selon les fichiers C, peut etre écrit des manières suivantes :
suRegisterPortName(toto, tata, titi);
suRegisterPortName(toto,
tata,
titi);
suRegisterPortName(toto, tata);
Et j'aimerai isoler toto et tata dans un fichier d'output pour avoir:
toto tata
toto' tata'
...
En attendant vos aides, je vais tenter ma chance :)
Merci
Benoit
A voir également:
- [Perl] Extraction de texte d'une fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
7 réponses
Salut,
inspire toi
inspire toi
#!/usr/bin/perl use strict;use warnings; sub suRegisterPortName{ return "(${\(join '|',@_)})"; } my $var = suRegisterPortName("toto","tata"); while(<DATA>){ print "$1: $_" if /$var/; } __END__ tata - element toto - element titi - neant
ou même
#!/usr/bin/perl use strict;use warnings; sub suRegisterPortName{ return "(${\(join '|',@_)})"; } while(<DATA>){ print "$1: $_" if /${\(suRegisterPortName("toto","tata"))}/; } __END__ tata - element toto - element titi - neantmais j'avoue que je n'ai pas vraiment compris ce que tu veux ;-)
Hello,
en fait, je parse des fichiers C.
Dans ce fichiers C, je cherche l'utilisation de la fonction suRegisterPortName.
Donc des que je repere un fichier C qui contient une fonction qui utilise la fonction suRegisterportName,
je veux choper les parametres qui sont passés à cette fonction (tata, toto).
Donc il faut que je recupere et que je stocke tata et toto.
La difficulté pour moi est qu'il faut que je gère le fait que cette fonction est jamais appellée de la meme manière.
Y a des gens qui codent comme ça :
suRegister (toto, tata);
ou comme ça:
suRegister(toto,
tata);
ou comme ça:
suRegiste(
toto,
tata);
et cette fonction peut meme prendre un troisieme paramètres, mais je veux l'ignorer :
suRegister(toto, tata, titi);
Et j'avoue que je sais pas comment gerer ça.
Benoit
en fait, je parse des fichiers C.
Dans ce fichiers C, je cherche l'utilisation de la fonction suRegisterPortName.
Donc des que je repere un fichier C qui contient une fonction qui utilise la fonction suRegisterportName,
je veux choper les parametres qui sont passés à cette fonction (tata, toto).
Donc il faut que je recupere et que je stocke tata et toto.
La difficulté pour moi est qu'il faut que je gère le fait que cette fonction est jamais appellée de la meme manière.
Y a des gens qui codent comme ça :
suRegister (toto, tata);
ou comme ça:
suRegister(toto,
tata);
ou comme ça:
suRegiste(
toto,
tata);
et cette fonction peut meme prendre un troisieme paramètres, mais je veux l'ignorer :
suRegister(toto, tata, titi);
Et j'avoue que je sais pas comment gerer ça.
Benoit
je ne comprends toujours pas
la fonction suRegisterportName se trouve où? Dans tes fichiers C ou dans le script Perl
C'est simple, si tu veux parser alors il faut connaître les fichiers sources, et le résultat en sortie.
Voilà de ce que j'ai besoin pour t'aider.
la fonction suRegisterportName se trouve où? Dans tes fichiers C ou dans le script Perl
C'est simple, si tu veux parser alors il faut connaître les fichiers sources, et le résultat en sortie.
Voilà de ce que j'ai besoin pour t'aider.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Désolé, je vais essayer de clarifier :)
Le script perl : il va parcourir tous les fichiers C d'un repertoire. Il va ouvrir chaque fichier C et chercher si suRegisterPortname est utilisé dans ce fichier C. Si oui, le script Perl va récuperer les 2 premiers paramètres passés à la fonction suRegisterPortname.
Les script perl va stocker ces 2 paramètres dans un fichier txt en output.
Donc au final , je vais générer un fichier txt qui contiendra tous les couples de paramètres utilisés lors d'un appel de la fonction suRegister.
Ensuite, faudra que je généère un fichier XML, mais ça, c'est de la mise en forme, je devrai m'en sortir sans souci.
j'ai été plus clair ?
benoit
Le script perl : il va parcourir tous les fichiers C d'un repertoire. Il va ouvrir chaque fichier C et chercher si suRegisterPortname est utilisé dans ce fichier C. Si oui, le script Perl va récuperer les 2 premiers paramètres passés à la fonction suRegisterPortname.
Les script perl va stocker ces 2 paramètres dans un fichier txt en output.
Donc au final , je vais générer un fichier txt qui contiendra tous les couples de paramètres utilisés lors d'un appel de la fonction suRegister.
Ensuite, faudra que je généère un fichier XML, mais ça, c'est de la mise en forme, je devrai m'en sortir sans souci.
j'ai été plus clair ?
benoit
Salut,
root@debian:~/trash# ls -1 *.c fic1.c fic2.c fic3.c fic4.c root@debian:~/trash# cat fic1.c suRegisterPortName(toto, tata, titi); root@debian:~/trash# cat fic2.c suRegisterPortName(toto, tata, titi); root@debian:~/trash# cat fic3.c suRegisterPortName(toto, tata); root@debian:~/trash# cat fic4.c suRegisterAutreChose(toto, tata, titi); root@debian:~/trash# cat ccm.pl #!/usr/bin/perl use strict;use warnings; my $param; my $f; while ($f = <*.c>){ open FIC,$f or warn "E/S : $!\n"; while(<FIC>){ if (/suRegisterPortName/ .. /;/){ s/\n//; $param .= $_ ; } } close(FIC); } my @t = split /;/,$param; for (@t){print "$1 $2\n" if /\((\w+)\s*,\s*(\w+)/} __END__ root@debian:~/trash# perl ccm.pl toto tata toto tata toto tata root@debian:~/trash#