Autor Beitrag
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Sa 09.06.07 19:06 
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:

ausblenden 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

_________________
Anonymes Eckenkind
Robinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: Sa 09.06.07 19:09 
Hi,

ausblenden 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^^

_________________
erare humanum est
Miri Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Sa 09.06.07 19:11 
Nein, ich will nicht in allen gleichzeitig suchen, sondern immer nur in einem. Aber nicht immer im selben.

_________________
Anonymes Eckenkind
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: 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...

_________________
Anonymes Eckenkind
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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 Suche in: Delphi-Forum, Delphi-Library POINTER TUTORIAL, da dürftest du fündig werden.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 10.06.07 13:43 
Moin!

user profile iconJayEff 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Miri Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: 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... ;-)

_________________
Anonymes Eckenkind