Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1710 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  division de string[resolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

division de string[resolu]

n°1380076
Lanfeust42
Posté le 02-06-2006 à 16:59:47  profilanswer
 

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
mood
Publicité
Posté le 02-06-2006 à 16:59:47  profilanswer
 

n°1380164
Taz
bisounours-codeur
Posté le 02-06-2006 à 19:27:42  profilanswer
 

fais un split ou match avec une regex. mais substr doit très bien marché également.
 

Code :
  1. my $s = "US4241611(A)(Cat. A)";
  2. my $us = substr($s, 0, 9);


 
perldoc -f substr

n°1380411
lami20j
Posté le 03-06-2006 à 13:07:26  profilanswer
 

Salut,
 
Tu peux aussi utiliser une regex ou la fonction unpack
 
la regex

Code :
  1. perl -e '$u="US4241611(A)(Cat. A)";$us=$u=~/(.*?)(?=\()/;print $1'


 
la fonction unpack

Code :
  1. perl -e '$u="US4241611(A)(Cat. A)";print unpack("A9",$u),"\n"'


lami20j

n°1381100
Lanfeust42
Posté le 05-06-2006 à 09:02:08  profilanswer
 

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 :
  1. if($word =~ /\(/){                       
  2.        $word=~/(.*?)(?=\()/;
  3.        $us=$word=~/(.*?)(?=\()/;


 
autre chose je débute un peu en PERL quel est la signification de print $1?
 
Merci de ton aide


Message édité par Lanfeust42 le 05-06-2006 à 09:03:10
n°1381103
Lanfeust42
Posté le 05-06-2006 à 09:07:12  profilanswer
 

j'ai trouver avec ta solution TAZ j'ai fait un index juste avant:
 

Code :
  1. if($word =~ /\(/){
  2.        my $compt=index ($word, "(" );
  3.        $us = substr($word, 0, $compt);


Merci beaucoup à tous

n°1381127
lami20j
Posté le 05-06-2006 à 09:53:30  profilanswer
 

Salut,
 
j'ai commenté dans le code. J'espère que c'est assez claire.

Code :
  1. #!/usr/bin/perl
  2. #
  3. use warnings;use strict;
  4. my $u ="US424161100000077700888(A)(Cat. A)";
  5. $u =~ /(.*?) # ici je capture n'importe quelle caractère le minumum possible
  6.              # dans la variable $1, je me fait pas des soucis si j'ai
  7.              # US ou combien des nombres, mais j'arrête la capture à la
  8.              # rencontre de la 1ère ( grâce à *?)
  9.              # Enleve ? pour voir ce que tu vas obtenir
  10.        (?=   # ici je commence un test avant pour voir si
  11.           \( # j'ai une ( , donc ça remplace ton if avec la fonction index
  12.        )     # fin de test avant
  13.       /x;    # le modificateur x me permet d'inserer des commentaires
  14.              # et des espaces dans la regex
  15. # la regex est : /(.*?)(?=\()/
  16. print "$1\n";


 
Voilà le code sans commentaires

Code :
  1. #!/usr/bin/perl
  2. #
  3. use warnings;use strict;
  4. my $u ="US424161100000077700888(A)(Cat. A)";
  5. $u =~ /(.*?)(?=\()/;
  6. print "$1\n";


lami20j


Message édité par lami20j le 05-06-2006 à 09:57:52
n°1381150
Lanfeust42
Posté le 05-06-2006 à 10:19:04  profilanswer
 

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

Message cité 1 fois
Message édité par Lanfeust42 le 05-06-2006 à 10:20:14
n°1381155
anapajari
s/travail/glanding on hfr/gs;
Posté le 05-06-2006 à 10:25:07  profilanswer
 

je ne comprends pas trop l'interet de faire une assertion dans la mesure ou  la même sans marche aussi bien :o

Code :
  1. $u =~ /(.*?)\(/;


>Lamfeust tu as raison, il manque un "\" mais le forum l'a surement mangé!
 

n°1381160
Lanfeust42
Posté le 05-06-2006 à 10:30:38  profilanswer
 

eu je commence vraiment le PERL, une assertion c'est le test (?=\()   ???
 

n°1381169
lami20j
Posté le 05-06-2006 à 10:37:19  profilanswer
 

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  :D 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??


$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

mood
Publicité
Posté le 05-06-2006 à 10:37:19  profilanswer
 

n°1381177
lami20j
Posté le 05-06-2006 à 10:44:14  profilanswer
 

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 :o
/(.*?)\(/;


 
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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  division de string[resolu]

 

Sujets relatifs
[Resolu] string.lenght qui marche une fois sur deuxpb tableau[résolu]
[RESOLU] Changer largeur zone de liste accesspb de transition excel[resolu]
Java Transformation XSLT résultat String[ASP.NET][Resolu] Erreur de syntaxe sur un INSERT INTO
[RESOLU] Controler les scroll bar d'un Active X [MFC][resolu] Conflit Virtuel Static ( Factory Design Pattern )
Pas important : isset en Java ? [Résolu] 
Plus de sujets relatifs à : division de string[resolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR