UserToDelete Posted July 18, 2016 Posted July 18, 2016 Se que se puede, pero no se como, si alguien puede decirme la forma en la que gsub hace exactamente lo mismo que esto que he hecho se lleva una galleta str="Hola me llamo venado" local b = {} for d=1, x:len()-1 do table.insert(b, string.char(string.byte(str, d))) end str = "" for k,v in ipairs(b) do str = str..v end return str --Termina con un "Hola me llamo venad"
Tomas Posted July 18, 2016 Posted July 18, 2016 Es sub, no gsub. str= "Hola me llamo venado" print(string.sub(str, 1, #str-1))
Discord Moderators AlexTMjugador Posted July 18, 2016 Discord Moderators Posted July 18, 2016 · Hidden Hidden En primer lugar, tanto string.byte como string.char admiten varios caracteres a la vez, por lo que tu código se podría reducir a: str="Hola me llamo venado" return string.char(string.byte(str, 1, #str)) -- "Hola me llamo venado" Aún así, también es posible usar string.gsub para lo que propones, aunque no lo recomiendo porque hace el script menos legible y más lento: local function string.paddedbyte(s, i, j) -- Igual que string.byte excepto porque devuelve números de 3 cifras siempre local results = { } for n = i or 1, j or (i or 1) do local byte = string.byte(s, n) table.insert(results, string.format("%03u", byte)) end return unpack(results) end str = "Hola me llamo venado" local bytestr = string.gsub(str, ".", string.paddedbyte) return string.gsub(bytestr, "%d%d%d", string.char)
UserToDelete Posted July 18, 2016 Author Posted July 18, 2016 Es sub, no gsub. str= "Hola me llamo venado" print(string.sub(str, 1, #str-1)) Gracias por un codigo mas limpio, no conocia exactamente la funcion de sub, gracias, solo sabia que se podia hacer con gsub a traves del $1 o como sea En primer lugar, tanto string.byte como string.char admiten varios caracteres a la vez, por lo que tu código se podría reducir a: str="Hola me llamo venado" return string.char(string.byte(str, 1, #str)) -- "Hola me llamo venado" Aún así, también es posible usar string.gsub para lo que propones, aunque no lo recomiendo porque hace el script menos legible y más lento: local function string.paddedbyte(s, i, j) -- Igual que string.byte excepto porque devuelve números de 3 cifras siempre local results = { } for n = i or 1, j or (i or 1) do local byte = string.byte(s, n) table.insert(results, string.format("%03u", byte)) end return unpack(results) end str = "Hola me llamo venado" local bytestr = string.gsub(str, ".", string.paddedbyte) return string.gsub(bytestr, "%d%d%d", string.char) Esto tambien es bueno pero me quedo con la de Tomas, Gracias a los dos por la ayuda
Recommended Posts