Hola otra vez. Como mencioné en el título, quisiera saber Como saber si una variable tiene un caracter especifico.
Lo que quiero hacer es algo como...
@echo off
:a
Set /p "num=Introduce un numero decimal > "
if not defined num (goto :a)
::Bien, ahora, lo que quiero saber es; si el numero introducido
::tiene una coma en cualquier parte, muestre un mensaje, sino
::muestra otro mensaje.
Como ven, no tengo ni siquiera una idea de como se podría hacer.
Espero que me puedan ayudar... Gracias!
¿Por qué pierdes el tiempo con esto...?.
Aprende un lenguaje 'de verdad'... donde puedas tomar un libro y absorber en una semana tanto o más de lo que hayas aprendido en meses sobre un proceso (me niego a llamarlo lenguaje) de interpretación extremadamente limitado...
A los "lenguajes de procesado de entradas", hay que darle vuelta y vuelta y ya... se necesitan, pero no para perder tiempo en ellos como para querer resolver enrevesadamente cualquier nimiedad que realizado con cualquier lenguaje, dispone de alguna función explícitamente al caso, dada su generalidad y basta una línea de código...
Disculpa. No es perder el mi tiempo, es querer ir más allá de Batch. Pero más que todo es para aprender, sinceramente, hoy me apeteció aprender Python. Busqué, y encontré un muy buen tutorial (http://www.pythondiario.com/p/tutorial-python-desde-cero.html?m=1), lo recomiendo. Sin tener absolutamente nada de conocimiento sobre Python, voy aprendiendo poco a poco y paso a paso, pero por ahora Batch, que ya sé, ni siquiera es un lenguaje como tal, pero lo quiero dominar al 100%
Lo unico que busco es ayuda con relación al tema, porque ya perdí la cuenta de cuanta gente recomienda aprender otros lenguajes "más completos". También he tocado un poco el VBS, pero hasta ahí...
Espero que alguien me ayude con esto... Gracias!
Saludos,
- Se me ocurren dos métodos, uno usando Set y comparando variables, y otro usando Find para revisar el %ErrorLevel% que deja para saber si encontró o no.
@Echo Off
:a
Set /P "num=Introduce un n£mero decimal > "
If Not Defined num GoTo :a
Set aux=%num:,=@%
If "%num%" == "%aux%" (
Echo No hay ,
) Else (
Echo Si hay ,
)
Pause
@Echo Off
:a
Set /P "num=Introduce un n£mero decimal > "
If Not Defined num GoTo :a
Echo %num% | Find "," >nul
If ErrorLevel 1 (
Echo No hay ,
) Else (
Echo Si hay ,
)
Pause
Lo voy a probar. Aunque, si esa era la solución, me sentiré todo un tonto xD. Gracias!
Pues no funcionó... Recontra funcionó xD. Gracias EdePC, una vez más me has ayudado. Te lo agradezco!
¡GRACIAS EdePC!
TEMA CERRADO Y SOLUCIONADO
Cita de: .:Xx4NG3LxX:. en 21 Febrero 2020, 23:57 PM
... es querer ir más allá de Batch.
Querer ir más de allá
de Batch, es precisamente elegir y saltar a un lenguaje de programación de alto nivel y completo.
Querer ir más allá
en Batch... es perder el tiempo, ni más ni menos... pero como es el tuyo, en efecto, nada más que decir....
Creo sin embargo que es bueno que los que se emperran con batch, estén avisados, y no que luego de años 'descubran ' que han perdido un tiempo precioso que podrían haber dedicado a aprender otras cosas... así que espero que no te dés por ofendido, pués lejos de eso es la intención de un mensaje así...
TEMA REABIERTO
¿Se puede hacer con un for?
Disculpen la molestia... (EdePC)
- Sip, solo tienes que recorrer cada caracter de tu variable y ver si es una coma. Como en Batch es algo más complicado obtener el número de caracteres de una variable, puede resultar más sencillo recorrer cierta cantidad de caracteres, en este caso 50, luego se comprueba si aún quedan caracteres en la variable para salir del For y no seguir la 50 veces en vano.
-- Y como siempre, cuando se van a manipular variables de entorno dentro de instrucciones agrupadas hay que utilizar EnableDelayedExpansion:
--- GeSHi tiene un bug con !num:~%%a,1! en DOS así que le voy a poner PHP-BRIEF XD
@Echo Off
Set /P "num=Introduce un n£mero decimal > "
SetLocal EnableDelayedExpansion
For /L %%a In (0,1,50) Do (
Set char=!num:~%%a,1!
If Defined char (
If "!char!" == "," (
Echo Si hay ,
GoTo :continuar
)
) Else (
Echo No hay ,
GoTo :continuar
)
)
:continuar
Pause
- He estado haciendo pruebas con 50000 iteraciones y veo que el FOR tiene un Bug porque demora igual XD, como si no saliera del For.
-- Tampoco es que se vaya a poner tantas iteracciones, no creo que el usuario se ponga a tipear un número cientos de dígitos XD. Esta otra opción no tiene el Bug:
@Echo Off
Set /P "num=Introduce un n£mero decimal > "
Set /A i = 0
:inicio_bucle
Call Set char=%%num:~%i%,1%%
If Defined char (
If "%char%" == "," (
Echo Si hay ,
Goto :fin_bucle
)
Set /A i += 1
Goto :inicio_bucle
) Else (
Echo No hay ,
Goto :fin_bucle
)
:fin_bucle
Pause
-- Estoy utilizando Call Set var1=%%var2:~%var3,1%% para que se expandan bien las variables dentro de variables y asi evitarme usar EnableDelayedExpansion.
Dios! Que gente tan excelente hay en este foro...
Sólo hice una pregunta. Y no esta permitido pedir códigos hechos, pero hay personas (EdePC) a las que le sobra conocimiento o simplemente saben más que uno, y te dan todo al alcanze de
Ctrl+C y
Ctrl+V. Infinitas gracias EdePC!
PD: Hace poco me di cuenta del bug de GeShi con formato DOS.--==— MUCHAS GRACIAS —==--