Rechercher : dans
Par :

[PERL] Recherche sous chaine de caractères

Dernière réponse le 23 mar 2007 à 12:55:43 NewKind, le 23 mar 2007 à 10:45:02 
 Signaler ce message aux modérateurs

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 ?

Meilleures réponses pour « [PERL] Recherche sous chaine de caractères » dans :
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
VBScript - Les fonctions de chaînes de caractères VoirLes fonctions de chaînes de caractères Fonction Description Filter(InputStrings, Value[, Include[, Compare]]) Sélectionne des chaînes de caractères parmi un tableau de chaînes...

1

blux, le 23 mar 2007 à 10:54:10

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...
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

2

lami20j, le 23 mar 2007 à 11:12:57

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) lami20j

Répondre à lami20j

3

NewKind, le 23 mar 2007 à 11:17:25

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 !

Répondre à NewKind

5

lami20j, le 23 mar 2007 à 11:53:01

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

Répondre à lami20j

4

NewKind, le 23 mar 2007 à 11:37:22

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.

Répondre à NewKind

6

lami20j, le 23 mar 2007 à 11:57:25

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 :-)) lami20j

Répondre à lami20j

7

NewKind, le 23 mar 2007 à 12:18:24

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";

Répondre à NewKind

8

blux, le 23 mar 2007 à 12:41:06
  • +1

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...
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

9

 lami20j, le 23 mar 2007 à 12:55:43
  • +1

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

Répondre à lami20j
Collection CommentÇaMarche.net