Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Borrar un dato determinado de un Array. (https://www.clubdelphi.com/foros/showthread.php?t=19711)

alfredosg19 23-03-2005 10:58:44

Borrar un dato determinado de un Array.
 
Hola a todos, el problema es el siguiente: tengo un Array tipo record, el cual tiene diferentes valores entre ellos tiene uno que se llama Array[x].Activa (esta de tipo Boolean), y quiero que cuando el resultado sea false se borre el Array. Gracias por vuestra ayuda.

marto 23-03-2005 12:55:29

Wop!

No entiendo tu pregunta... ¿te refieres a como detectar los valores que valen true? ¿A que cuando se ponga a true se borre? ¿Puedes explicarte un poco mejor?

alfredosg19 23-03-2005 16:52:40

Borrar valor Array.
 
Hola, seré un poco más conciso. El hecho es que quiero borrar el Valor de una array TRecord sabiendo un valor del TRecor (:confused: como lo explico??). Un poco de código me ayudará a explicarlo. El Array Trecord.

Cita:

type
TDades = Record
Dia: String[10];
Horari: String[10];
Hora: String[10];
Activa: Boolean;
Numero: integer;
end;
Los datos se graban en el array mediante un checbox, por medio de la función omple.
Cita:

if cb8a9.Checked=True then
Begin
botopremut[filas]:=cb8a9.Caption;
omple;
dibuixa;
end
else
Begin
filas:=filas-1;
dibuixa;
end;
end;
Y el procedimiento omple:
Cita:

begin
setlength(Dades,Length(Dades)+1);
Dades[High(Dades)].Dia:=rgDies.Items[rgDies.ItemIndex];
Dades[High(Dades)].Horari:=rgThorari.Items[rgThorari.ItemIndex];
Dades[High(Dades)].Hora:=botopremut[high(Dades)];
Dades[High(Dades)].Activa:=True;
Dades[High(Dades)].Numero:=filas;
filas:=filas+1;
end;
Se trata de borrar el valor del array si coincide con el valor del Checkbox (si está False) y añadirlo si está True (eso ya lo hace).

Muchas gracias por vuestro ayuda. Gracias.:D

erick78 23-03-2005 20:13:06

Yo creo que deberias usar un Tlist en el cual almacenes, modifiques, elimines los registros

Héctor Randolph 24-03-2005 09:18:10

Hola alfredo!

Es verdad que si utilzas TList te ahorras mucho trabajo, tal vez te convenga más esa opción. Por otra parte cuando he trabajado con arreglos de tipo record y es necesario borrar algún elemento intermedio, lo que se me ha ocurrido es lo siguiente:

Se crea una versión temporal en memoria del arreglo y en el se van insertando sólo los elementos que contengan el valor 'Active=True'. Al final reemplazas el arreglo original por el que se ha creado temporalmente y en esta nueva versión los registros con 'Active=False' han sido omitidos o eliminados.

Bueno, espero que sea útil y seguimos en contacto

alfredosg19 24-03-2005 10:05:17

Ufff, solución: borrar dato array.
 
Hola y gracias por vuestras aportaciones, la solución final a todo este problema es este:

1. Primero hago un procedimiento que me compara el botón (que ya le introduciré posteriormente) por lo que me escribe en el Array con los datos del Array. Primero recorro el Array en busca del texto, cuando lo encuentro
lo que quiero es que me sobreescriba los valores para hacer desaparecer el valor que ya no quiero, y finalmente le borro un registro al Array.

Código:

Procedure TPagesDlg.busca(Boto: String);
 var a,i:integer;
 begin
 For i:=low(Dades) to high(dades) do
  if Dades[i].Hora=Boto then
        Begin
          For a:=i to High(Dades) do
                Begin
                  Dades[a].Hora:=Dades[a+1].Hora;
                  Dades[a].Dia:=Dades[a+1].Dia;
                  Dades[a].Horari:=Dades[a+1].Hora;
                  Dades[a].Activa:=Dades[a+1].Activa;
                  Dades[a].Numero:=Dades[a+1].Numero;
                end;
        end;
  SetLength(Dades,Length(Dades)-1);
 end;

2. Después sólo me queda redibujar el StringGrid y ordenarlo con otra rutina. Bueno no sé si lo he explicado bien, pero si alguien encuentra este hilo y tiene alguna duda o necesita ayuda que se ponga en contacto conmigo.:D


La franja horaria es GMT +2. Ahora son las 07:49:08.

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