Título: Ayuda con dudas de programacion batch Publicado por: legolas266 en 27 Febrero 2013, 21:46 pm Hola, alguien seria tan amable de decirme como puedo hacer para comparar una cadena numerica sin limite de longitud, los x primeros numeros con los x ultimos numeros.
Necesito realizar un programa que me diga si un numero introducido por un usuario es capicua o no y no doy con el script necesario para que me funcione y ya estoy desesperado. He mirado mil foros y mil tutoriales de batch pero no consigo dar con la solucion. Alquien me puede ayudar por favor?. Gracias. Título: Re: Ayuda con dudas de programacion batch Publicado por: Eleкtro en 28 Febrero 2013, 01:33 am Hola,
Te dije que este código sirve tanto para palabras palíndromas cono números palíndromos (capicúas). Código
saludos Título: Re: Ayuda con dudas de programacion batch Publicado por: legolas266 en 28 Febrero 2013, 11:31 am Lo se pero no me funciona. Aun así, si fueras tan amable de explicarme para que sirven estas lineas de codigo... me gustaria entenderlo para saberlo hacer la proxima vez o cuando se me planteen otros ejercicios.
(ECHO "%WORD%">"%TEMP%\Word.txt" & FOR %%# IN ("%TEMP%\Word.txt") DO (SET /A "Word_Length=%%~z# - 5")) - De esta linea entiendo que la variable WORD es sacada a un archivo de texto llamado Word.txt en la carpeta temp, supongo que el for es para asignar al simbolo de la almuadilla la cadena numerica que contiene el archivo Word.txt y ya donde me pierdo del todo es en esta parte del codigo: (SET /A "Word_Length=%%~z# - 5")), se supone que es una operacion matematica, pero no la entiendo... para letras supongo que se referirá que tenga en cuenta de la a a la z, pero el - 5 para que sirve.. o si me lo pudieras explicar todo mejor. ----------------------------------------------------------------------- Call Set "Compare_A=%%WORD:~0,%Word_Middle%%%" Call Set "Compare_B=%%WORD:~-%Word_Middle%%%" Estas lineas, la variable Comapre_A, supongo que se refiere a que dentro de la Variable Word se empieze a contar desde la posicion 0, pero no entiendo el resto, la coma que viene despues y la variable esa que no se de donde ha salido ni lo que hace %Word_Middle%, y si para datos numericos se aplica igualmente. De la segunda variable Compare_B, entiendo que para la variable Word esta vez es para que lea desde la ultima cifra o letra (~-) pero no entiendo porque esta vez la variable %Word_Middle% no va separado por una coma, deduzco que la coma es para decir que empieze a leer desde la ultima letra o cifra hasta la mitad... al no tener coma me lio y no entiendo porque se pone así. ----------------------------------------------------------------------- FOR /L %%X in (1,1,%Word_Middle%) DO (Call Set "Compare_B_REVERSED=%%Compare_B_REVERSED%%%%Compare_B:~-%%X,1%%") De esta linea llego a entender, que como en el caso de un palindromo el contenido de la variable es texto se pone For/L, en el caso del capicua se pondria For (sin /L, verdad?) aparte de eso %%X in (1,1,%Word_Middle%), no seria para que empieze a contar desde el digito o letra 0 así: %%X in (0,1,%Word_Middle%), entiendo que este bucle es para que el script cuente el numero de letras o numeros que hay hasta la mitad del contenido del numero o texto introducido por el usuario.. Por ultimo en esta linea me pierdo del todo: Call Set "Compare_B_REVERSED=%%Compare_B_REVERSED%%%%Compare_B:~-%%X,1%%") No entiendo si abres una nueva variable "Compare_B_REVERSED"= .... porque se vuelve a poner esa variable con doble % y seguido con otro doble %..Compare_B:~-%%X,1%%" . Me gustaria entender el codigo para no tener que estar preguntando a cada rato y hacerlo por mi mismo en futuros ejercicios. Siento ser tan pesado. Gracias por ayudarme. Título: Re: Ayuda con dudas de programacion batch Publicado por: Eleкtro en 28 Febrero 2013, 12:17 pm Citar Código: SET /A "Word_Length=%%~z# - 5") Tutorial extendido de aprendizaje Batch by Elektro H@cker 6.1 Variables especiales (o Variables de parámetro) (o Variables de argumentos) (http://foro.elhacker.net/scripting/tema_bloqueado_hasta_finalizar_el_tuto_tutorial_extendido_de_aprendizaje_batch-t375135.0.html;msg1797955#msg1797955) Citar Expansión de variables especiales (o Argumentos) y de variables de FOR %~z0 - expande %0 a tamaño del archivo 1 caracter escrito equivale a 1 byte de tamaño, así que con ese método sacamos el tamaño del archivo (que es lo mismo que sacar la longituid del string porque se cuentan de 1 en 1), le descuento 5 (-5) por los bytes de las comillas y los espacios. Citar Código: Call Set "Compare_A=%%WORD:~0,%Word_Middle%%%" No. Substring: Extraer parte de una variable. http://ss64.com/nt/syntax-substring.html Si la palabra es "atoyota", almaceno en la primera variable "ato" y en la segunda "ota", y lo mismo si en lugar de palabras usases números... Citar Código: FOR /L %%X in (1,1,%Word_Middle%) DO (Call Set "Compare_B_REVERSED=%%Compare_B_REVERSED%%%%Compare_B:~-%%X,1%%") Tampoco. Lée el comentario de esa línea, ese FOR lo uso para hacer un Reverse-String de la variable "Compare_B", es necesario tanto para strings alfabéticos, numéricos, o alfanuméricos. Variable normal: Código: monje Variable al revés: Código: ejmon Call Set "Compare_B_REVERSED=%%Compare_B_REVERSED%%%%Compare_B:~-%%X,1%%") Tutorial extendido de aprendizaje Batch by Elektro H@cker 4.8 Otros operadores (http://foro.elhacker.net/scripting/tema_bloqueado_hasta_finalizar_el_tuto_tutorial_extendido_de_aprendizaje_batch-t375135.0.html;msg1797947#msg1797947) Citar % Este operador sirve para identificar y usar las variables standard, las variables de FOR, y las variables especiales (Variables de argumento). Código: %0 NOTA: Como norma general, directamente en la consola el caracter % solo se usa una vez (Incluso al escribir un FOR), pero en un script hay que duplicar el número de veces que se repite este caracter para poder identificarlo %%, y el número de veces que hay que repetir el caracter aumenta según la recursividad del código. Para strings numéricos es más sensato que uses la expansión retardada: Tutorial extendido de aprendizaje Batch by Elektro H@cker 6.3 Variables expandidas (http://foro.elhacker.net/scripting/tema_bloqueado_hasta_finalizar_el_tuto_tutorial_extendido_de_aprendizaje_batch-t375135.0.html;msg1797972#msg1797972) Resumen del código entero: Introducimos la palabra "atoyota" El código separa el string así: ato-y-ota en la variable "Compare_A" se almacena "ato" en la variable "Compare_B" se almacena "ota" a la variable "Compare_B" se le da la vuelta quedando así: "ato" se compara si la variable "A" y la "B" son iguales (ato = ato) y entonces es palíndromo. Lo mismo con los números: introduces "123321" El código separa el string así: 123-321 en la variable "Compare_A" se almacena "123" en la variable "Compare_B" se almacena "321" a la variable "Compare_B" se le da la vuelta quedando así: "123" se compara si la variable "A" y la "B" son iguales, ¿123 = 123? si, pues es capicúa. Saludos. |