Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2005
aram2r aram2r is offline
Miembro
 
Registrado: ene 2004
Posts: 81
Poder: 21
aram2r Va por buen camino
problema con un array de tipos

Hola tengo una laguna mental y me he bloqueado en algo como esto:
me creo un tipo 'Tfichero':
Código:
type TFichero = record
  Nombre, Ruta, Fecha, tamanyo : String;
end;
creo un array de ese tipo:

Código:
Ficheros: Array of TFichero
ahora que es lo que me falta??????????? como inicializo mi array para acceder de la siguiente forma:
Código:
Ficheros[0].Nombre:='Pepe.txt'
Ficheros[0].Ruta:='c:\'
Ficheros[0].Fecha:='10/10/05'
Ficheros[0].Tamanyo:='1024'

Ficheros[1].Nombre:='Juan.txt'
Ficheros[1].Ruta:='c:\'
Ficheros[1].Fecha:='10/10/05'
Ficheros[1].Tamanyo:='1024'

etc......
como hago para que esto funcione?????

Gracias
Responder Con Cita
  #2  
Antiguo 07-06-2005
jam jam is offline
Miembro
 
Registrado: may 2003
Posts: 74
Poder: 21
jam Va por buen camino
utiliza:
Código:
setlength(ficheros, numeroelementos)
for i:=low(ficheros) to hight(ficheros) do
  begin
    ...
    Ficheros[i].Nombre:=var_nombre;
    Ficheros[i].Ruta:=var_ruta;
    Ficheros[i].Fecha:=var_fecha;
    Ficheros[i].Tamanyo:=vartamanyo;
    ...
  end
Responder Con Cita
  #3  
Antiguo 07-06-2005
aram2r aram2r is offline
Miembro
 
Registrado: ene 2004
Posts: 81
Poder: 21
aram2r Va por buen camino
muxas gracias pero, algo mas...

1- No se los ficheros que voy ha almacenar aunque bueno eso no es muy importante...pero como puedo saber el limite de memoria que puedo reservar...de momento el limite en mi equipo es alrededor de 70millones pero si lo llevo a otro equipo con menos Ram me dará error...

2- Ese SetLength, luego no tendre que liberarlo de algun modo o simplemente cuando cierre la aplicacion se libera???

3- Como puedo implementar un Count o algo parecido como por ejemplo el Lines.Count para saber cuantos elementos tengo rellenados

como se definen metodos y funciones ???
Código:
type TFichero = record
  Nombre, Ruta, Fecha, tamanyo : String;
  procedure HHHH();  //......Asi da error...
end;
Muxas gracias con que me des una horientacion me vendria de fabula
Responder Con Cita
  #4  
Antiguo 07-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Cita:
Empezado por aram2r
1- No se los ficheros que voy ha almacenar aunque bueno eso no es muy importante...pero como puedo saber el limite de memoria que puedo reservar...de momento el limite en mi equipo es alrededor de 70millones pero si lo llevo a otro equipo con menos Ram me dará error...
dado que ya estas usando una arreglo dinámico, sugiero que no te preocupes por esto. Crea los elementos bajo demanda, y veo dificil que topes la memoria del ordenador, tomando en cuenta que el sistema operativo seguramente ofrezca el uso automático de memoria virtual en caso se agote la RAM.

Cita:
Empezado por aram2r
2- Ese SetLength, luego no tendre que liberarlo de algun modo o simplemente cuando cierre la aplicacion se libera???
Si queres liberarlo explicitamente, hacé un
Código Delphi [-]
SetLength(MiArreglo, 0);

Si no lo haces, la liberación de memoria será automática al cerrarse el programa.

Cita:
Empezado por aram2r
3- Como puedo implementar un Count o algo parecido como por ejemplo el Lines.Count para saber cuantos elementos tengo rellenados
Código Delphi [-]
  Elementos := high(Ficheros)+ 1;

Cita:
Empezado por aram2r
como se definen metodos y funciones ???
Un registro no puede tener métodos y funciones. Si queres que los tenga, estas hablando entonces de una clase, cuya declaración va mas o menos asi:

Código Delphi [-]
  TFichero = class(TObject)
    private
      FNombre : String;
      Procedure SetNombre(Value : String);
    protected
    public
      constructor Create;
      destructor destroy; override;
      Procedure hhhh; // así no da error!
    published
      Property Nombre : String read FNombre write SetNombre;
  end;

En todo caso, te recomiendo la lectura de algún libro o tutorial de introducción a la Programación Orientada a Objetos en Delphi.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 07-06-2005 a las 17:02:39.
Responder Con Cita
  #5  
Antiguo 07-06-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Un detalle importante, es el de saber cuantos elementos ir almacenando.

Es cierto que puedes ir reservando espacio a demanda haciendo:

Código Delphi [-]
SetLength(ficheros, numeroelementos+1)

Pero el gran problema surge cuando el número comienza a crecer, dado que comienza a comsumir mayor cantidad de tiempo, debido a la reorganización en memoria del arreglo.

Para solucionarlo, sabiendo que vas a necesitar muchos elementos, pides muchos mas:

Código Delphi [-]
SetLength(ficheros, numeroelementos+10000)

10000 es sólo un ejemplo.

Si necesitas más vas agregando de a 10.000, una ves completado vuelves a redimensionar, para eliminar los sobrantes

Código Delphi [-]
SetLength(ficheros, numerostomados)

Recuerdo que esto sólo es necesario, cuendo se requieren procesos rápidos, por ejemplo de agregar más de 1000 datos por segundo, sino el tiempo consumido no es tan importante.
__________________
[Crandel]
Responder Con Cita
  #6  
Antiguo 08-06-2005
aram2r aram2r is offline
Miembro
 
Registrado: ene 2004
Posts: 81
Poder: 21
aram2r Va por buen camino
Gracias por vuestra ayuda

Esto marcha de lujo....muxas gracias...y exare un vistazo a algun libro de orientacion a objetos ya que lo tengo bastante olvidado.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:51:27.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi