division de string[resolu] - Perl - Programmation
Marsh Posté le 02-06-2006 à 19:27:42
fais un split ou match avec une regex. mais substr doit très bien marché également.
Code :
|
perldoc -f substr
Marsh Posté le 03-06-2006 à 13:07:26
Salut,
Tu peux aussi utiliser une regex ou la fonction unpack
la regex
Code :
|
la fonction unpack
Code :
|
lami20j
Marsh Posté le 05-06-2006 à 09:02:08
Merci pour ces aides mais:
TAZ: Je ne l'ai pas préciser mais les chiffre après US varie c'est à dire je peut en avoir 8 9 ou 10 ou plus donc ta solution ne marcherais pas. Merci quand même .
lami20j:je n'arrive pas à utiliser tes règles dois-je mettre mon code ainsi??:
Code :
|
autre chose je débute un peu en PERL quel est la signification de print $1?
Merci de ton aide
Marsh Posté le 05-06-2006 à 09:07:12
j'ai trouver avec ta solution TAZ j'ai fait un index juste avant:
Code :
|
Merci beaucoup à tous
Marsh Posté le 05-06-2006 à 09:53:30
Salut,
j'ai commenté dans le code. J'espère que c'est assez claire.
Code :
|
Voilà le code sans commentaires
Code :
|
lami20j
Marsh Posté le 05-06-2006 à 10:19:04
Merci beaucoup pour ces explication, si j'ai bien compris le $1 est une variable "système", par contre je crois qu'il manque un signe dans ton code ou sinon j'ai rater un train:
à la ligne 7 du code sans commentaire:
$u =~ /(.*?)(?=()/;
ca serait pas:
$u =~ /(.*?)(?=\()/; comme tu la marquer dans le code commenter ligne 18??
En tout cas merci pour cette explication
Marsh Posté le 05-06-2006 à 10:25:07
je ne comprends pas trop l'interet de faire une assertion dans la mesure ou la même sans marche aussi bien
Code :
|
>Lamfeust tu as raison, il manque un "\" mais le forum l'a surement mangé!
Marsh Posté le 05-06-2006 à 10:30:38
eu je commence vraiment le PERL, une assertion c'est le test (?=\() ???
Marsh Posté le 05-06-2006 à 10:37:19
Re,
Lanfeust42 a écrit : si j'ai bien compris le $1 est une variable "système", par contre je crois qu'il manque un signe dans ton code ou sinon j'ai rater un train: |
$1 c'est une variable spéciale des expressions régulières.
Il y a encore ( @+, @-, $+, $^R, $&, $`, $' )
On utilise les paranthèses dans une regex pour plusieurs raisons: regroupement, capture.
Donc pour capturer une sous-chaîne on mets des paranthèses autour du motif.
Les paranthèses (ouvrantes) sont comptées en commencant de la gauche.
(\d)([a-z])(variable)
dans cet exemple
$1 va conteniur un chiffre
$2 une lettre minuscule
$3 la sous-chaine variable
Oui il y a une erreur puisque j'ai modifié le message donc \ à été effacé.
C'est bien /(.*?)(?=\()/
Une paranthèse ouvrante ( est un métacaractère donc pour l'avoir en tant que caractère on doit l'echapée avec \ donc \(
lami20j
Marsh Posté le 05-06-2006 à 10:44:14
Salut,
anapajari a écrit : je ne comprends pas trop l'interet de faire une assertion dans la mesure ou la même sans marche aussi bien |
Tu as raison, ça marche aussi. Et pour cet exemple banal c'est vrai qu'on n'a pas vraiment besoin de (?=\().
Mais pourquoi? Parce une assertion de largeur nulle ne consomme pas de texte, et dans le cas d'un gros fichier ça peut servir.
lami20j
Marsh Posté le 02-06-2006 à 16:59:47
J'ai un problème de string lol, je m'explique:
j'ai ce genre de string: "US4241611(A)(Cat. A)"
je veut couper à partir de la parenthèse afin d'obtenir ceci: "US4241611"
j'ai essayer avec substr mais il me renvoi seulement "(A)(Cat. A)" d'ou mon drame
Merci pour vos idées
Message édité par Lanfeust42 le 05-06-2006 à 14:03:53