Autor |
Beitrag |
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: 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:
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
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: 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^^
_________________ erare humanum est
|
|
Miri 
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: 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
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: 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 
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: 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
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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. |
 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.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Miri 
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: 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
|
|