Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: rafaeljoseyepez en 8 Noviembre 2020, 21:19 pm



Título: Extraer variable de un archivo de texto (BATCH)
Publicado por: rafaeljoseyepez en 8 Noviembre 2020, 21:19 pm
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
  1.                  <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
  1. <"calificar.txt" set /p "CALIFICAR="
  2. 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?


Título: Re: Extraer variable de un archivo de texto (BATCH)
Publicado por: EdePC en 8 Noviembre 2020, 23:20 pm
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
  1. @Echo Off
  2. For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do Echo LIKES: %%a DISLIKES: %%b

Prueba:

Citar
C:\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 . . .


Título: Re: Extraer variable de un archivo de texto (BATCH)
Publicado por: rafaeljoseyepez en 9 Noviembre 2020, 02:45 am
Excelente, me funcionó perfecto, y ¿Cómo haría para establecerlos como variables?
Intenté con esto y no funcionó:

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


Título: Re: Extraer variable de un archivo de texto (BATCH)
Publicado por: 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
  1. @Echo Off
  2. For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do (
  3.  Set LIKES=%%a
  4.  Set DISLIKES=%%b
  5. )
  6. Echo LIKES: %LIKES% DISLIKES: %DISLIKES%

Instrucciones seguidas en la misma línea:

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

- 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/


Título: Re: Extraer variable de un archivo de texto (BATCH)
Publicado por: Danielㅤ en 9 Noviembre 2020, 13:59 pm
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


Título: Re: Extraer variable de un archivo de texto (BATCH)
Publicado por: rafaeljoseyepez en 15 Diciembre 2020, 00:18 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
  1. @Echo Off
  2. For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do (
  3.  Set LIKES=%%a
  4.  Set DISLIKES=%%b
  5. )
  6. Echo LIKES: %LIKES% DISLIKES: %DISLIKES%

Instrucciones seguidas en la misma línea:

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

- 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