Estoy intentando hacer una implementación completa de la utilidad
"sleep" y necesito dividir las cadenas de los argumentos para separar
el número en sí de la unidad, de la cual se saca el factor para
time.Sleep(). He leído la documentación de "strings" y "strconv" pero
los Splits solo los permiten buscando caracteres. ¿Cómo haría algo
parecido a
/*
// cadena última runa
flag.Args(i)[-1]
*/?
> Estoy intentando hacer una implementación completa de la utilidad > "sleep" y necesito dividir las cadenas de los argumentos para separar > el número en sí de la unidad, de la cual se saca el factor para > time.Sleep(). He leído la documentación de "strings" y "strconv" pero > los Splits solo los permiten buscando caracteres. ¿Cómo haría algo > parecido a > /* > // cadena última runa > flag.Args(i)[-1] > */?
> Supongamos que se hace una llamada a "sleep 3549m". flag.Arg(0) sería > "3549m". > Quiero separar 3549 de 'm' en dos variables distintas. Algo parecido > a:
> arg := flag.Arg(0) > index := strconv.LastIndex(arg, unicode_digit)
Ya lo he conseguido. Se trataba simplemente de tratar string como
[]int, siendo cada int una runa. Entonces, lo que escribí sería:
number := flag.Args(0)[len(flag.Args(0)) - 1]
suffix := flag.Args(0)[:len(flag.Args(0)) - 1]
// o más claro:
arg := flag.Args(0)
number := arg[:len(arg) - 1] // == number := arg[0:len(arg) - 1]
suffix := arg[len(arg) - 1]
Lo único que me quedaría es saber si puedo hacer algo como: /*case
'0'...'9':*/ para abreviar /*case '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9':*/.
Hacía mucho que no escribía por aquí y el otro día me encontré que es que no estaba recibiendo los correos como debía, y por eso había pensado que la lista estaba en desuso.
Para el problema que comentas tienes dos posibles soluciones:
1- Parseas el argumento con una expresión regular para que te coja solo los números. Con el paquete regexp y el tipo del mismo nombre puedes hacerlo, utilizando las funciones Compile y Find, con una expresión tipo "[0-9]+"
2- La más sencilla pero menos flexible, que sería haciendo lo que comentas, hacer un slice del string obviando el último carácter. Sería tan sencillo como hacer:
arg := flag.Args(i)[:len(flag.Args(i)-1] (Coge del primer elemento hasta el penúltimo).
> On 23 oct, 15:37, Ivan Zenteno <k001.opera...@gmail.com> wrote: > > No seria mas facil mandarle un solo parametro, tipo sleep(1000) y que > estos sean segundos?
> > Personalmente se me hace algo tedioso tener ese tipo de sleep, como tu > comentas; Pero en gustos se rompen generos.
> > Con respecto a tu pregunta, nunca he tenido que hacer eso. Abria que leer > la documentacion para investigar al respecto.
> > Saludos.
> Sí, sería más fácil. Pero lo que estoy intentando hacer es una > implementación completa con soporte para unidades de tiempo ('d', 'h', > 'm', 's')