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

Signaler
Messages postés
34
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
20 mai 2005
-
Messages postés
34
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
20 mai 2005
-
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

@++

7 réponses

Messages postés
343
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
19 août 2006
1
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à
Messages postés
45
Date d'inscription
vendredi 27 août 2004
Statut
Membre
Dernière intervention
28 juillet 2009

;/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
}
}
}
Messages postés
343
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
19 août 2006
1
erf me suis trompé c'est
if (: !isin $1) { echo $input(Erreur spécifier un : pour séparer le nombres exemple 1:10) | halt }
Messages postés
34
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
20 mai 2005

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,
++
Messages postés
34
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
20 mai 2005

Merci aussi Huzard ;)
Messages postés
343
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
19 août 2006
1
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
Messages postés
34
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
20 mai 2005

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,
@+