![]() |
Sortieren, Löschen, Schreiben in Mehrdimensionalen Array
Hallo Wissende, ich habe 3 Routinen, die ich mir erstellt habe, um Inhalte eines mehrdimensionalen Array anschaulich zu machen und Inhalte zum Teil in einer Listbox anzeigen zu lassen.
Ich poste hier erstmal die 3 Routinen und schildere was mein Problem ist. Diese erste Routine soll eigentlich die leeren "Zeilen finden" und automatisch befüllte Einträge nach oben verschieben. Also wenn der 2 Eintrag(myData[0,1]) leer ist, dann ab dem 3. Eintrag(myData[0,2]) alles hochschieben...usw. Sie wird aufgerufen, wenn man dem Aray einen neuen Eintrag hinzugefügt hat, oder einen Eintrag gelöscht hat. Hier scheint sich auch ein Fehler eingeschlichen zu haben, denn wenn ich mitten im Array aus 20 Einträgen die Einträge 4 bis 13 lösche, erhalte ich später in der Ansicht nicht die Einträge 1-3 und 14-20 sondern nur 1-3.
Delphi-Quellcode:
Diese Procedure schreibt mir den Inhalt des Arrays in eine Listbox, damit ich auch was sehen kann. Funktioniert einwandfrei!
procedure TForm1.SortiereGrid;
var i, k, last :integer; begin last := -1; for i:= 999 downto 0 do if myData[0,i] > '' then begin Last := i; //letzter Eintrag break; //geht aus Schleife raus end; if last = -1 then exit; //kein Eintrag gefunden - Abbruch i := Last -1; //letzten Eintrag um einen verringern while i > 0 do //so lange, wie letzter ET > 0 begin if myData[0,i] = '' then //wenn leer beginne begin Last := Last -1; //ziehe einen ab for k := i to Last do //schleife von i bis Last begin myData[0,i]:=myData[0,i];//Gruppe[i] = Gruppe[i-1] end; myData[0,Last+1]:=''; end; i:=i-1 end; end;
Delphi-Quellcode:
Und mit folgender Routine will ich eigentlich Einträge aus dem Array löschen. Dabei gehe ich davon aus, dass die in die Listbox geschriebenen Einträge selektiert sind.
procedure TForm1.WriteList;
var i:integer; begin list_pics.Clear; for i:=0 to 999 do begin if myData[0,i] > '' then list_pics.Items.Add(myData[0,i]); //bildpfad //ShowMessage(myData[0,i]); end; end;
Delphi-Quellcode:
Ich habe schon gesucht und versucht zu debuggen, aber ich weiss einfach nicht wo der Fehler ist....Ich bin mir ziemlich sicher, dass der Fehler in der Routine SortiereGrid sein muss, aber ich kann ihn finden. Wer hilft mir bitte?
procedure TForm1.btn_del_fileClick(Sender: TObject);
var k,n:integer; begin for n:=0 to list_pics.Count-1 do begin if list_pics.Selected[n]=true then begin if chk_confirm_delete.Checked then //löschen soll bestätigt werden if MessageDlg('Soll das Bild: '+ExtractFileName(list_pics.Items.Strings[n])+' wirklich gelöscht werden?',mtConfirmation,[mbyes,mbno],0) = 6 then begin ShowMessage(myData[0,n]+chr(13)+'Zeile:'+inttostr(n)); myData[0,n]:=''; end else //ohne Löschbestätigung myData[0,n]:=''; end; end; SortiereGrid; //siehe oben WriteList; //leeren und zurückschreiben in listbox list_picsClick(sender); end; |
Re: Sortieren, Löschen, Schreiben in Mehrdimensionalen Array
Hallo Tom,
wie ist den MyData deklariert? Freundliche Grüße |
Re: Sortieren, Löschen, Schreiben in Mehrdimensionalen Array
Ciao Achim,
Delphi-Quellcode:
0..9 ist für die verschiedenen Inhalte eines Elementes
myData : Array[0..9,0..999] of String;
0...999 ist für die Anzahl der Elemente... Ich weiss, dass man das auch nachdimensionieren kann, habs aber noch nie gemacht, damir da die Erfahrung gfehlt... Ich weiss auch, dass ich beim Sortieren bisher immer nur die 0 der 0..9 berücksichtigt habe und alles entsprechend verschieben muss, aber das kann man ja später immer noch machen. Da scheint einfach nur ein Fehler in der SortierLogik zu sein... |
Re: Sortieren, Löschen, Schreiben in Mehrdimensionalen Array
Zitat:
|
Re: Sortieren, Löschen, Schreiben in Mehrdimensionalen Array
Moin alzaimar,
ja da fällt mir was auf. Und zwar dass der Inhalt von myData[0,i]:=myData[0,i]; zugewiesen wird. Aber eigentlich passiert da nicht schlimmes. Also mir ist schon klar, dass das nichts bringt. Ich habe die Routine mit einem ehemaligen Kollegen erstellt, aber leider habe ich sie nie richtig verstanden. Ich werde es versuchsweise mal mit
Delphi-Quellcode:
probieren, aber ich glaube, dass ich es schon so versucht habe. Das Problem ist einfach, dass mir das Verständnis fehlt...
myData[0,i]:=myData[0,i-1];
|
Re: Sortieren, Löschen, Schreiben in Mehrdimensionalen Array
Oh Du böser Fehlerteufel! Also ich habe mir mal wieder richtig Mühe gegeben und bin dann doch noch selbst drauf gekommen. Ist ja meistens wirklich besser, wenn man nur einen Wink bekommt.
Der Fehler lag einfach nur in der Variablen und dem Plus, was fehlte. Alt und falsch:
Delphi-Quellcode:
Neu und scheinbar richtig:
myData[0,i]:=myData[0,i];
Delphi-Quellcode:
Mit dem i konnte es doch gar nicht gehen. Naja nun habe ich auch was davon gehabt und verstehe auch die Funktionsweise dieser Routine. Merci!
myData[0,k]:=myData[0,k+1];
|
Re: Sortieren, Löschen, Schreiben in Mehrdimensionalen Array
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Tom,
Zitat:
Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz