Error de sintaxis

Dudas sobre el foro o cuestiones generales que no tengan cabida en otro foro.
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
(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
rafaxplayer escribió:ese loop esta mal ,deveria ser asi creo:
for count = 1,#cadena then
cambié "then" por "do" (y no me arroja error); ahora me lo da en
number = number++;

: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)

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)

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
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
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
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);


Pruébalo y me dices que tal ;)
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);
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);
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

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);


Pruébelo y dígame si es lo que buscaba ;)
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);

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

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);
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);

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);
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: