IDENTIFIEUR QUI PERMET DE RETOURNER LE NIÈME CARACTERE D'UNE CHAÎNE DEPUIS LA GA

cs_ReMi34 Messages postés 1025 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 28 mars 2005 - 31 mai 2004 à 13:52
darkyojimbo2 Messages postés 244 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 25 juin 2005 - 16 juin 2004 à 18:11
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23289-identifieur-qui-permet-de-retourner-le-nieme-caractere-d-une-chaine-depuis-la-gauche-ou-la-droite

darkyojimbo2 Messages postés 244 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 25 juin 2005
16 juin 2004 à 18:11
Merci, pr ton commentaire Evrae.
Je ne connaissais pas $mis au moment où j'avais posté ce code sinon je ne l'aurai pas fait.
@+
-Carton-
Evrae Messages postés 58 Date d'inscription mardi 9 décembre 2003 Statut Membre Dernière intervention 16 avril 2005
16 juin 2004 à 18:02
pas mal le remplacement de $mid...quoique je prefere mid ;)
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
2 juin 2004 à 20:55
"if !$1" devrait être remplacé par "if $1 == $null", if !$1 est confirmé si $1 vaut 0, donc par exemple: $substr(00.000,3).left retournera "Erreur de syntaxe" au lieu du caractère ".".
Attention avec l'utilisation de !.

Et je ne vois pas pourquoi mettre 'if $1 && $2' car si on est à ce stade $1 vaut quelque chose et $2 aussi (cf. première ligne), bon après il y a encore place à l'optimisation, regardez le code ci-dessous.

alias substr {
if ($1 == $null || (!$2) || (!$prop)) return Erreur de syntaxe
if (($2 < 1) || ($2 > $len($1))) return
if ($prop == right) return $left($right($1,$2),1)
if ($prop == left) return $right($left($1,$2),1)
}

Bon, sinon pour ce code on aurait aussi pu procéder ainsi (plus lent par contre):

alias substrb {
if ($prop left) { var %exp $regex($1,^.{ $+ $calc($2 -1) $+ }(.)) | return $regml(1) }
if ($prop right) { var %exp $regex($1,(.).{ $+ $calc($2 -1) $+ }$) | return $regml(1) }
}
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
2 juin 2004 à 13:15
/me se permet :p
faut mettre le if $2 > $len($1) { return $1 } en début après le test de validité :)
sinon un return aura forcément print/break l'alias avant =) ou alors je pige pas l'utilité de cette ligne :/
mais c'est vrai que l'on gagne en organisation

alias substr {
if !$1 || !$2 || !$prop { return Erreur de syntaxe }
if $2 > $len($1) { return $1 }
if $1 && $2 && $prop = right {
if $2 >= 1 { return $left($right($1,$2),1) } }
elseif $1 && $2 && $prop == left {
if $2 >= 1 { return $right($left($1,$2),1) } }
}
darkyojimbo2 Messages postés 244 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 25 juin 2005
2 juin 2004 à 13:11
merci pour ton commentaire Kerrigan et merci aussi à PaDa
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
2 juin 2004 à 13:01
petit remaniment

alias substr {
;on place cette ligne au debut pour bloquer
;l'éxécution du code en cas d'érreurs
if !$1 || !$2 || !$prop { return Erreur de syntaxe }
;ici pas de elseif car le return va bloquer le code en cas
;d'érreur dans les arguments.
if $1 && $2 && $prop = right {
if $2 >= 1 { return $left($right($1,$2),1) } }
;on met un elseif, car il ne sert a rien de verifier cette condition
;si la premiere ($prop = right) est verifiée
elseif $1 && $2 && $prop == left {
if $2 >= 1 { return $right($left($1,$2),1) } }
;cette ligne est répétée inutilement
;on la met a la fin car on a deja verifier
;que $1 $2 et $prop existen
if $2 > $len($1) { return $1 }
}

ce qui donne sans les commentaires :

alias substr {
if !$1 || !$2 || !$prop { return Erreur de syntaxe }
if $1 && $2 && $prop = right {
if $2 >= 1 { return $left($right($1,$2),1) } }
elseif $1 && $2 && $prop == left {
if $2 >= 1 { return $right($left($1,$2),1) } }
if $2 > $len($1) { return $1 }
}

au bilan on a gagner une ligne et le code est agencé avec plus de logique.

Domage pour $mid lol mais c'est pas grave au moins tu sais la coder !
darkyojimbo2 Messages postés 244 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 25 juin 2005
31 mai 2004 à 16:25
T'as tout a fait raison ! Je corrige
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
31 mai 2004 à 16:22
nickel d'autant que c plus lisible .
sinon je vois pas l'intérêt de distinguer le cas "$2 == 1" ...
bonne continuation a+
darkyojimbo2 Messages postés 244 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 25 juin 2005
31 mai 2004 à 15:56
Voila, c'est corrigé.
darkyojimbo2 Messages postés 244 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 25 juin 2005
31 mai 2004 à 15:50
ah oui j'avais pas pensé à ce problème là, merci je vais corriger ça. ;)
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
31 mai 2004 à 15:43
comme l'a dit Hades $mid fait déja ca . sinon j'vais ptet t'embêter mais ton truc marche pas.
si ya des gens qui lisent mon comment , quand on veut traiter une chaine de caractère proprement , gèrer des positions , des ordres etc il ne faut JAMAIS UTILISER $REPLACE
lol
pardon :x
essaie ca :
//echo -a > $substr(aaa,2).left :)
faire un $right($left($1,$2),1) eu été bien plus judicieux ... (pour le cas 'left' ...)
bonne continuation
darkyojimbo2 Messages postés 244 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 25 juin 2005
31 mai 2004 à 14:52
oue t'as raison ^^
Merci Hades
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
31 mai 2004 à 14:40
Sinon question code, rien à dire, il est très bien codé.
À défaut qu’on peut faire cela avec une fonction de mIRC, au moins ça t'apporte de l'expérience.
darkyojimbo2 Messages postés 244 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 25 juin 2005
31 mai 2004 à 14:27
Je ne connaissais pas cet identifieur. :(

Ca me deçoit vraiment mais c'est pas trop grave. Je trouve que mon identifieru est plus simple et il m'aide dans mes devellopements.
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
31 mai 2004 à 14:25
Je suis désolé de te décevoir, mais mIRC offre déjà cette possibilité avec l'identifieur $mid.

$mid(salut,2,1) retourne a
$mid(salut,-2,1) retourne u
cs_ReMi34 Messages postés 1025 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 28 mars 2005 2
31 mai 2004 à 13:52
Bravo, bien joué, trés utile ;)
Rejoignez-nous