[Perl] Extraction de texte d'une fichier
Fermé
BB31
Messages postés
1
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
24 septembre 2007
-
24 sept. 2007 à 15:21
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 1 oct. 2007 à 12:39
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 1 oct. 2007 à 12:39
A voir également:
- [Perl] Extraction de texte d'une fichier
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Fichier host - Guide
7 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
24 sept. 2007 à 16:13
24 sept. 2007 à 16:13
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
24 sept. 2007 à 16:17
24 sept. 2007 à 16:17
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
24 sept. 2007 à 16:59
24 sept. 2007 à 16:59
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
1 oct. 2007 à 12:39
1 oct. 2007 à 12:39
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#