Ver Mensaje Individual
  #9  
Antiguo 12-04-2018
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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