Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 2 Semanas
fcios fcios is offline
Miembro
 
Registrado: Jul 2003
Posts: 103
Poder: 15
fcios Va por buen camino
Buscar en una estructura record

Hola, como puedo armar una función para que me sirva para buscar en distintas estructuras Record ?
(por lo menos no ví ninguna que lo haga)

por ejemplo tengo
Código Delphi [-]
  TProvincias = record
    Provin : string;
    Importe : currency;
    Descri   : string;
   end;

  TIvas = record
    Codigo : string;
    Descri : string;
    Porcentaje : currency;
   end;

  TaProvincias = array of TProvincias;
  TaIvas       = array of TIvas;

  // luego defino las variables
    aProvincias :  TaProvincias;
    aIvas       :  TIvas;

y acá el problema de como buscar, este es un simple ejemplo que no funciona, cualquier ayuda es bien venida
Código Delphi [-]
function BuscarEnRecord(aRecord:array of TObject; Campo:variant; Buscar:Variant):integer;
///////////////////////////////////////////////////
// aRecord = array donde buscar
// Campo  = campo del record donde buscar
// Buscar  = string o número a buscar
///////////////////////////////////////////////////
var i:integer;
begin
  for i:=0 to Length(aRecord) do begin
    if aRecord[i].Campo = Buscar then begin
      Result := i;
      Exit;
    end;
  end;
  Result := -1; // no lo encontró
end;

Muchas Gracias
Responder Con Cita
  #2  
Antiguo Hace 2 Semanas
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.983
Poder: 28
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

¿ En cuál versión de Delphi estas trabajando ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo Hace 2 Semanas
fcios fcios is offline
Miembro
 
Registrado: Jul 2003
Posts: 103
Poder: 15
fcios Va por buen camino
usando delphi 7
Responder Con Cita
  #4  
Antiguo Hace 2 Semanas
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: Oct 2010
Ubicación: Lima - Peru
Posts: 277
Poder: 8
Caminante Va camino a la fama
Cita:
Empezado por fcios Ver Mensaje
Código Delphi [-] if aRecord[i].Campo = Buscar then begin


Hola

Veo que en el parametro campo envias el nombre del campo que quieres buscar. La verdad eso no lo veo viable y no creo que alguna version de delphi la acepte.

Tal vez usando RTTI podrias acceder a cualquier campo del record pero de esa forma no lo creo.

Se que no es de ayuda pero creo que tendrias que buscar otra manera. Haber si alguien mas nos saca de la duda.

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #5  
Antiguo Hace 2 Semanas
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.983
Poder: 28
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por fcios Ver Mensaje
usando delphi 7
Por eso era mi pregunta, desde Delphi 7 no veo posible que accedas a los campos de un record.

Si fuese Delphi 2010 o una versión superior, podrías hacerlo usando RTTI como se muestra en este enlace: List the Record's element\fields

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo Hace 2 Semanas
fcios fcios is offline
Miembro
 
Registrado: Jul 2003
Posts: 103
Poder: 15
fcios Va por buen camino
y hay alguna forma de buscar siempre en el primer campo ?
Responder Con Cita
  #7  
Antiguo Hace 2 Semanas
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: Nov 2007
Posts: 1.920
Poder: 13
escafandra Va camino a la famaescafandra Va camino a la fama
Cita:
Empezado por fcios Ver Mensaje
y hay alguna forma de buscar siempre en el primer campo ?
Si sabes el tipo, si.

Mira este ejemplo:
Código Delphi [-]
type
TR = record
  UNO: integer;
  DOS: CHAR;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  V: TR;
begin
  V.UNO:= 1;
  Edit1.Text:= IntToStr(PInteger(@V)^);
end;


Saludos.
Responder Con Cita
  #8  
Antiguo Hace 1 Semana
fcios fcios is offline
Miembro
 
Registrado: Jul 2003
Posts: 103
Poder: 15
fcios Va por buen camino
Muchas gracias a todos, lo de escafandra anda ok

pero quiero poder recibir cualquier tipo record, por ejemplo
Código Delphi [-]
type
TR = record
  UNO: string; // integer;
  DOS: CHAR;
end;

TR3 = record
  campo1: string;
  DOS: CHAR;
end;

aTR   = array of TR;
aTR3 = array of TR3;

// como debo definir aRecord para poder recibir cualquier tipo de array record ?, (mi mira a los punteros está muy desviada) Muchas gracias
Código Delphi [-]

function BuscarEnRecord2(aRecord: record^; Buscar:string):integer;
///////////////////////////////////////////////////
// aRecord = array donde buscar
// Buscar  = string
///////////////////////////////////////////////////
var i:integer;
//  s:string;
begin
  for i:=0 to Length(aRecord) -1 do begin
//  s := PString(@aRecord[i])^;
//  if s = Buscar then begin
    if PString(@aRecord[i])^ = Buscar then begin
      Result := i;
      Exit;
    end;
  end;
  Result := -1; // no lo encontró
end;
Responder Con Cita
  #9  
Antiguo Hace 1 Semana
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: Nov 2007
Posts: 1.920
Poder: 13
escafandra Va camino a la famaescafandra Va camino a la fama
Lo que pretendes tiene solución con punteros, pero el primer campo de cada estructure (record) debe ser del mismo tipo, en este caso String. No nos importa como se llame, lo podemos localizar.

Basado en tu código, podemos definir el parámetro aRecord como un array de punteros. Cada puntero apuntará a un elemento de una estructura.

Código Delphi [-]
type
TR = record
  UNO: string; // integer;
  DOS: CHAR;
end;
PTR = ^TR;

TR3 = record
  campo1: string;
  DOS: CHAR;
end;

aTR   = array of TR;
aTR3 = array of TR3;
PaTR = ^aTR;

TRecods = array of pointer;
PPString = ^PString;

var
  Form1: TForm1;

implementation

{$R *.dfm}


function BuscarEnRecord2(aRecord: TRecods; Buscar:string):integer;
var i:integer;
begin
  for i:=0 to Length(aRecord) -1 do begin
    if (PPString(@aRecord[i])^)^ = Buscar then begin
      Result := i;
      Exit;
    end;
  end;
  Result := -1; // no lo encontró
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  R0,R1,R2: TR;
  PR: TRecods;
  Index: integer;
begin
  // Preparamos el array de punteros... como quieras...
  SetLength(PR, 3);
  R0.UNO:= 'Hola';
  R1.UNO:= 'Caracola';
  R2.UNO:= 'Adios';
  PR[0]:= @R0;
  PR[1]:= @R1;
  PR[2]:= @R2;

  // Buscamos
  Index:= BuscarEnRecord2(PR, 'Adios');
  if Index >= 0 then
    ShowMessage('Eureca  ' + IntToStr(Index));
end;


Saludos
Responder Con Cita
  #10  
Antiguo Hace 1 Semana
fcios fcios is offline
Miembro
 
Registrado: Jul 2003
Posts: 103
Poder: 15
fcios Va por buen camino
gracias escafandra !!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Estructura .pak JORGE13 Tablas planas 3 17-12-2010 14:13:15
Estructura BD mjjj SQL 12 14-12-2009 13:12:34
Puntero a Estructura (Record) jlrbotella OOP 2 05-03-2007 12:39:51
object pascal - buscar en un record por contenido de un edit. runnerfrog OOP 5 19-12-2006 12:31:06
Estructura de un CD david duarte Varios 4 27-10-2005 17:48:50


La franja horaria es GMT +2. Ahora son las 06:46:14.


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