Página 1 de 1
Busqueda de string en un Txt
Publicado: 07 Ago 2011, 10:59
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...
Funcion para buscar substrings en strings (texto)
Publicado: 07 Ago 2011, 22:43
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.
Re: vistazo a este script?
Publicado: 07 Ago 2011, 23:16
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.
Re: vistazo a este script?
Publicado: 07 Ago 2011, 23:35
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.
Re: Busqueda de string en un Txt
Publicado: 08 Ago 2011, 09:00
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
Re: Busqueda de string en un Txt
Publicado: 08 Ago 2011, 11:49
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
Re: Busqueda de string en un Txt
Publicado: 08 Ago 2011, 12:30
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í, SÍ te está encontrando la línea ¿cuál es el problema?
Re: Busqueda de string en un Txt
Publicado: 09 Ago 2011, 10:21
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...
Re: Busqueda de string en un Txt
Publicado: 09 Ago 2011, 12:24
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.
Re: Busqueda de string en un Txt
Publicado: 09 Ago 2011, 12:33
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.
Re: Busqueda de string en un Txt
Publicado: 10 Ago 2011, 03:56
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. )