22 mensajes Página 1 de 2
Hola gente, recien estaba chusmeando por aca para ver si habia alguna pregunta misma que iba a hacer y encontré la de "contar caracteres" Contar caracteres y me da error en
for (count, 1, #cadena) then
Parsed in 0.002 seconds, using GeSHi 1.0.8.9
(le agregué los parentesis por si las moscas)
Y me arroja "Error sintaxis: Linea= 7: '<name>' esperado en '('
A que se debe??? :okay-1414023544:
ese loop esta mal ,deveria ser asi creo:

for count = 1,#cadena then
Parsed in 0.002 seconds, using GeSHi 1.0.8.9
rafaxplayer escribió: ese loop esta mal ,deveria ser asi creo:
for count = 1,#cadena then
Parsed in 0.002 seconds, using GeSHi 1.0.8.9


cambié "then" por "do" (y no me arroja error); ahora me lo da en
number = number++;
Parsed in 0.002 seconds, using GeSHi 1.0.8.9

:foreveralone-1414023140: :expolota
si es do , sorry.

lo otro seria numer = number +1 o algo asi.
rafaxplayer escribió: si es do , sorry.

lo otro seria numer = number +1 o algo asi.

:angry: :jackie-1417752827:
ERROR en:
x[count] = string.mid(cadena,count,1)
Parsed in 0.002 seconds, using GeSHi 1.0.8.9

attempt to call field 'mid' (a nil value)
:firstworldproblems-1414025630:

Lo edito: me daba ese error porque no estaban con las letras principales en mayuscula. De string.mid a String.Mid
pero me da el attempt to compare number with string (En la misma linea)
rafaxplayer escribió: si es do , sorry.

lo otro seria numer = number +1 o algo asi.

VUELVO A PUBLICAR otra respuesta porque ya no me deja editar la publicacion que habia echo.


ERROR en:
x[count] = string.mid(cadena,count,1)
Parsed in 0.003 seconds, using GeSHi 1.0.8.9

attempt to call field 'mid' (a nil value)
:firstworldproblems-1414025630:

Lo edito: me daba ese error porque no estaban con las letras principales en mayuscula. De string.mid a String.Mid
pero me da el attempt to compare number with string (En la misma linea de
if (x[count] >= 0 and x[count] <= 9) then
Parsed in 0.002 seconds, using GeSHi 1.0.8.9
Creo que no entiendes el código muy bien

x[count] -> estás llamando al index "count" de una tabla llamada "x", obviamente si esa tabla no existe te dará error.

Pon el código completo para poder ayudarte y decirte en qué estás mal
Imagen
dowsher escribió: Creo que no entiendes el código muy bien
x[count] -> estás llamando al index "count" de una tabla llamada "x", obviamente si esa tabla no existe te dará error.
Pon el código completo para poder ayudarte y decirte en qué estás mal


Este es el código (que arreglamos con rafa (mas su ayuda))
cadena = "Loquesea 123";
x = {};
number = 0;
spaces = 0;
chars = 0;

for count = 1,#cadena do
        x[count] = String.Mid(cadena,count,1)
        if (x[count] >= 0 and x[count] <= 9) then
                number = number + 1;
        elseif (x[count] == " ") then
                spaces = spaces + 1;
        else
                chars = chars + 1;
        end
end
 
Parsed in 0.003 seconds, using GeSHi 1.0.8.9
A ver... El código es para contar caracteres de un string???
Si es así está mal redactado

En su lugar yo haría algo mucho más eficiente y rápido, solo una línea de código
cadena = "Loquesea 123";
Dialog.Message("", #cadena);
Parsed in 0.002 seconds, using GeSHi 1.0.8.9


Pruébalo y me dices que tal ;)
Imagen
Si buscas no solo un conteo general de caracteres y quieres saber especificaciones de número, letras y espacios, te dejo esto...
sString = Input.GetText("Input1");
 Letras = 0;
 Espacios = 0;
 Numeros = 0;
 Posicion = 1;
 
while Posicion ~= (#sString) do
 midString = String.Mid(sString, Posicion, 1);
  if midString == "0" then
   Numeros = Numeros + 1;
  elseif midString == " " then
   Espacios = Espacios + 1;
  else
   nN = String.ToNumber(midString);
    if nN ~= 0 then
     Numeros = Numeros + 1;
    else
     Letras = Letras + 1;
    end
  end
  Posicion = Posicion + 1;
end

Dialog.Message("Resultados", 'En el texto "'..sString..'" hay '..(#sString).." caracteres, dónde:\nCantidad de letras: "..Letras.."\nCantidad de números: "..Numeros.."\nCantidad de espacios: "..Espacios);
Parsed in 0.004 seconds, using GeSHi 1.0.8.9
Imagen
Si quieres algo más completo que también cuente simbolos... Lo único que se me ocurrió fue usar una tabla ABC
ABC = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "ñ", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};

sString = Input.GetText("Input1");
 Letras = 0;
 Espacios = 0;
 Numeros = 0;
 Simbolo = 0;
 Posicion = 1;
 
while Posicion ~= (#sString)+1 do
 midString = String.Mid(sString, Posicion, 1);
  if midString == "0" then
   Numeros = Numeros + 1;
  elseif midString == " " then
   Espacios = Espacios + 1;
  else
   nN = String.ToNumber(midString);
    if nN ~= 0 then
     Numeros = Numeros + 1;
    else
     midString = String.Upper(midString);
     Upper = false;
      for x = 1, (#ABC) do
       if midString == ABC[x] then
        Upper = true;
        break
       end
      end
       if (Upper) then
        Letras = Letras + 1;
       else
        Simbolo = Simbolo + 1;
       end
    end
  end
  Posicion = Posicion + 1;
end

Dialog.Message("Resultados", 'En el texto "'..sString..'" hay '..(#sString).." caracter(es), dónde:\nCantidad de letras: "..Letras.."\nCantidad de números: "..Numeros.."\nCantidad de espacios: "..Espacios.."\nCantidad de simbolos: "..Simbolo);
 
Parsed in 0.007 seconds, using GeSHi 1.0.8.9
Imagen
dowsher escribió: Si quieres algo más completo que también cuente simbolos... Lo único que se me ocurrió fue usar una tabla ABC


Gracias dowsher; luego de qu termine de hacer unos trabajos que me enviaron hacer, en breves me lo pondré a probarlo; pero veo que el ultimo se asemeja mas a lo que quiero hacer (porque es un diseño de calculadora de resistencia), algo asi como "calcular colores de banda de una resistencia según el valor que se ingrese (en ese ultimo caso me faltaria decodificar (o desmenuzar y separar) el numero de resultado (ejemplo): 150; y que me permita elegir separadamente 1 5 0 (es decir; elegir x[1] x[5] x[0]
Pero gracias igualmente, ya lo haré a lo primero :friends: :fuckyeah-1414023828:
dowsher escribió: Si quieres algo más completo que también cuente simbolos... Lo único que se me ocurrió fue usar una tabla ABC
[lua]ABC = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "ñ", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}; ......

Este mola (aunque mucho para las dos cosas que solo quería (pero muy buen aporte)); ahora en donde pongo que me desmenuse lo que ingreso? (por ejemplo):
sString = Input.GetText("Input1"); --//Aca podria ingresar por ejemplo 1842
 
Parsed in 0.002 seconds, using GeSHi 1.0.8.9

Y que me tome la primera.... la segunda..... la tercera..... (por separado)
Que permita saber que letra/numero o lo que sea, está en el primer lugar; en el segundo lugar.... (y asi sucesivamente)
Porque eso necesito hacer para la calculadora de valores
Oh mi amigo! Lo que usted busca es algo mucho más sencillo
sString = Input.GetText("Input1");
 Caracter = {};
 Posicion = 1;
 
while Posicion ~= (#sString)+1 do
 midString = String.Mid(sString, Posicion, 1);
 Table.Insert(Caracter, (#Caracter)+1, midString);
 Posicion = Posicion + 1;
end
 sString = "";
for x = 1, (#Caracter) do
 sString = sString.."\n"..Caracter[x];
end

Dialog.Message("Resultados", sString);
Parsed in 0.003 seconds, using GeSHi 1.0.8.9


Pruébelo y dígame si es lo que buscaba ;)
Imagen
dowsher escribió: Oh mi amigo! Lo que usted busca es algo mucho más sencillo


Ehhhcole, era sencillo;

--Obtenemos los valores--
Buscar = Input.GetText("Input1");

if (Buscar > "100") then
        respuesta = Buscar / 10; --**NEGRO**-- 10
elseif (Buscar >= "100") then
        respuesta = Buscar / 10; --**MARRON**-- 100
elseif (Buscar >= "1000") then
        respuesta = Buscar / 10; --**ROJO**-- 1.000
elseif (Buscar >= "10000") then
        respuesta = Buscar / 10; --**NARANJA**-- 10.000
elseif (Buscar >= "100000") then
        respuesta = Buscar / 10; --**AMARILLO**-- 100.000
elseif (Buscar >= "1000000") then
        respuesta = Buscar / 10; --**VERDE**-- 1.000.000
end
----
----
sString = respuesta;
 Caracter = {};
 Posicion = 1;

while Posicion ~= (#sString)+1 do
 midString = String.Mid(sString, Posicion, 1);
 Table.Insert(Caracter, (#Caracter)+1, midString);
 Posicion = Posicion + 1;
end
 sString = "";
for x = 1, (#Caracter) do
 sString = sString.."\n"..Caracter[x];
end
Label.SetText("Label1", sString);
 
Parsed in 0.005 seconds, using GeSHi 1.0.8.9

Pero me arroja un error de sintaxis al querer ejecutarlo (Error: attempt to get lenght of global 'sTring' (a number value)en la linea 23
while Posicion ~= (#sString)+1 do
Parsed in 0.002 seconds, using GeSHi 1.0.8.9

Ese error me arroja; lo que pasa que a sString lo obtendria del resultado de una cuenta interna y no desde el input directamente; porque del input (por ejemplo) ingresaria el numero 1500; que despues de resolverlo daria 150, y de ahi pasaria al sString, pero me dió en el while el error.
Allí mismo te dice cual es el problema, con un poco de conocimientos en ingles puedes saber que el problema es que sString no es un valor string sino numérico. Además de que aún no comprendes la diferencias entre String y Numero en LUA Programación.

Revisa el código, le hice dos cambios y agregué una línea
--Obtenemos los valores--
Buscar = Input.GetText("Input1");
Buscar = tonumber(Buscar);

if (Buscar > 100) then
        respuesta = Buscar / 10; --**NEGRO**-- 10
elseif (Buscar >= 100) then
        respuesta = Buscar / 10; --**MARRON**-- 100
elseif (Buscar >= 1000) then
        respuesta = Buscar / 10; --**ROJO**-- 1.000
elseif (Buscar >= 10000) then
        respuesta = Buscar / 10; --**NARANJA**-- 10.000
elseif (Buscar >= 100000) then
        respuesta = Buscar / 10; --**AMARILLO**-- 100.000
elseif (Buscar >= 1000000) then
        respuesta = Buscar / 10; --**VERDE**-- 1.000.000
end
----
----
sString = ""..respuesta.."";
 Caracter = {};
 Posicion = 1;

while Posicion ~= (#sString)+1 do
 midString = String.Mid(sString, Posicion, 1);
 Table.Insert(Caracter, (#Caracter)+1, midString);
 Posicion = Posicion + 1;
end
 sString = "";
for x = 1, (#Caracter) do
 sString = sString.."\n"..Caracter[x];
end
Dialog.Message("", sString);
Parsed in 0.006 seconds, using GeSHi 1.0.8.9
Imagen
dowsher escribió: Allí mismo te dice cual es el problema, con un poco de conocimientos en ingles puedes saber que el problema es que sString no es un valor string sino numérico. Además de que aún no comprendes la diferencias entre String y Numero en LUA Programación.


Yo ya tendría que estar cumpliendo cadena perpetua; cansado de programar programación web y dejar pasar eso???? (ya me voy a la horca); voy a arregflar mi codigo y agregarlo a otro que anoche se me ocurrió y hasta ahora no me ha dado problemas (solo en este) que es para mostrar los numeros por separado en un label abajo de unoas tiritas der colores que representan la coloracion de la resistencia; despues veré si comparto aca la imagen o el programita para que se pueda usar (a los que les guste la electronica)
Me despido por el momento de vos y rafa, gracias por la ayuda brindada :friends: :lol-1414023491: :sweetjesus-1417754353:
dowsher escribió: Revisa el código, le hice dos cambios y agregué una línea


Locazo hay algo nuevo que no sale (no me da error ni nada), solo que no me muestra el resultado de una comparación.
Te lo hago corta porque es en esa nada mas.
--//OBTENEMOS LOS DATOS//--
Datos = Input.GetText("Input1");
Calcular = tonumber(Datos);
--//FIN//--

--//COMPARAMOS RANGOS DEL MULTIPLICADOR (TERCERA BANDA)//--
if (Calcular < 10) then
        Multiplicador = "x1"; --ORO--
elseif (Calcular >= 10) then
        Multiplicador = "x10"; --NEGRO--
elseif (Calcular >= 100) then
        Multiplicador = "x100"; --MARRÓN--
elseif (Calcular >= 1000) then
        Multiplicador = "x1.000"; --ROJO--
elseif (Calcular >= 10000) then
        Multiplicador = "x10.000"; --NARANJA--
elseif (Calcular >= 100000) then
        Multiplicador = "x100.000"; --AMARILLO--
elseif (Calcular >= 1000000) then
        Multiplicador = "x1.000.000"; --VERDE--
end
--//FIN//--

--//MOSTRAMOS RESULTADOS//--
Label.SetText("Label8", Multiplicador);
 
Parsed in 0.006 seconds, using GeSHi 1.0.8.9

cuando infreso el numero 12 me funciona bien con el resultado; pero cuando ingreso un numero superior a 100 me sigue mostrando el de "x10"; xq lo hace??? o q hace mal; porque no me arroja ni un error en eso. :fu-1414023026:
En la misma condición IF con datos numéricos en ocasiones da errores y no funciona, por eso mejor has varias condiciones IF
--//OBTENEMOS LOS DATOS//--
Datos = Input.GetText("Input1");
Calcular = tonumber(Datos);
--//FIN//--

--//COMPARAMOS RANGOS DEL MULTIPLICADOR (TERCERA BANDA)//--
if (Calcular < 10) then
        Multiplicador = "x1"; --ORO--
end
if (Calcular >= 10) then
        Multiplicador = "x10"; --NEGRO--
end
if (Calcular >= 100) then
        Multiplicador = "x100"; --MARRÓN--
end
if (Calcular >= 1000) then
        Multiplicador = "x1.000"; --ROJO--
end
if (Calcular >= 10000) then
        Multiplicador = "x10.000"; --NARANJA--
end
if (Calcular >= 100000) then
        Multiplicador = "x100.000"; --AMARILLO--
end
if (Calcular >= 1000000) then
        Multiplicador = "x1.000.000"; --VERDE--
end
--//FIN//--

--//MOSTRAMOS RESULTADOS//--
Label.SetText("Label1", Multiplicador);
Parsed in 0.005 seconds, using GeSHi 1.0.8.9
Imagen
dowsher escribió: En la misma condición IF con datos numéricos

La ultima y nos vamos (una mas, y no jodemos mas....♪♫♪♫
pasar de un numero de 10000 a 10.000 (o sea, que muestre las comas) :challengeaccepted-1417751095:
22 mensajes Página 1 de 2

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado