Extraer variable de un archivo de texto (BATCH)

Iniciado por rafaeljoseyepez, 8 Noviembre 2020, 21:19 PM

0 Miembros y 1 Visitante están viendo este tema.

rafaeljoseyepez

Saludos, vengo acá con una pregunta que pudiera parecer algo tonta, pero no logro resolverlo, a ver si ustedes se les ocurre una mejor idea.

tengo un archivo de texto llamado calificar.txt con este contenido:

Código (html4strict) [Seleccionar]
                 <td> <input type='image' src='../img/up.png' width='20px' height='20px' value='Like' id='like_28097' class='like'> <small><b>(<span id='likes_28097'>21</span>)</small></b> &nbsp;&nbsp;  <input type='image' src='../img/down.png' width='20px' height='20px' value='Unlike' id='unlike_28097' class='unlike'> <small><b>(<span id='unlikes_28097'>3</span>)</small></b> </td>


todo en una sola línea... lo que quiero es extraer de esa línea dos variables LIKES y DISLIKES...

de modo que el resultado de esto:
echo LIKES: %LIKES% DISLIKES: %DISLIKES%
sea esto:
LIKES: 21 DISLIKES: 3

Se me había ocurrido contar los caracteres:

Código (dos) [Seleccionar]
<"calificar.txt" set /p "CALIFICAR="
SET LIKES="%CALIFICAR:~167,2%"


funciona, pero... con los dislikes no funcionaría si a veces los likes son de 2 dígitos y a veces de 1, entonces el dislike a veces se mostraría bien y otras veces no...

¿Qué me sugieren para resolverlo?

EdePC

Para hacer token-ización se usa el For /F, puedes ver su referencia completa en: https://ss64.com/nt/for_f.html

Código (dos,2) [Seleccionar]
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do Echo LIKES: %%a DISLIKES: %%b
Pause


Prueba:

CitarC:\Users\EdSon\Desktop>type calificar.txt
                  <td> <input type='image' src='../img/up.png' width='20px' height='20px' value='Like' id='like_28097' class='like'> <small><b>(<span id='likes_28097'>21</span>)</small></b> &nbsp;&nbsp;  <input type='image' src='../img/down.png' width='20px' height='20px' value='Unlike' id='unlike_28097' class='unlike'> <small><b>(<span id='unlikes_28097'>3</span>)</small></b> </td>

C:\Users\EdSon\Desktop>type likes.cmd
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do Echo LIKES: %%a DISLIKES: %%b
Pause

C:\Users\EdSon\Desktop>likes.cmd
LIKES: 21 DISLIKES: 3
Presione una tecla para continuar . . .

rafaeljoseyepez

Excelente, me funcionó perfecto, y ¿Cómo haría para establecerlos como variables?
Intenté con esto y no funcionó:

Código (dos) [Seleccionar]
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do SET "LIKES=%%A" Do SET "DISLIKES=%%B"

EdePC

Tienes que agrupar las instrucciones a ejecutar con Do entre paréntesis, esto si son más de uno, caso contrario tal como puse en el ejemplo anterior no es necesario para una sola instrucción o instrucciones seguidas en la misma línea:

Código (dos) [Seleccionar]
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do (
  Set LIKES=%%a
  Set DISLIKES=%%b
)
Echo LIKES: %LIKES% DISLIKES: %DISLIKES%
Pause


Instrucciones seguidas en la misma línea:

Código (dos) [Seleccionar]
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do Set "LIKES=%%a" & Set "DISLIKES=%%b")
Echo LIKES: %LIKES% DISLIKES: %DISLIKES%
Pause


- Uso las comillas para evitar que se agregue en espacio que dejo antes del & y porque así recomiendan para evitar problemas con espacios en el contenido de las variables

Siempre puedes tener a mano este tutorial de Batch: Tutorial de Programación Batch (Nikos3194, 2013)
https://sites.google.com/site/nikos3194rfcindex/Tutorial%20de%20programacion%20Batch%20%5Bfinal%5D.pdf
Y por supuesto la misma ayuda de poniendo el /?, Ej: for /?
Para cosas más detalladas está la referencia de Batch en inglés: https://ss64.com/nt/

Danielㅤ

#4
Hola, en mis primeros comienzos en programación he aprendido Bach y he usado este tutorial:

[PDF] Tutorial de Batch para novatos - Juanla
CURSO DE BATCH DESDE 0 – POR JUANLA

https://ensayandopopup.webcindario.com/pdfs/batch.pdf

Me ayudó bastante para poder aprender sobre batch.

No sé porque pero con el tiempo y hasta hoy en día he visto muchos otros tutoriales de Bach pero éste que dejé no lo he vuelto a ver... qué raro parece como que quedó en el olvido siendo un muy buen tutorial y que de ese tutorial/curso he aprendido bastante.


Saludos
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

rafaeljoseyepez

Cita de: EdePC en  9 Noviembre 2020, 04:04 AM
Tienes que agrupar las instrucciones a ejecutar con Do entre paréntesis, esto si son más de uno, caso contrario tal como puse en el ejemplo anterior no es necesario para una sola instrucción o instrucciones seguidas en la misma línea:

Código (dos) [Seleccionar]
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do (
  Set LIKES=%%a
  Set DISLIKES=%%b
)
Echo LIKES: %LIKES% DISLIKES: %DISLIKES%
Pause


Instrucciones seguidas en la misma línea:

Código (dos) [Seleccionar]
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do Set "LIKES=%%a" & Set "DISLIKES=%%b")
Echo LIKES: %LIKES% DISLIKES: %DISLIKES%
Pause


- Uso las comillas para evitar que se agregue en espacio que dejo antes del & y porque así recomiendan para evitar problemas con espacios en el contenido de las variables

Siempre puedes tener a mano este tutorial de Batch: Tutorial de Programación Batch (Nikos3194, 2013)
https://sites.google.com/site/nikos3194rfcindex/Tutorial%20de%20programacion%20Batch%20%5Bfinal%5D.pdf
Y por supuesto la misma ayuda de poniendo el /?, Ej: for /?
Para cosas más detalladas está la referencia de Batch en inglés: https://ss64.com/nt/


Muchísimas gracias, de verdad fue de mucha ayuda :D