elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Batch. Encontrar palabra en frase
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Batch. Encontrar palabra en frase  (Leído 5,354 veces)
Stealt

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Batch. Encontrar palabra en frase
« en: 29 Agosto 2013, 09:13 am »

Hola, tengo que hacer un script en batch que encuentre una palabra en una frase dadas ambas por el usuario. Y contar cuantas veces aparece la palabra en la frase.

No puedo usar FOR, ahí me jodieron bien.

He pensado en aislar las palabras entre los espacios contando estos pero en mitad del código me lio mucho.


Si queréis dejarme el código vale, pero también acepto ideas sobre cómo hacer.

Un saludo :D



Bueno, tenía en problema que intentaba trabajar solo con variables, recogiendo la frase y la palabra a buscar en la frase, he visto que es imposible y estoy probando a mandar la frase a un .txt con echo, y luego usar find para buscar la palabra, el problema es que me muestra las lineas que la contienen, alguna idea para que mande las palabras al .txt de a una por linea?


[MOD] NO hagas doble post, usa el botón "modificar", para añadir comentarios.


« Última modificación: 29 Agosto 2013, 14:02 pm por simorg » En línea

apuromafo CLS


Desconectado Desconectado

Mensajes: 1.441



Ver Perfil WWW
Re: Batch. Encontrar palabra en frase
« Respuesta #1 en: 29 Agosto 2013, 10:29 am »

no tengo muchas ideas sin for, pero algo se ocurre:
la idea:
 uso de "findstr " para enlistar palabras de cierto "largo"
luego guardaste en otro archivo
luego type y find para tomar el listado creado anterior y enlistar la cantidad de palabras que querías encontrar

revisa esta fuente: http://foro.elhacker.net/scripting/acciones_sobre_archivos_de_texto_batch-t242748.0.html


En línea

Apuromafo
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Batch. Encontrar palabra en frase
« Respuesta #2 en: 29 Agosto 2013, 10:38 am »

No puedo usar FOR, ahí me jodieron bien.

Es totálmente necesario usar FOR para la tarea que pides, ¿Quien te ha dicho que no lo uses, o porque dices que no puedes usarlo?... si no puedes usarlo, no puedes hacer la tarea usando Batch, es así de simple.

He pensado en aislar las palabras entre los espacios

Para hacer un Split necesitas usar FOR, entonces no puedes separar las palabras de ningún modo.

alguna idea para que mande las palabras al .txt de a una por linea?

Para eso tienes que hacer un ciclo sobre las palabras procesándolas una a una, es decir, se necesita usar FOR.



PD: No te codeo ninguna solución porque dices que no puedes usar FOR (aunque no hay otra manera de hacerlo), además en Google puedes encontrar miles de ejemplos.



Saludos!





Bueno al final he codeado un ejemplo para mostrarte, aunque lo repito de nuevo, NO SE PUEDE HACER SIN USAR FOR.

Este código es una porquería (porque sin FOR no se puede hacer más que una porquería como esta), está limitado a procesar sólamente 255 palabras (es el límite de Batch) y además no puedes escribir caracteres conflictivos en la Frase, ya que sin el uso de FOR pues es lo que hay, no hay otras alternativas.

Sincéramente no te recomiendo para nada que lo hagas sin usar FOR, FOR existe para usarlo, no sé si es que eso de "no puedo usar FOR" es algún tipo de reto o lo has leido en algún tutorial o algo parecido... pero desde luego es algo ridículo que no tiene ningún sentido, ya que la forma más eficiente es usar FOR.

...Y debes acostumbrarte a usar FOR, ya que un búcle simplifica mucho las cosas y de lo contrario vas a tener que escribir y repetir miles de lineas de código, es decir, si no usas FOR vas a ser un guarro codeando en lugar de un coder eficiente, como en el siguiente código que te muestro ...el cual es una simple muestra de como hacer lo que pides sin usar FOR, pero realmente como ya he comentado no puedes hacerlo de manera decente y/o eficiente sin usar FOR, no busques alternativas que no existen, yo no me sentiria nada orgulloso de hacer este tipo de códigos cuando existen formas eficientes de hacerlo usando FOR.






Código
  1. @Echo OFF
  2.  
  3.  
  4. Set /P "Phrase=  Escribe la frase   >> "
  5. Set /P "FindWord=Escribe la palabra >> "
  6. Call :WordCount %Phrase%
  7. Pause&Exit
  8.  
  9.  
  10. :WordCount
  11.  
  12. :: %1 - %9
  13. (Echo "%~1" & Echo "%~2" & Echo "%~3" Echo "%~4" & Echo "%~5" & Echo "%~6" Echo "%~7" & Echo "%~8" & Echo "%~9")> "%TEMP%\Words.tmp"
  14.  
  15. :: %10 - %18
  16. (Echo "%~1" & Echo "%~2" & Echo "%~3" Echo "%~4" & Echo "%~5" & Echo "%~6" Echo "%~7" & Echo "%~8" & Echo "%~9")>> "%TEMP%\Words.tmp"
  17.  
  18. :: %19 - %27
  19. (Echo "%~1" & Echo "%~2" & Echo "%~3" Echo "%~4" & Echo "%~5" & Echo "%~6" Echo "%~7" & Echo "%~8" & Echo "%~9")>> "%TEMP%\Words.tmp"
  20.  
  21. :: %28 - %36
  22. :: Repetir el mismo proceso hasta deslizar la posición de los argumentos hasta alcanzar el parámetro límite de Batch, el %255.
  23.  
  24. Echo Coincidencias:     | MORE
  25. Type "%TEMP%\Words.tmp" | FIND /C /I "%FindWord%" | MORE
  26. GOTO :EOF
« Última modificación: 29 Agosto 2013, 14:29 pm por EleKtro H@cker » En línea



SmartGenius

Desconectado Desconectado

Mensajes: 181


:P


Ver Perfil WWW
Re: Batch. Encontrar palabra en frase
« Respuesta #3 en: 30 Agosto 2013, 05:41 am »

Código:
@Echo Off

Set /p "Frase=Frase >"
Set /p "Word=Palabra >"
Call :Comp %Frase%
Echo. Coincidencias: %C%
Pause&Exit

:Comp
If "%~1"=="" Goto :Eof
If "%~1"=="%Word%" Set /a "C+=1"
Shift&Goto :Comp

 :silbar:
En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Batch. Encontrar palabra en frase
« Respuesta #4 en: 30 Agosto 2013, 07:29 am »

Buena observación

PD: Aunque me sigue pareciendo ridículo el problema por la necesidad de usar métodos recursivos cuando disponemos de FOR para simplificarlo de forma más eficiente.

Saludos!
« Última modificación: 30 Agosto 2013, 07:39 am por EleKtro H@cker » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines