[PERL] Recherche sous chaine de caractères

Résolu
NewKind Messages postés 16 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   -
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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 27106 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention   2
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention   2
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention   2
 
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 27106 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
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