Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Funktion('string').membervar (https://www.delphipraxis.net/33627-funktion-string-membervar.html)

Pseudemys Nelsoni 10. Nov 2004 12:59


Funktion('string').membervar
 
moin,

siehe topic, kann ich sowas irgendwie hinbekommen? ich möchte das der teil: "funktion('irgendeinstring')" den rekord zurückgibt wo die membervariable "irgendeinstring" ist und dann halt mit .membervar weiterarbeiten. schwer zu erklären was ich meine aber vielleicht verstehts ja jemand. ich machs mal "bildlicher" *g*

sagen wir mal ich habe folgendes:

Delphi-Quellcode:
type
  TMeinRekord = record
    name: string;
    nickname: string;
  end;

var
  MeinRekordArray: array[0..9] of TMeinRekord;

...

procedure irgendwas;
begin
  EineFunktion('peter').nickname
end;

ich möchte also das mir "einefunktion" den passenden (anhand des namens) rekord liefert und möchte dann dessen nickname bekommen...

wie mach ich das? das mit einer schleife gesucht werden muss ist mir klar, ich weiss nur nicht wie ich die funktion dann mit ".nickname" verbinde

Bernhard Geyer 10. Nov 2004 13:08

Re: Funktion('string').membervar
 
Delphi-Quellcode:
procedure EineFunktion(SearchName: String): TMeinRekord;
begin
  ...
  ...
  result := MeinRekordArray[i];
end;
Das Problem ist jedoch, das du eine Kopie deines Records bekommst.

choose 10. Nov 2004 13:09

Re: Funktion('string').membervar
 
Hallo Pseudemys Nelsoni,

so sollte es i.A. klappen:
Delphi-Quellcode:
function GetRecordFromArrayThatMatchtesCriteria(const ACriteria: TCriteria): TMyRecord;
var
  i: Integer;
begin
  for i := Low(AnArray) to High(AnArray) do
    if RecordsMatchesCriteria(AnArray[i], ACriteria) then
    begin
      Result := AnArray[i];
      Exit;
    end;
   
  // no record found
  raise ERecordNotFound.Create('No suitable record found', ACriteria);
end;

Ultimator 10. Nov 2004 13:12

Re: Funktion('string').membervar
 
@ Bernhard Geyer:
Das geht nicht, so wie ich deinen Quelltext sehe. Bei Prozeduren kannst du kein Result zurückgeben, dazu musst du eine Funktion definieren ;-)

jim_raynor 10. Nov 2004 13:16

Re: Funktion('string').membervar
 
Nur mal so für mich :shock:

Was denn TCriteria und RecordsMatchesCriteria. Das kenn ich ja noch garnicht. War das nur als Beispiel gedacht, oder gibts das wirklich?

Pseudemys Nelsoni 10. Nov 2004 13:22

Re: Funktion('string').membervar
 
moin, danke für die antwort :)

choose 10. Nov 2004 13:28

Re: Funktion('string').membervar
 
Zitat:

Zitat von jim_raynor
TCriteria und RecordsMatchesCriteria [..] gibts das wirklich?

Selbstverständlich sind diese Dinge durch konkrete Implementierungen zu ersetzen (obleich eine generische Routine mit etwas Mehraufwand ebenfalls erstellbar ist) und dienen zur Verdeutlichung eines möglichen Lösungsweges, ohne auf Details eingehen zu müssen.

himitsu 10. Nov 2004 14:07

Re: Funktion('string').membervar
 
und was spricht gegen dein einfachen und bewährten Weg?
Delphi-Quellcode:
type
  TMeinRekord = record
    name: string;
    nickname: string;
  end;

var
  MeinRekordArray: array[0..9] of TMeinRekord;

function EineFunktion(s: string): TMeinRekord;
...

function EineFunktion_nickname(s: string): string;
begin
  result := EineFunktion(s).nickname;
end;

...

procedure irgendwas;
begin
  EineFunktion_nickname('peter')
end;

choose 10. Nov 2004 14:14

Re: Funktion('string').membervar
 
Ich kann auf den ersten Blick keinen Vorteil bei Deinem Ansatz erkennen, himitsu. Die Daten stehen weiterhin nur als Kopie zur Verfügung, es ist mehr Aufwand (zur Entwicklung sowie geringfügig zur Laufzeit) und bei einer Änderung der Struktur des Records oder Änderung der Bezeichnungen ist es erforderlich, die Zugriffsfunktionen anzupassen...

Übersehe ich etwas? Wo hat sich diese Art des Zugriffs bisher bewährt? :gruebel:

Pseudemys Nelsoni 10. Nov 2004 14:21

Re: Funktion('string').membervar
 
hm, das stimmt, das es ne kopie ist ist doof, das bringt mir recht wenig.... könnte ich einen pointer verwenden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 Uhr.
Seite 1 von 2  1 2      

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