Récupération d'une suite de nombre à partir d'une chaine de caractères formatées [Résolu]

Messages postés
34
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
20 mai 2005
- - Dernière réponse : Nymouas
Messages postés
34
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
20 mai 2005
- 8 sept. 2004 à 15:27
Bonjour,

Je profite bcp de ce forum pour poser mes questions ;)

Voilà, il s'agit d'une manip de chaines de caractères (où j'y connais tjs pas bcp) et j'aimerai faire simplement la conversion d'une variable (une chaine de caractère) en une suite de nombre par exemple, si vous avez 1:10 comme chaine de caractères (ou 1-10), j'aimerai que mon programme me fasse une boucle de 1 à 10, donc 1 2 3 4 5 etc. Il me faut donc récupérer de cette variable le 1 et le 10 ( numériqué démarqué par un caractère spécifique : ou - ) et puis je peux faire ma suite avec une boucle de 1 à 10, voilà. NB : si cette syntaxe n'est pas correcte alors il ne fait pas la boucle
Dans la même idée mais un peu plus compliqué, on aurait une chaine 1-5 15 20-23, j'aimerai récupérer la suite 1 2 3 4 5 15 20 21 22 23.

Voilà, merci de vos réponses

@++
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
344
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
19 août 2006
1
3
Merci
alias boucle {
if (: isin $1) { echo $input(Erreur spécifier un : pour séparer le nombres exemple 1:10) | halt }
if (!$1) { echo $input(Erreur spécifier la chaîne exemple 1:10) | halt }var %chaine $1, %i $gettok(%chaine,1,58)
while (%i <= $gettok(%chaine,2,58)) {
%resultat = %i & $chr(32)
inc %i
}
}

voilà

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de talking
Messages postés
45
Date d'inscription
vendredi 27 août 2004
Statut
Membre
Dernière intervention
28 juillet 2009
3
Merci
;/abc 1:10 (ou 1:80 ... 5:97 ... etc)
alias abc {
if !$regex($1,:) || !$1 || $gettok($1,1,58) !isnum || $gettok($1,2,58) !isnum { echo -a erreur: /abc premier-nombre:deuxieme-nombre exemple: /abc 1:10 }
else { var %x $gettok($1,1,58), %y $gettok($1,2,58)
while %x <= %y {
echo -a %x
inc %x
}
}
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Huzard
Messages postés
344
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
19 août 2006
1
0
Merci
erf me suis trompé c'est
if (: !isin $1) { echo $input(Erreur spécifier un : pour séparer le nombres exemple 1:10) | halt }
Commenter la réponse de talking
Messages postés
34
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
20 mai 2005
0
Merci
Merci bcp talking
C la commande gettok qu'il me fallait pour arriver à mes fins ;)
Ton exemple m'a permis de comprendre son intérêt (il y a énormément de fct de manip de chaine de caractères et j'y connais pas gd chose - cette dernière me parait extrémement utilise)

Encore merci,
++
Commenter la réponse de Nymouas
Messages postés
34
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
20 mai 2005
0
Merci
Merci aussi Huzard ;)
Commenter la réponse de Nymouas
Messages postés
344
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
19 août 2006
1
0
Merci
De rien j'ai juste oublier de spécifier un truc c'est le résultat plutot que le eccho -a %x de HuZard j'aurai fait

alias boucle {
if (: isin $1) { echo $input(Erreur spécifier un : pour séparer le nombres exemple 1:10) | halt }
if (!$1) { echo $input(Erreur spécifier la chaîne exemple 1:10) | halt }var %chaine $1, %i $gettok(%chaine,1,58)
while (%i <= $gettok(%chaine,2,58)) {
%resultat = %i & $chr(32)
inc %i
}
return %resultat
}

Ainsi si tu tappes //echo -a $boucle(1:10) ça te dira 1 2 3 4 5 6 7 8 9 10
Commenter la réponse de talking
Messages postés
34
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
20 mai 2005
0
Merci
Merci talking mais chez moi ça ne fonctionne pas comme tu l'as mis
je dois mettre dans la boucle
%resultat = %resultat %i
ainsi j'ai bien le résultat qui s'affiche qd je tappe la commande //echo -a $boucle(1:10) Entre () je n'ai pas besoin de résultat en sortie car mon but c d'exécuter un autre alias ds la boucle avec comme paramètre le %i courant (c tout)

Au fait, tu voulais faire quoi avec cette commande exactement :
%resultat = %i & $chr(32)

Encore un détail en ce qui concerne ton code, p/r à des choses lues sur internet (et tout à fait logique) Afin d'optimiser ce code, tu le sais sûrement, il est fortement conseillé de mettre l'évaluation de la valeur de la fonction $gettok dans var %fin (par exemple) car à chaque fois que le script teste la condition il doit refaire une évaluation de la fct $gettok. Imagine que cette évaluation dure 100ms (c bcp trop - je sais mais c juste pour l'exemple). J'exécute la commande $boucle(1:100) dans le cas de ce code - la commande va s'exécuter en 10s ce qui n'est pas négligeable !!! Et comme toute optimisation est la bienvenue surtout en script vu que c interprété, autant le faire systématiquement.

Sur ce je te laisse, encore merci,
@+
Commenter la réponse de Nymouas