Busqueda de string en un Txt

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Haseo
Mensajes: 15
Registrado: 07 Ago 2011, 08:45

Busqueda de string en un Txt

Mensaje por Haseo »

EDITO Todo:
lo acortaré mejor poniendo solo lo importante en lo que necesito ayuda, que tiene que ser mucho palo leerlo así.

Código: Seleccionar todo

#Include <Array.au3>
#Include <File.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>

#Region
$IndexForm = GUICreate("L2Uria's Price Manager", 597, 417, 192, 117)
$IDP1 = GUICtrlCreateInput("ID / Nombre", 80, 192, 65, 21)
$ButtGenerate = GUICtrlCreateButton("Generar el Código", 432, 120, 121, 25)
GUISetState(@SW_SHOW)
#EndRegion

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $ButtGenerate
				_FuncBusqueda()

	EndSwitch
WEnd

Func _FuncBusqueda()

	$ReadIDP = GUICtrlRead($IDP1)
	$ReadCountP = GUICtrlRead($IDPC1)
	$Directorio = @ScriptDir & "\items\"
$array = _FileListToArray($Directorio,"*",1)

	$ValID = '<item id="' & $ReadIDP & '"'

$i = 1
While $i <= $array[0]

$File = FileOpen($Directorio & $array[$i],0)
$line = FileRead($File)

	If $line = $ValID Then
		MsgBox(0,"Valor Encontrado",$line)
	Else
		$i = $i + 1
	EndIf

WEnd
EndFunc
A ver si así os aclarais mejor.

Gracias u.u

EDIT: Aclaro que he probado la dirección de los archivos y todo eso con MsgBoxes y me sale bien la direccion, incluso me salen bien los nombres de todos los archivos.

EDIT2: He cambiado FileRead por FileReadLine, y he descubierto que si pongo la linea entera del archivo, si que me lo encuentra. Pero resulta que yo lo que quiero, es, como cuando buscas en el explorador de windows, alguna cosa en la opcion de "que contenga el archivo"... O sea, que esa misma linea que me sale poniendo la linea entera en la variable $IDP1, me la encontrase solo con un trozo de la linea...
Última edición por Haseo el 07 Ago 2011, 23:41, editado 1 vez en total.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Funcion para buscar substrings en strings (texto)

Mensaje por Chefito »

Mira la función StringInStr en la ayuda para buscar subcadenas de texto en cadenas de texto.

Intenta preguntar mejor. Si lo que quieres es encontrar una subcadena (substring) en una cadena, o un texto en otro texto, pues pon eso en el Asunto del mensaje. No te parecería más explicativo que lo que has puesto???.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Haseo
Mensajes: 15
Registrado: 07 Ago 2011, 08:45

Re: vistazo a este script?

Mensaje por Haseo »

Bueno... soy un poco novato... no se me ocurrió plantearlo así. Y a demás tampoco me funciona así. Mira como lo puse:

Código: Seleccionar todo

$i = 1
While $i <= $array[0]

$File = FileOpen("C:\L2URIA's Price Manager\items\00000-00099.txt")
$line = FileRead($File)
$Result = StringInStr($line, $ValID)

	If $File = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    ExitLoop
EndIf

If ($Result <> 0)	Then
	MsgBox(0,"Found!",$Result)
	ExitLoop
Else
	$i = $i + 1
EndIf
WEnd
Menudos dolores de cabeza me cojo con esto... xD

Bueno, aclaro que no es que no me saque nada en el msgbox, si no que me salen numeros, numeros que no se de donde salen... Es decir, yo busco un ID, el cual pongo en el inputbox del valor a buscar, El id es facilito, como que está en la 3ª linea del primer archivo. Aun así, el ID es 1, pues me dice en el MsgBox:

16

xD.

EDITO: Perdona por no leerlas. Acabo de hacerlo.
Última edición por Haseo el 07 Ago 2011, 23:41, editado 2 veces en total.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: vistazo a este script?

Mensaje por Chefito »

Por esta causa siempre es recomendable leer las normas y consejos de un foro antes de nada:
http://www.emesn.com/autoitforum/viewtopic.php?f=1&t=8

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Busqueda de string en un Txt

Mensaje por Ximorro »

Pues te sale 16 porque estás sacando el resultado de StringInStr, y esta función devuelve la posición donde encuentra el string que estás buscando. Es decir, la cadena que buscas empieza en el carácter 16 de la línea que le has pasado para que busque.

¿Qué es lo que quieres que te muestre? Si es la línea en sí tendrás que poner $line en el MsgBox, si es el número de línea pues usa $i, que es donde estás contándolas...

Bienvenido al foro, espero que te sea útil. Además de las recomendaciones y normas de uso que te indica Chefito tienes una guía de dónde empezar buscando información y cómo ser más productivo en el foro aquí:
http://www.emesn.com/autoitforum/viewto ... f=2&t=2593
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Haseo
Mensajes: 15
Registrado: 07 Ago 2011, 08:45

Re: Busqueda de string en un Txt

Mensaje por Haseo »

Muchas gracias por la información y tal. Pero mira...
El msgbox lo utilizo al principio siempre, para comprobar que los valores que obtengo son los que quiero, en realidad tendrá otros usos despues.

Lo que quiero es que al introducir la ID a buscar, busque en los archivos esa ID para comprobar que existe.

Es decir, en los archivos, la Id siempre va dada entre estas etiquetas:

<item id="1" type="Weapon" name="Short Sword">

Entonces yo, como puede ser que haya algun otro parametro, como el ataque de un arma, o algo por el estilo que sea igual que el hipotetico ID a buscar, para que no se confunda, pongo que el valor a buscar es: '<item id="' & $Read_Del_Input & '" type="Weapon" name='.

y bueno, que nada, que no me las apaño para que me lo encuentre. porque he pensado, he cambiado variables, he pensado más... he vuelto a cambiarlas... xD
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Busqueda de string en un Txt

Mensaje por Ximorro »

Me refiero al
MsgBox(0,"Found!",$Result)
donde sacas el resultado. ¿No te está saliendo ahí el 16 que decías? A ver si eso no lo he entendido bien.

Si te lo está sacando ahí, te está encontrando la línea ¿cuál es el problema?
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Haseo
Mensajes: 15
Registrado: 07 Ago 2011, 08:45

Re: Busqueda de string en un Txt

Mensaje por Haseo »

Vale, perdon por liarlos a todos. Es al parecer no lei bien uno de los posts de ximorro. Ya he entendido como va.

Ahora la cosa es la siguiente: Me encuentra el resultado, pero yo, lo que quiero que me busque es el ID, poniendo el NOMBRE. Es decir...
Como haría para que yo, estando en esta linea, coger el dato dentro de las comillas de la instrucción "id"?

Ejemplo:

Encontrado un valor en la LINEA 3
<item id="1" type="Weapon" name="Short Sword">

Short Sword - > Dato de la busqueda.

1 -> Dato que debe anotar a partir de esa busqueda.

He buscado en el archivo help del autoit algunas instrucciones y bueno, he encontrado alguna cosa tipo separar strings, o cosas parecidas, pero no se me termina de ocurrir como plantearlo...
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Busqueda de string en un Txt

Mensaje por Chefito »

Para conseguir ese texto, lo mejor es averiguar que hay en medio entre dos texto. Para eso tienes las funciones de expresiones regulares (StringRegExp) y otra de la udf string.au3 (_StringBetween). Cualquiera de las dos te vale. Miralas en la ayuda, mira sus ejemplos, y si tienes alguna duda coméntala.

He visto que estás intentando sacar el id de objetos htmls. También puedes utilizar la librería IE.au3 para sacar estos datos.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Busqueda de string en un Txt

Mensaje por Ximorro »

Puedes hacerlo con StringBetween, una vez tienes la línea concreta:

Código: Seleccionar todo

#Include <string.au3>

$linea = '<item id="1" type="Weapon" name="Short Sword">'
$id = _StringBetween($linea, 'item id="', '"')
MsgBox(0, "ID", "ID = " & $id[0])
Otra manera es con búsqueda con expresiones regulares, eso es ligeramente más complicado.

---
Edit: Ah, je, je, ya había contestado Chefito, bueno, pues eso. :smt005
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Haseo
Mensajes: 15
Registrado: 07 Ago 2011, 08:45

Re: Busqueda de string en un Txt

Mensaje por Haseo »

Chefito escribió:Para conseguir ese texto, lo mejor es averiguar que hay en medio entre dos texto. Para eso tienes las funciones de expresiones regulares (StringRegExp) y otra de la udf string.au3 (_StringBetween). Cualquiera de las dos te vale. Miralas en la ayuda, mira sus ejemplos, y si tienes alguna duda coméntala.

He visto que estás intentando sacar el id de objetos htmls. También puedes utilizar la librería IE.au3 para sacar estos datos.

Saludos.
No estoy buscando en html. en realidad son archivos de mi servidor, un royo que no hace falta explicar ahora. Solo pasé las descripciones a .txt, y así pues con un script de autoit puedo buscarlas, y cuando las necesito para hacer algun código, voy al programa, meto las IDS necesarias y me hace el codigo el mismo. Así no tardo nada. ( Porque he de hacer eso muchas muchas veces... )

Y muchisimas gracias por la explicación, me ha servido de mucho. e_e ( Va por los dos. )
Responder