|
Página 1 de 2
|
Registro Con Campos Definidos
Autor |
Mensaje |
Eduardo
Usuario
Registrado: Noviembre 2009
Mensajes: 6
Edad: 70
|
Registro Con Campos Definidos
Hola , es mi primera incursion en gambas y necesito mas que una soga un bote salvavidas.
1) como hago para definir un registro de largo fijo como en VB5
ej
type mireg
nombre as string * 50
apellido as string * 50
global regi as mireg
'para cargar todo el registro y guardar todo el registro desde una sola variable
2) como bajo una pagina desde internet para leerlo en forma de texto.
quiero bajar por ejemplo www.dolarhoy
leer la pagina guardada y encontrar una cadena determinada.
Estoy usando gambas 2.16
Desde ya muchas gracias
renovarse es vivir
|
#1 Martes, 17 Noviembre 2009, 16:30 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Registro Con Campos Definidos
Un error y la respuesta de abajo se me duplica... excuse me.
=================== No podemos regresar
última edición por shordi el Martes, 17 Noviembre 2009, 18:05; editado 1 vez
|
#2 Martes, 17 Noviembre 2009, 17:57 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Registro Con Campos Definidos
En lo relativo al tipo de dato, puedes crear un nuevo archivo de clase llamado persona, por ejemplo, que contenga:
Luego en tu código, formulario o módulo creas una instancia de esa clase y alimentas las propiedades de la instacia
DIM per as NEW persona
per.nombre ="este es el nombre"
per.apellido="este el apellido"
También puedes crear métodos constructores en tu clase (_new) que te alimenten valores por defecto, longitudes, etc.
En lo relativo al fichero de internet, descárgalo con el comando externo wget y luego lo cargas en un string y buscas, dentro de gambas, o buscas con comandos externos como grep, y sólo cargas en gambas el resultado. Las posibilidades son muchas.
=================== No podemos regresar
última edición por shordi el Martes, 17 Noviembre 2009, 18:04; editado 1 vez
|
#3 Martes, 17 Noviembre 2009, 18:01 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Registro Con Campos Definidos
2) como bajo una pagina desde internet para leerlo en forma de texto.
quiero bajar por ejemplo www.dolarhoy
leer la pagina guardada y encontrar una cadena determinada.
Estoy usando gambas 2.16
Desde ya muchas gracias
renovarse es vivir
Mira este código:
PRIVATE _downloadAsyncKey AS NEW HttpClient AS "_DownloadKey"
PRIVATE _downloadAsyncData AS NEW HttpClient AS "_DownloadData"
PRIVATE downloadBufferKey AS String
PRIVATE downloadBufferData AS String
PRIVATE csgn AS String
'****PROPERTIES******
PRIVATE $qerror AS String
PRIVATE $qcall AS String
PRIVATE $fname AS String
PRIVATE $name AS String
PRIVATE $addr1 AS String
PRIVATE $addr2 AS String
PRIVATE $country AS String
PRIVATE $state AS String
PRIVATE $grid AS String
PRIVATE $county AS String
PRIVATE $qslmgr AS String
PRIVATE $email AS String
PROPERTY READ qcall AS String
PROPERTY READ name AS String
PROPERTY READ fname AS String
PROPERTY READ qerror AS String
PROPERTY READ addr1 AS String
PROPERTY READ addr2 AS String
PROPERTY READ country AS String
PROPERTY READ state AS String
PROPERTY READ grid AS String
PROPERTY READ county AS String
PROPERTY READ qslmgr AS String
PROPERTY READ email AS String
'*************** QRZ.com Web method ***************
PRIVATE _download AS NEW HttpClient AS "Download"
PRIVATE downloadBuffer AS String
PRIVATE $finished AS Boolean = TRUE
PUBLIC SUB getQRZcomWeb(URL AS String)
downloadBuffer = ""
IF $finished = TRUE THEN
_download.Async = TRUE
_download.TimeOut = 5
_download.URL = URL
_download.Get()
ENDIF
END
PUBLIC SUB Download_Read()
DIM buffer AS String
$finished = FALSE
READ #LAST, buffer, Lof(LAST)
downloadBuffer &= buffer
END
PUBLIC SUB Download_Error()
_download.Close
DEBUG "Error downloading " & _download.Status
END
PUBLIC SUB Download_Finished()
extractData(downloadBuffer)
$finished = TRUE
FMain.updateFields()
END
PRIVATE FUNCTION stripField(s AS String) AS String
IF s THEN
s = Trim(s)
s = Mid(s, InStr(s, "p>") + 2, InStr(s, "</") - (InStr(s, "p>") + 2))
ENDIF
RETURN s
END
PUBLIC SUB extractData(S AS String)
DIM calldata, callsign, id AS String
DIM regex AS Regexp
DIM i, j AS Integer
DIM sArr AS NEW String[]
IF InStr(S, "<!-- begin calldata") THEN
i = InStr(S, ")\">")
j = InStr(S, "style=\"margin-top:1.5em;")
IF j > i THEN calldata = Mid(S, i, (j - i))
sArr = Split(calldata, "\n", "", TRUE)
callsign = Replace(sArr[0], ")\"", "p", 1) 'to match stripField() function
$qcall = stripField(callsign)
$fname = stripField(sArr[1])
$addr1 = stripField(sArr[2])
$addr2 = stripField(sArr[3])
$country = stripField(sArr[4])
sArr.Clear
ELSE
$qcall = ("Not Found")
ENDIF
IF InStr(S, "Info:") THEN $qslmgr = stripField(Upper(Mid(S, InStr(S, "Info:") + 24)))
IF InStr(S, "Square:") THEN $grid = Upper(Mid(S, InStr(S, "Square:") + 27, 6))
CATCH
Message.Error(Error.Text & "\n" & Error.Where)
END
'**********PROPERTY METHODS***************
PRIVATE FUNCTION name_Read() AS String
RETURN $name
END
PRIVATE FUNCTION fname_Read() AS String
RETURN $fname
END
PRIVATE FUNCTION qerror_Read() AS String
RETURN $qerror
END
PRIVATE FUNCTION addr1_Read() AS String
RETURN $addr1
END
PRIVATE FUNCTION addr2_Read() AS String
RETURN $addr2
END
PRIVATE FUNCTION state_Read() AS String
RETURN $state
END
PRIVATE FUNCTION grid_Read() AS String
RETURN Upper($grid)
END
PRIVATE FUNCTION county_Read() AS String
RETURN $county
END
PRIVATE FUNCTION qslmgr_Read() AS String
RETURN Upper($qslmgr)
END
PRIVATE FUNCTION email_Read() AS String
RETURN Lower($email)
END
PRIVATE FUNCTION qcall_Read() AS String
RETURN Upper($qcall)
END
PRIVATE FUNCTION country_Read() AS String
RETURN $country
END
El código completo incluyendo otro método específico para XML lo puedes ver aquí: http://dfhlog.googlecode.com/svn/trunk/QRZ.class
Lo que hago es usar el método asíncrono para descargar una página (la ventaja es que de esta forma, la página se baja por trozos, impidiendo la congelación de la GUI ) y luego es procesada para extraer los datos de interés.
Espero que te sirva, cualquier duda estaré encantado de ayudarte.
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#4 Martes, 17 Noviembre 2009, 20:20 |
|
|
Eduardo
Usuario
Registrado: Noviembre 2009
Mensajes: 6
Edad: 70
|
Re: Registro Con Campos Definidos
Gracias por las respuestas y la rapidez
Voy a revisarlas , estudiarlas, comprenderlas y luego les cuento.
Que dificil se hace perder los vicios.
Amplio un poquito, entonces si tengo que guardar todo mi registro de persona en un archivo solo me basta abrirlo para escritura hacer un print Persona y cerrarlo? o tengo que concatenar per.nombre & per.apellido?
Sigo en la lucha
|
#5 Martes, 17 Noviembre 2009, 21:21 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Registro Con Campos Definidos
Pues tendrás que concatenarlo, supongo, que una clase es, básicamente, una colección de punteros y no será imprimible de una... pero no lo he probado nunca.
Prueba y nos cuentas.
=================== No podemos regresar
|
#6 Martes, 17 Noviembre 2009, 21:27 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Registro Con Campos Definidos
DIM per as NEW persona
per.nombre ="este es el nombre"
per.apellido="este el apellido"
Tendrás que poner print per.nombre y luego print per.apellido. No puedes poner print per.
Pero eso es igual en vb.
|
#7 Miercoles, 18 Noviembre 2009, 00:00 |
|
|
Eduardo
Usuario
Registrado: Noviembre 2009
Mensajes: 6
Edad: 70
|
Re: Registro Con Campos Definidos
Empezare probando
Son dos los temas por ahora, pero primero tengo que resolver el de base de datos en archivo texto con largo fijo
Soplo en Vb con utilizar Put regi , es suficiente pq engloba todos lo registros (Fijate en mi ejemplo).
Si hay que concatenar se podria hacer una funcion que devuelva el largo del registro ya concatenado habiendole pasado cada uno de los campos ( no haria falta pasar las variables como parametros pq podrian ser publicas y ya estar cargadas)
Algo asi
Public function concatenonombres as string
returns ( v1 & v2& v3........)
end
entonces al guardar solo me quedaria
Print concatenonombres
Que opinan?
Me estan haciendo pensar..... Eso es bueno y me gusta.... El facilismo oxida
|
#8 Miercoles, 18 Noviembre 2009, 15:39 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Registro Con Campos Definidos
Si hay que concatenar se podria hacer una funcion que devuelva el largo del registro ya concatenado habiendole pasado cada uno de los campos
Exactamente esa es la solución adecuada, salvo que no tienes que pasar cada variable. Puedes pasar la clase entera
Dato=concatenar(per)
Un saludo
|
#9 Miercoles, 18 Noviembre 2009, 15:57 |
|
|
Eduardo
Usuario
Registrado: Noviembre 2009
Mensajes: 6
Edad: 70
|
Re: Registro Con Campos Definidos
Soplo
Si per es Publica , no necesitaria siquiera pasarla porque ya esta en memoria o me equivoco
|
#10 Jueves, 19 Noviembre 2009, 00:37 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|