Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Recordfeld als Parameter übergeben?
Miri - Sa 09.06.07 19:06
Titel: Recordfeld als Parameter übergeben?
Hi zusammen...
wahrscheinlich ist mein Hirn bei der Hitze heute weggeschmolzen, aber ich stehe total auf dem Schlauch. Ich weiß auch nicht so richtig, nach was ich suchen soll, vielleicht fehlen mir einfach die richtigen Worte, mit denen ich die Suche füttern müsste um was zu finden.
Also: ich habe ein Array of Record und will in den einzelnen Recordfeldern nach bestimmten Daten suchen.
Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| TMyRecord = record Feld1 : string; Feld2 : integer; Feld3 : string; end;
MyRecordArray : array of TMyRecord;
procedure TForm1.BTN_SuchenClick(Sender: TObject); var i : integer; begin j := 0; for i := 0 to length(MyRecordArray) - 1 do if pos('SuchText', MyRecordArray[i].Feld1) > 0 then showMessage('Gefunden!'); end; |
Nu will ich das aber nicht für Feld2 und Feld3 nochmal schreiben... lässt sich das irgendwie anders lösen? Z.B. indem man der Suchen-Prozedur das Feld, in dem man suchen will, als Parameter übergibt? Oder sonst wie? (Wie ist mir an sich egal *g*, war nur so ne Idee...)
Gruß,
Miri
Robinator - Sa 09.06.07 19:09
Hi,
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.BTN_SuchenClick(Sender: TObject); var i : integer; begin j := 0; for i := 0 to length(MyRecordArray) - 1 do if pos('SuchText', MyRecordArray[i].Feld1 + MyRecordArray[i].Feld2 + MyRecordArray[i].Feld2 ) > 0 then showMessage('Gefunden!'); end; |
meinst du das in etwa so?
//edit ich glaube nicht^^
Miri - Sa 09.06.07 19:11
Nein, ich will nicht in allen gleichzeitig suchen, sondern immer nur in einem. Aber nicht immer im selben.
JayEff - Sa 09.06.07 19:30
Äh .. Du .. Hm. Willst du einfach nur unterscheiden können, in welchem Feld der Suchstring gefunden wurde? Dann wirst du wohl 2 verschachtelte Schleifen brauchen, eine von low(Array) bis High(array) und darin eine von 0 bis 2. In diese kommt ein case CounterDerInnerenSchleife of 1: In Feld1 suchen; 2: In Feld2 suchen; 3: In Feld3 suchen; end;
Ich würde ein weiteres dynamisches Array einführen, in das du dann während des Schleifendurchlaufes die Suchergebnisse einträgst, falls nötig.
Soviel mal zum Konzept :|
Allerdings weiß ich nicht, ob ich dich richtig verstanden hab :)
Miri - Sa 09.06.07 20:05
Die innere Schleife werde ich nicht brauchen, da ich ja nur in einem Feld suchen will, nicht in allen nacheinander.
Aber das mit dem case wäre ne Maßnahme, dass ich als Parameter einfach ne Zahl eingebe und dann danach entscheide, in welchem Feld gesucht wird... ich hätte halt gehofft, dass man irgendwie um die Abfrage herumkommt, z.B. in dem man z.B. ne Variable Suchfeld hat, die dann den Wert 'Feld1' gesetzt bekommt und ich dann auf MyRecordArray[i].Suchfeld oder so zugreifen kann. Oder ob man die Recordfelder irgendwie über Indizes ansprechen kann, oder so...
JayEff - Sa 09.06.07 20:09
Ich schätze, du könntest mit Pointern arbeiten. Du würdest also einen Pointer auf das Feld, das durchsucht werden soll, zeigen lassen, und es dann durchsuchen. Wie das ganze funktioniert, kann ich dir nicht erklären, dazu versteh ich selbst zu wenig davon ;) Aber such mal nach
POINTER TUTORIAL, da dürftest du fündig werden.
Narses - So 10.06.07 13:43
Moin!
JayEff hat folgendes geschrieben: |
Ich schätze, du könntest mit Pointern arbeiten. Du würdest also einen Pointer auf das Feld, das durchsucht werden soll, zeigen lassen, und es dann durchsuchen. |
:? :gruebel: Also, AFAIK wird das auch mit einem Pointer nix, du bräuchtest ja einen Offset in der Record-Struktur, nicht einen Zeiger auf ein Datenelement... :?:
Alternativen aus meiner Sicht:
a) statt record eine Klasse nehmen,
b) mit case arbeiten.
:idea:
cu
Narses
Miri - So 10.06.07 15:52
Danke für die Antworten. Hab's jetzt mit case gelöst, alles andere wäre mir jetzt zu umständlich geworden... ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!