UserToDelete Posted July 18, 2016 Share 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" Link to comment
Tomas Posted July 18, 2016 Share Posted July 18, 2016 Es sub, no gsub. str= "Hola me llamo venado" print(string.sub(str, 1, #str-1)) Link to comment
Discord Moderators AlexTMjugador Posted July 18, 2016 Discord Moderators Share 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) Link to comment
UserToDelete Posted July 18, 2016 Author Share 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 Link to comment
Recommended Posts