[Lazarus-es] buscar valor en array de record

José Mejuto joshyfun en gmail.com
Lun Mayo 24 22:48:41 CEST 2010


Hello Paola,

Monday, May 24, 2010, 9:19:54 PM, you wrote:

PB> Hola a todos..
PB> Tengo datos cargados en un stringlist (código art, desc, cantidad). En
PB> ese stringlist pueden haber códigos de artócilos repetidos..
PB> Lo que quiero hacer es juntar todos los códigos repetidos, actualizando
PB> el valor de "cant"
PB> Mi idea es ir recorriendo el stringlist e ir cargando los renglones en
PB> un array (c/elemento es un tipo record), pero antes de cargar nada,
PB> quiero buscar en ese array por si existe el codigo. En caso de que
PB> exista, modificar la cantidad, sino, agregar un nuevo valor.
PB> En otros lenguajes tengo funciones de búsqueda en arrays (como este, que
PB> sería como uno multidimensional), pero acá se me está complicando :)
PB> QUizás me sugieran algunas otras funciones que desconozco

A lo "rápido" y en pseudo código:

StringList.Sort;
j:=0;
while j<StringList.Count-1 do begin
  k:=j;
  while k<StringList.Count-2 do begin
    Clave1:=ExtraeClave(StringList[k]);
    Clave2:=ExtraeClave(StringList[k+1]);
    if Clave1=Clave2 then begin
       ActualizaCantidad(StringList[k],Cantidad(StringList[k])+Cantidad(StringList[k+1]));
       inc(k);
    end else begin
       Break;
    end;
  end;
end;

Lo más fácil es que extraigas todos los datos (después del sort) a un
array dinámico de un record con todos los campos, así te evitas las
funciones extraeClave, ActualizaCantidad,....

-- 
Best regards,
 José





More information about the Lazarus-es mailing list