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:
 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   | 
 
$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