[PERL]Récupération chaîne caractère...
Résolu/Fermé
Zep3k!GnO
lami20j
- Messages postés
- 2025
- Date d'inscription
- jeudi 22 septembre 2005
- Statut
- Membre
- Dernière intervention
- 18 novembre 2015
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
A voir également:
- [PERL]Récupération chaîne caractère...
- [PERL]Récupération chaîne caractère... ✓ - Forum - Perl
- Récupération d'une chaine caractère entre balises HTML ✓ - Forum - Javascript
- Récupérer emails dans chaine caractères ✓ - Forum - Webmaster
- [perl] inserer un caractere dans chaine ✓ - Forum - Perl
- [Perl] substitution chaîne de caractères ✓ - Forum - Perl
7 réponses
lami20j
28 févr. 2006 à 07:22
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
28 févr. 2006 à 07:22
Une autre possibilité c'est d'utiliser un test avant qui ne consomme pas de texte, comme ça tu ne fais q'une seule capture.
#! /usr/bin/perl use warnings; while (<>) { s/\b(?= # teste avant si on a \w+\@art # coucou@art \[ # a partir de [ ( # on capture ce que nous interesse dans $1 [^\]]+ ) \] )\b /+$1+ /xg; # on ajoute $1 avant coucou @art[contenu] dans ma ligne print; }
Zep3k!GnO
10 nov. 2005 à 10:49
- Messages postés
- 2025
- Date d'inscription
- jeudi 22 septembre 2005
- Statut
- Membre
- Dernière intervention
- 18 novembre 2015
10 nov. 2005 à 10:49
j'ai déjà trouvé ça :
Je trouve donc correctement les ligfnes ou mon occurence est présente mais le problème est qu'il y a des fois ou mon occurence est présente plusieurs fois dans la ligne . . . et avec ce script je trouve que la première occurence . . .
Voilà, j'attend xD une bonne âme ki m'aide . .
Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
while ($ligne = <>) { if($ligne=~m/@art\[([^\]]+)\]/) #si je trouve @art[contenu] dans ma ligne.je traite le contenu { $inter=$1; #POUR les tests $ligne="+$inter+ $ligne"; #POUR les tests } print ("$ligne"); }
Je trouve donc correctement les ligfnes ou mon occurence est présente mais le problème est qu'il y a des fois ou mon occurence est présente plusieurs fois dans la ligne . . . et avec ce script je trouve que la première occurence . . .
Voilà, j'attend xD une bonne âme ki m'aide . .
Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
jisisv
10 nov. 2005 à 10:58
- Messages postés
- 3645
- Date d'inscription
- dimanche 18 mars 2001
- Statut
- Modérateur
- Dernière intervention
- 15 janvier 2017
10 nov. 2005 à 10:58
Utilise l'option 'g'
$st =~ m/modele/g;
Je regarderai ton problème en détail quand j'aurai un petit peu de temps...
$st =~ m/modele/g;
Je regarderai ton problème en détail quand j'aurai un petit peu de temps...
Zep3k!GnO
10 nov. 2005 à 11:20
- Messages postés
- 2025
- Date d'inscription
- jeudi 22 septembre 2005
- Statut
- Membre
- Dernière intervention
- 18 novembre 2015
10 nov. 2005 à 11:20
Merci mais avec le g ça ne change rien . . .
j'obtient toujours en début de ligne sur mon document résultant mon
+monModele+ blahblahblah
et monModele vaut la valeur de la première occurence dans la ligne.
sinon je me dis qu'il est possible en PERl si je ne m'abuse de tout fair d'un coups genre :
s/Mon_modèle_de_recherche/traitement_du_modele/g;
avec dans la zone de traitement du modele, les fonctions pour supprimmer de monModele tout caractère qui n'est pas un chiffre ni une lettre ni un '-' .
ça serait plus facile mais moins lisible.. Mais tout ce que je veux c'est que mon fichier soit traité donc la lisibilité pour ce coups ci , vous imaginez ce que j'en fait ! hi hi hi
Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
j'obtient toujours en début de ligne sur mon document résultant mon
+monModele+ blahblahblah
et monModele vaut la valeur de la première occurence dans la ligne.
sinon je me dis qu'il est possible en PERl si je ne m'abuse de tout fair d'un coups genre :
s/Mon_modèle_de_recherche/traitement_du_modele/g;
avec dans la zone de traitement du modele, les fonctions pour supprimmer de monModele tout caractère qui n'est pas un chiffre ni une lettre ni un '-' .
ça serait plus facile mais moins lisible.. Mais tout ce que je veux c'est que mon fichier soit traité donc la lisibilité pour ce coups ci , vous imaginez ce que j'en fait ! hi hi hi
Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Zep3k!GnO
10 nov. 2005 à 13:36
- Messages postés
- 2025
- Date d'inscription
- jeudi 22 septembre 2005
- Statut
- Membre
- Dernière intervention
- 18 novembre 2015
10 nov. 2005 à 13:36
Pour le moment j'ai un peu contourné le problème en bricolant mais si quelqu'un aune idée PROPRE, j'suis toujours à l'écoute.
Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
Zep3k!GnO
10 nov. 2005 à 14:13
- Messages postés
- 2025
- Date d'inscription
- jeudi 22 septembre 2005
- Statut
- Membre
- Dernière intervention
- 18 novembre 2015
10 nov. 2005 à 14:13
bah ca m'a pas l'air dégueux ce que j'ai fais, je vais rester dessus...
hé hé hé
Merci quand même :D
Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
hé hé hé
Merci quand même :D
Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
lami20j
27 févr. 2006 à 20:51
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
27 févr. 2006 à 20:51
Malgré 2005-11-10 10:18:13 (GMT+1) essaie ça
#! /usr/bin/perl use warnings; while (<>) { s/( # 1ere capture en $1 \w+\@art # coucou@art \[ # a partir de [ ( # 2eme capture en $2 [^\]]+ ) \] ) /+$2+ $1/xg; #si je trouve @art[contenu] dans ma ligne.je traite le contenu print; }
lami20j
27 févr. 2006 à 21:32
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
27 févr. 2006 à 21:32
Re,
Quelque petits conseils :
1
$inter=$1;
$ligne="+$inter+ $ligne";
Pas besoin d'introduire la variable $inter, tu peux utiliser directement $1
Donc $ligne ="+$1+ $ligne";
2
Pas besoin d'utiliser des paranthèses pour afficher.
print ("$ligne");
Je trouve donc correctement les ligfnes ou mon occurence est présente mais le problème est qu'il y a des fois ou mon occurence est présente plusieurs fois dans la ligne . . . et avec ce script je trouve que la première occurence . . .
En fait il ne s'agit pas de ce que tu trouves mais plutôt de ce que tu affiches.
$ligne="+$inter+ $ligne";
Veut dire que chaque ligne est remplacée avec le contenu de $1 et la ligne.
Ex:
disons que le contenu soit +L. 125-65+
et pour les lignes on a
coucou@... et 2eme fois coucou@....
Le résultat sera
+L. 125-65+ coucou@... et 2eme fois coucou@....
même si tu trouves tous les occurences avec le modificateur /g
m//
Mais il ne faut pas oublier pas non plus que en contexte scalaire m//g indique une detection progressive et dans un contexte de liste m//g renvoie la liste de toutes les occurences.
=======================================
s///
Dans ce cas s///g actionne comme un recherch/remplecement global qui modifie tout d'un coup et il ne fait pas de détection progressive en contexte scalaire.
Quelque petits conseils :
1
$inter=$1;
$ligne="+$inter+ $ligne";
Pas besoin d'introduire la variable $inter, tu peux utiliser directement $1
Donc $ligne ="+$1+ $ligne";
2
Pas besoin d'utiliser des paranthèses pour afficher.
print ("$ligne");
Je trouve donc correctement les ligfnes ou mon occurence est présente mais le problème est qu'il y a des fois ou mon occurence est présente plusieurs fois dans la ligne . . . et avec ce script je trouve que la première occurence . . .
En fait il ne s'agit pas de ce que tu trouves mais plutôt de ce que tu affiches.
$ligne="+$inter+ $ligne";
Veut dire que chaque ligne est remplacée avec le contenu de $1 et la ligne.
Ex:
disons que le contenu soit +L. 125-65+
et pour les lignes on a
coucou@... et 2eme fois coucou@....
Le résultat sera
+L. 125-65+ coucou@... et 2eme fois coucou@....
même si tu trouves tous les occurences avec le modificateur /g
m//
Mais il ne faut pas oublier pas non plus que en contexte scalaire m//g indique une detection progressive et dans un contexte de liste m//g renvoie la liste de toutes les occurences.
if ( @val = $mot =~ /test/gi ) {# contexte liste printf "Test trouver de %d fois.\n",scalar @val; }
=======================================
while ( $val =~ /t/gi ) { # contexte scalaire printf "t ou T dans la position %d.\n",pos($val) -1; }
s///
Dans ce cas s///g actionne comme un recherch/remplecement global qui modifie tout d'un coup et il ne fait pas de détection progressive en contexte scalaire.