AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Item aus einem Record als Parameter einer Prozedur?
Thema durchsuchen
Ansicht
Themen-Optionen

Item aus einem Record als Parameter einer Prozedur?

Ein Thema von aurikel_Max · begonnen am 20. Aug 2010 · letzter Beitrag vom 21. Aug 2010
Antwort Antwort
Seite 1 von 2  1 2      
aurikel_Max

Registriert seit: 9. Okt 2009
86 Beiträge
 
#1

Item aus einem Record als Parameter einer Prozedur?

  Alt 20. Aug 2010, 17:41
Guten Abend DP,

leider muss ich nochmal stören, da ich erneut auf ein Problem gestoßen bin.
Ich habe eine Klasse, die als privates Attribut ein dynamisches Array of TPerson (Name: "index") hat. Das Record (TPerson) hat Items mit den Datentypen Integer, Real & String. Das Record möchte ich nun zB. nach dem Namen sortieren. Dafür habe ich gerade eine Prozedur geschrieben, die das erledigt. Nun verfügt mein Record aber auch zB. über das Item Stadt - wie kann ich meine Prozedur nun so umschreiben, dass sie je nach Parameter nach etwas anderem sortiert.
Die Prozedur sieht so aus (wahrs. kennt ihr bessere Varianten, aber diese hab ich selbst (und wahrscheinlich auch tausende Andere vor mir) "selbst" erarbeitet):

Delphi-Quellcode:
procedure TBlub.sortByName();
var
  i, j, k: Integer;
  temp: TPerson;
begin
  for i := 1 to Length(index) - 1 do
  begin
    j := i;
    while not (j = 0) do
    begin
      if Length(index[j - 1].Name) > Length(index[j].Name) then
      begin // der kleinere String (von der Länge her) nach vorne
        temp := index[j];
        index[j] := index[j - 1];
        index[j - 1] := temp;
      end;
      for k := 1 to Min(Length(index[j - 1].Name), Length(index[j].Name)) do
      begin
        if ord(index[j].Name[k]) < ord(index[j - 1].Name[k]) then
        begin
          temp := index[j];
          index[j] := index[j - 1];
          index[j - 1] := temp;
          break
        end
        else if ord(index[j].Name[k]) = ord(index[j - 1].Name[k]) then
          Continue
        else
          break;
      end;
      Dec(j);
    end;
  end;
end;
Natürlich könnte ich die Prozedur kopieren, in "sortByStadt" umbennen und "Name" durch "Stadt" ersetzen, doch dabei würde ich ja nichts lernen.
Also eig. ist die Frage dieses Threads: Wie kann ich die Prozedur so abstrahieren, dass ich als Parameter zB. "Name" angeben kann und dann das Array nach "Name" hin sortiert wird.

Liebe Grüße,
Max
Max
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Item aus einem Record als Parameter einer Prozedur?

  Alt 20. Aug 2010, 18:17
So einfach gar nicht. Da müsste man tief in die RTTI-Trickkiste greifen
Markus Kinzler
  Mit Zitat antworten Zitat
aurikel_Max

Registriert seit: 9. Okt 2009
86 Beiträge
 
#3

AW: Item aus einem Record als Parameter einer Prozedur?

  Alt 20. Aug 2010, 18:33
So einfach gar nicht. Da müsste man tief in die RTTI-Trickkiste greifen
Okay, also lieber für jedes Item eine eigene Prozedur?
Max
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Item aus einem Record als Parameter einer Prozedur?

  Alt 20. Aug 2010, 18:34
mh.. Währe es nicht sinnvoll, wenn er seiner Procedure ein Parameter mit übergibt? Mal so als Idee
Delphi-Quellcode:
sortBy(Name);
sortBy(Stadt);
und inerhalb seiner Procedure
Delphi-Quellcode:
if Length(index[j - 1].Name) > Length(index[j].Name) then
if Length(index[j - 1].Stadt) > Length(index[j].Stadt) then
Anstatt nun Name, Stadt müsste dafür ebend der Parameter hin!

Müsste zwar erst selbst überlegen wie es umzusetzen ist, aber machbar währe es schon oder?

gruss alfold

Geändert von alfold (20. Aug 2010 um 18:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Item aus einem Record als Parameter einer Prozedur?

  Alt 20. Aug 2010, 18:40
Wie willst Du aber einen Parameter auf ein Recordfeld abbilden?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Item aus einem Record als Parameter einer Prozedur?

  Alt 20. Aug 2010, 18:51
mhh... das ist ja der Pferdefuss dabei :grübel:
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#7

AW: Item aus einem Record als Parameter einer Prozedur?

  Alt 20. Aug 2010, 18:58
du könntest innerhalb einer weiteren Prozedur entscheiden lassen, welcher Wert zurückgegeben wird. Da es sich hier aber wohl um verschiedene Typen handelt, wird es schwer, nur eine Prozedur zum sortieren zu verwenden. Ich finde es wesentlich einfacher, hier für jedes Feld, wie Delphi-intern auch, nur eine Vergleichsprozedur anzulegen und das QuickSort in der Hauptprozedur auszuführen.

Ich hoffe du verstehst das so. Wenn nicht, schau dir mal an, wie TList das Sortieren handhabt.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
aurikel_Max

Registriert seit: 9. Okt 2009
86 Beiträge
 
#8

AW: Item aus einem Record als Parameter einer Prozedur?

  Alt 20. Aug 2010, 19:08
du könntest innerhalb einer weiteren Prozedur entscheiden lassen, welcher Wert zurückgegeben wird. Da es sich hier aber wohl um verschiedene Typen handelt, wird es schwer, nur eine Prozedur zum sortieren zu verwenden.
Bernhard
Ich hoffe, ich verstehe dich nun nicht falsch, aber hab ich nicht die gleichen Typen, bei zB. Stadt (String) und Name (String)?
Ich hab verschiedene Prozeduren für Strings, Integers und Reals.
Max
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Item aus einem Record als Parameter einer Prozedur?

  Alt 20. Aug 2010, 19:17
Er meint es in etwa so:
Delphi-Quellcode:
procedure TBlub.sortBy( what: string);
begin
    if UpperCase(what) = 'NAMEthen sortByName;
    if UpperCase(what) = 'STADTthen sortByStadt;
...
Markus Kinzler
  Mit Zitat antworten Zitat
aurikel_Max

Registriert seit: 9. Okt 2009
86 Beiträge
 
#10

AW: Item aus einem Record als Parameter einer Prozedur?

  Alt 20. Aug 2010, 19:20
Er meint es in etwa so:
Delphi-Quellcode:
procedure TBlub.sortBy( what: string);
begin
    if UpperCase(what) = 'NAMEthen sortByName;
    if UpperCase(what) = 'STADTthen sortByStadt;
...
Ah .. ich verstehe, Danke. Nun, ich werd mir nun mal etwas beim Star Trek Enterprise schauen überlegen.

Schönen Abend noch.
Max
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz