Registro Con Campos Definidos


Ir a la página 1, 2  Siguiente

Objetivo: 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

Perfil MP  
Objetivo: Re: Registro Con Campos Definidos
Un error y la respuesta de abajo se me duplica... excuse me.

última edición por shordi el Martes, 17 Noviembre 2009, 18:05; editado 1 vez
Perfil MP  
Objetivo: 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:

PUBLIC nombre as string
PUBLIC apellido as string


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.

última edición por shordi el Martes, 17 Noviembre 2009, 18:04; editado 1 vez
Perfil MP  
Objetivo: Re: Registro Con Campos Definidos
Eduardo escribió: [Ver mensaje]


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.

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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.

Perfil MP  
Objetivo: 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.

Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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)

Private function Concatenar(P as Per) as string
Dim S as string
s=p.nombre & " " & p.apellido
return s
endif


Un saludo

Perfil MP  
Objetivo: Re: Registro Con Campos Definidos
Soplo

Si per es Publica , no necesitaria siquiera pasarla porque ya esta en memoria o me equivoco

Perfil MP  
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.5341s (PHP: -37% SQL: 137%)
Consultas SQL: 25 - Debug off - GZIP Activado