[PERL] Recherche sous chaine de caractères

Résolu/Fermé
NewKind Messages postés 16 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 15 novembre 2007 - 23 mars 2007 à 10:45
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 23 mars 2007 à 12:55
Salut,

J'ai récupéré le resultat d'une commande dans un fichier, et je souhaiterai extraire une partie du contenu de ce fichier.
Or la chaine de caractere que je souhaite récupérér change à chaque fois, j'aurais donc voulu procéder de la façon suivante:

- Indiquer une chaine de caractère ou un mot clé présent dans le fichier
- demande à récupérer le reste de la ligne concerncée uniquement.

Mon probleme est que je n'arrive pas à trouver de fonction de recherche adaptée. Quelqu'un aurait il une idée ?
A voir également:

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 567
23 mars 2007 à 12:55
file : nom_de_fichier_qui_change_toujours.bin blablablabla
Mon but c'est de recuperer le nom de fichier pour pouvoir l'inserer dans une commande qui va le telecharger.


en ce cas tu peux aussi utiliser une regex de genre
$fic = /.*\b(.+(?=\.bin))/;
--
lami20j
1
blux Messages postés 25999 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
23 mars 2007 à 10:54
Salut,

tu peux utiliser la fonction 'index' qui indique la position d'une sous-chaine dans une chaine, et utiliser ensuite la fonction 'substr' qui extrait une chaine d'une autre à partir d'une certaine position sur une certaine longueur...
0
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 567
23 mars 2007 à 11:12
Salut,

tu peux aussi utiliser les regex
je pense que tu veux qu'on t'aide ça sera mieux d'être plus clair dans ta demande (pour parser une chaîne il faut savoir - et ce n'est pas un choix - l'entrée , ce qu'on veut trouver et ce qu'on veut obtenir en sortie)
0
NewKind Messages postés 16 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 15 novembre 2007 2
23 mars 2007 à 11:17
Merci ! Je vais me renseigner sur "index" et "substr".

J'avais deja repéré index, mais je ne savais pas quoi faire de son resultat.

Pour lami20j j'essaye d'etre précis justement. La sortie de ma recherche ne sera jamais la meme, c'est pour ça que je ne trouvais pas de fonction que je pouvais utiliser directement, je suis obligé d'en combiner plusieurs et je les connais trop peu, mais comme ça je devrais m'en sortir.

Merci !
0
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 567
23 mars 2007 à 11:53
Re,

si tu as toujours la même position tu peux utiliser sans problème substr ou index et encore unpack

$b = unpack("x6 A6", $a);  # avance 6 caractères et récupére les 6 suivants


($b, $c) = unpack("x6 A2 X5 A2", $a); # avance 6, récupére 2; en arrière, récupére 2
print "$b\n$c\n";
--
lami20j
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NewKind Messages postés 16 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 15 novembre 2007 2
23 mars 2007 à 11:37
En fait ça ne fonctionne pas vu qu'avec Index je suis obligé de savoir à l'avance ce que je recherche. Ca n'est pas mon cas.

Je vais plutot utiliser wget pour effectuer la recherche, mon script Perl ne fera que recuperer la valeur qu'il renvoit. Voila.
0
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 567
23 mars 2007 à 11:57
Salut,

mais tu cherches quand même quelque chose
et ce quelque chose tu le connais

tu dis que la sortie ne sera jamais la même
donne un exemple de quelques sorties pour voir si on trouve une solution
aide nous pour pouvoir t'aider :-))
0
NewKind Messages postés 16 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 15 novembre 2007 2
23 mars 2007 à 12:18
Ah !
Bah voila Unpack c'est parfait, c'est exactement ce que je cherchais :-)

Ca m'evite d'avoir recours à wget !

En fait mon fichier contient une ligne avec
file : nom_de_fichier_qui_change_toujours.bin blablablabla
Mon but c'est de recuperer le nom de fichier pour pouvoir l'inserer dans une commande qui va le telecharger.

Parfait ! Merci beaucoup pour votre aidre ;)

$b = unpack("x6 A6", $a);  # avance 6 caractères et récupére les 6 suivants


($b, $c) = unpack("x6 A2 X5 A2", $a); # avance 6, récupére 2; en arrière, récupére 2
print "$b\n$c\n";
0
blux Messages postés 25999 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
23 mars 2007 à 12:41
Sinon, tu cherches .bin, tu prends ce qu'il y a devant et tu coupes le début... Parce qu'unpack t'oblige à avoir la même longueur de nom de fichier...
0