Página 1 de 1

lectura de .ini remotamente

Publicado: 27 Mar 2012, 13:56
por franky
Hola. Buenas a todos soy nuevo por estos barrios y nuevo usando autoit, aquí andaré dando toda la guerra que pueda y ayudando en lo que pueda y sepa también.

mi duda es que tengo un scritp que estoy liado con el y en unos comandos de configuración del programa para su funcionamiento los tengo en .ini.

mi pregunta es si se pueden leer los .ini online, direcetamente desde mi servidor sin necesidad de que se descargen, y sin tener que tenerlo en el disco duro de mí ordenador.

Re: lectura de .ini remotamente

Publicado: 27 Mar 2012, 15:16
por arkcrew
Hola,

Claro que puedes!, simplemente es como leer un archivo de una página web, tienes la función _inetgetsource() que se encuentra en la librería inet.au3.

Puedes ver más información en la ayuda, pero con esa función te garantizo que puedes.

Sería algo como:

#include <INET.au3>
$contenido_ini = _inetgetsource("tudirección.com/ruta_del_ini.ini")

Y almacenaría en esa variable el contenido del ini.

También creo que puedes hacerlo por objetos para leer el código fuente estaba en la ayuda también es cuestión que mires, pon en la ayuda object o algo asi y mira en lso ejemplos que trae y sale.

Puede sincluso probar con la función iniread() y en la unicación especificar la url aver si cuela y te devuelve valores.

Espero ayudarte,

Saludos!

Re: lectura de .ini remotamente

Publicado: 27 Mar 2012, 15:53
por franky
Muchísimas gracias cuando salga del curro y llege a casa pruevo lo que me comentastes. lo de iniread probé poniendo la url, pero no coló jejeje probaré lo otro que me comentas que tiene muy buena pinta.

luego te comento que tal fue, gracias de nuevo.

Re: lectura de .ini remotamente

Publicado: 27 Mar 2012, 15:58
por arkcrew
De nada hombre, un placer!

Pues espero tus comentarios a ver que tal :D

Saludos!

Re: lectura de .ini remotamente

Publicado: 27 Mar 2012, 16:13
por arkcrew
Hola de nuevo,

Busqué algo de información acerca de tu tema, y se te olvidó mirar en le foro ingles!!! Ha sido buscar, read an ini file online on autoit y encontrar tu resultado xD

Te lo dejo aquí y te lo explico:

Código: Seleccionar todo

#include <inet.au3>

Func _InetIniRead($s_url, $v_section, $v_key, $v_default = -1)
    If $v_default = -1 Or $v_default = Default Then $v_default = ""
    Local $s_text = _INetGetSource($s_url)
    If $s_text = "" Then Return SetError(1, 0, $v_default)
    $s_text = @CRLF & $s_text & @CRLF
    $v_section = StringStripWS($v_section, 7)
    Local $a_data = StringRegExp($s_text, "(?s)(?i)\n\s*\[\s*" & $v_section & "\s*\]\s*\r\n(.*?)(?m:\[|\z)", 3)
    If IsArray($a_data) = 0 Then Return SetError(2, 0, $v_default)
    Local $a_read = StringRegExp(@LF & $a_data[0], "(?s)(?i)\n\s*" & $v_key & "\s*=(.*?)\r", 1)
    If IsArray($a_read) = 0 Then Return SetError(3, 0, $v_default)
    Return $a_read[0]
EndFunc
La función es similar al iniread, simplemente, por lógica, al leer el contenido web no puedes trabajar como si fuera un archivo ini sino que trabajas con un archivo con texto plano por lo que la función utiliza las expresiones regulares para operar como si se tratase de un archivo ini, en realidad da exactamente igual te va a operar igual, pero quería explicarte un poco como funcionaba.

Para obtener resultados, es muy simple, basta con llamar a la función de manera muy similar a la función iniread, pasas los parámetros:
Dirección,Sección y Clave_sección

Supongamos un ini que contenga idiomas con la estructura:
[esp]
01=Hola
Pues, para leer ese "hola", llamaríamos a la función como si tratásemos con un ini normal, en un ini diríamos; Iniread(Ruta,"esp","01","") y nos devolvería hola, pues aqui, al llamar a la función, lo haríamos: _InetIniRead(url, "esp", "01") y si eso lo almacenamos en una variable, pues podemos acceder a ese texto, te recomiendo que lances la función asi mientras la estés probando:

$s_string = _InetIniRead("url", "seccion", "clave")
ConsoleWrite($s_string & @CRLF)


Con esto puedes ver en la parte de depuración el texto que va obteniendo, devolviendote un -1 en caso de no tener resultados.

Saludos!

Re: lectura de .ini remotamente

Publicado: 27 Mar 2012, 17:46
por franky
Ok entendido, gracias de verdad por la ayuda y tomarte la molestia de explicarmelo, por que lo del ini se resistía jejeje, luego probaré y te comento.

Re: lectura de .ini remotamente

Publicado: 27 Mar 2012, 21:34
por franky
no consigo hacerlo funcionar.

te explico la situación mejor, el programa es para pinchar en pixel y queremos usarlos unos amigos y yo, pero el problema que hay es que cada "X" tiempo cambian los colores, entonces mi pensamiento era de que en un servidor estuviera el ini al que yo tengo acceso, y cambiando el código del ini, cuando conectaran mis amigos el programa se les cargue el ini directamente del servidor, pero que no se quedara almacenado nada de nada el ini en sus ordenadores.

ahora esto es lo que quiero hacer con el código:

Código: Seleccionar todo

Global $BoxColor = 0X00001

Global $SecColor = 0X00000
este seria el código simple que luego mas abajo el programa cuando busca pixel, busca la referencia de $BoxColor y $secColor y ve el código de color y pincha.
bien ahora mi idea es modificar esas 2 lineas para que las coja del ini, con el ini en el ordenador funciona 100%

dejándolo el código dentro del ini asi:

Código: Seleccionar todo

[Color]
Color1=0x000001
Color2=0x000000
ahora donde me lio es que el scritp no pierda la referencia de $BoxColor y $secColor y que lo lea sin descargarlo.

Re: lectura de .ini remotamente

Publicado: 27 Mar 2012, 23:21
por arkcrew
Hola,

Pues muy simple,

Global $BoxColor = _InetIniRead("url", "Color", "color1")
Global $SecColor = _InetIniRead("url", "Color", "color2")

Con eso el programa cargará los datos que tenga el ini, al cual debes especificar la url de donde lo tienes almacenado y si esos colores se van actualizando, pues mete eso en un bucle y asi se te va actualizando la variable con los nuevos valores.

Saludos!

Edito:

Profundizo en mi explicación:

Desglosemos, tienes en un lado tu ini alojado en una web o donde quieras y ese ini tu lo actualizas, el ini cumple la estructura que has citado.

Por otra parte tenemos nuestro programa, que pincha en los sitios especificados en el ini, llamemosle cliente.

Pues bien, si cada X camcbia, pues he de entender que el ini lo actualizas cuando cambia asi que eso lo dejamos aparte todo el rato. debes saber cada cuanto tiempo cambia para clickar, aunque en realidad es indiferente puesto que supongo que las pulsaciones las haces cada x tiempo y como actualzias el ini es indiferente,

Lo que debes tener claro, es que la variable que almacena esas coordenadas no va a tener un valor fijo puesto que estas van a depender del valor del ini, pero si les das el valor inicial de la función sin meterlo en un bucle, lo que va a sucederte es que ese valor no va a cambiar, por lo que debes tener claro cuanto tiempopasa entre click y click para definir el bucle, te pongo un ejemplo, pongamos que clickas cada 3 segundos:

;Codigo:
Global $BoxColor, $SecColor

while 1
$BoxColor = _InetIniRead("url", "Color", "color1")
$SecColor = _InetIniRead("url", "Color", "color2")
:Codigo para pulsar
Sleep(3000)
wend

Con esto el programa llama la función y actualiza las variables pulsa en las coordenadas obtenidas y espera tres segundos para repetir lo anteriormente dicho.

Espero ser claro.

Saludos de nuevo!

Re: lectura de .ini remotamente

Publicado: 28 Mar 2012, 01:27
por franky
Mañana lo pruebo de nuevo pero me parece que el código lo probe como me as puesto y no me funciono, al probarlo me tiro error la consola por poner las opciones de lo del color, color1, y no cargo el script, y luego probe y puse 2 ini con solo 1 código de color en cada uno, y los ini con nombres diferentes en cada ini y borre las opciones de color, color1 y nada de nada.

Ando desesperado con esto jejeje, y gracias por tu paciencia.

Re: lectura de .ini remotamente

Publicado: 28 Mar 2012, 14:18
por arkcrew
Buenas,

Pues prueba y postea todo el código, porque ya te digo que funciona más que nada porque me entró la duda y lo probé yo mismo en mi pc instalando el appserv.

Saludos!

Re: lectura de .ini remotamente

Publicado: 28 Mar 2012, 20:43
por franky
mira el error que me tira es como si el comando no existiera en el programa:

ERROR: _InetIniRead(): undefined function.

ademas que me sale en negro totalmente el _InetIniRead, no tendre que instalar algo que me falte en el autoit???

Re: lectura de .ini remotamente

Publicado: 28 Mar 2012, 21:00
por arkcrew
Hola,

Quizás sea que no incluiste la librería inet.au3.
Añade a tu código: #include <INET.au3> y me cuentas ;)

Saludos!

Re: lectura de .ini remotamente

Publicado: 28 Mar 2012, 21:39
por franky
esto es como lo tengo al principio estab bien no?

Código: Seleccionar todo

#include <GuiConstants.au3>
#include <GuiConstantsEx.au3>
#include <NetShare.au3>
#include <String.au3>
#include <Array.au3>
#include <WindowsConstants.au3>
#include <INET.au3>

Re: lectura de .ini remotamente

Publicado: 28 Mar 2012, 22:04
por arkcrew
Hola,

Si , si que está bien, pero, hazme el favor de postear todo el código porque sino no avanzamos macho.

Saludos!

Re: lectura de .ini remotamente

Publicado: 28 Mar 2012, 23:07
por franky
ya encontre el fallo :smt043 :smt043 , le faltaba parte del codigo de inetiniread, al archivo inet.au3.

Asi que puse el codigo completo de arriba y funcioanado.

arkcrew por mi parte te ganastes el cielo con esa paciencia que tienes jejeje, muchisimas gracias por tu ayuda y te debo una cervecita bien fria :smt038 :smt038

Re: lectura de .ini remotamente

Publicado: 29 Mar 2012, 10:18
por arkcrew
Hola,

JAJAJ de nada hombre un placer ayudarte! y no te hago ascos a una buena jarrita congelada jajajajja.
Espero que le des caña a tu aplicación y ya sabes, si tienes más dudas por aqui estamos todos los usuarios del foro por si te ponemos ayudar.

Saludos!

Re: lectura de .ini remotamente

Publicado: 29 Mar 2012, 14:44
por franky
Ok. Por aquí andaré aprendiendo a usar mejor él autoit que la verdad tiene mucho potencial y ayudar siempre en lo que pueda, aunque ahora mismo sepa poco jejeje.

un saludo.