![]() |
TList mit records - wie darin suchen?
Hallo!
Ich möchte alle User eines Chats abspeichern. Dazu verwende ich ein record und eine TList:
Delphi-Quellcode:
Und wenn ein neuer User hinzukommt, dann füge ich den in die Liste hinzu:
type
user = record ip: string; // Die IP eines anderen Users port: integer; // Der Port, den ein anderer User verwendet name: string; // Sein nick end; userpointer = ^user; ... users: TList; // Liste mit den Usern
Delphi-Quellcode:
Doch wenn der User den Chat wieder verlässt, habe ich als einzige Info seine IP.
var newuser: userpointer;
... new(newuser); newuser.ip:=a; newuser.port:=b; newuser.name:=c; users.Add(newuser); Wie kann ich in der Liste nach einem Record suchen, wenn ich nur eine Eigenschaft kenne? Tubos edit: ops...müsste doch einfach nur alle items durchgehen und nachsehen ist schon spät, kann gar nicht mehr denken *g* geht es einfacher? |
Re: TList mit records - wie darin suchen?
Hi,
Wenn du die IP zusätzlich als 4-Byte Zahl speicherst und den Vergleich damit durchführst gehtst evtl. schneller als mit String-Vergleichen (?) ![]() Guts Nächtle! :) |
Re: TList mit records - wie darin suchen?
eine Schleife machen und darin das Item von der TList auf deinen Recordpointer casten. Dann kannst du auch auf die eigenschaften zugreifen.
Delphi-Quellcode:
var Lcount: Integer;
begin for Lcount := users.count-1 downto 0 do begin if userpointer(users.items[LCount]).ip = gesuchteIP then begin dispose(users.items[LCount]); users.delete(LCount); break; end; end; end; |
Re: TList mit records - wie darin suchen?
Zitat:
Und wenn ich das als 4-Byte-Zahl speichern würde, müsste ich es ständig umwandeln wenn ich was senden will - nicht gerade die beste Lösung. [EDIT]achso, zusätzlich...das wäre eine tolle Lösung! :d Da aber der Chat nur mit maximal 5-10 Usern arbeiten wird, kann ich das vernachlässigen ;). @SirThornberry: Danke! |
Re: TList mit records - wie darin suchen?
Eine Frage noch:
wieso gibt dieser code immer -1 zurück, obwohl die ip 'a' in der Liste vorhanden ist?
Delphi-Quellcode:
Code zum testen:
function finduserip(ip: string): integer; // Gibt die Nummer des users in der "users"-Liste zurück, der die übergebene IP hat.
var i: Integer; begin for i := users.count-1 downto 0 do begin if userpointer(users.items[i]).ip = searchip then begin result:=i; break; end; end; result:=-1; // wenn nichts gefunden wurde, wird -1 zurückgegeben end;
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var u: userpointer; begin new(u); u.ip:='a'; u.name:='a'; u.port:=1; users.Add(u); new(u); u.ip:='b'; u.name:='b'; u.port:=2; users.add(u); showmessage('Nach dem Hinzufügen von 2 Items ist users.count = '+inttostr(users.Count)); showmessage('user nr. '+inttostr(finduserip('a'))+' hat die IP a.'); end; |
Re: TList mit records - wie darin suchen?
Zitat:
Delphi-Quellcode:
Gruß,
function TForm1.finduserip(searchip: string): integer; // Gibt die Nummer des users in der "users"-Liste zurück, der die übergebene IP hat.
var i: Integer; begin result:=-1; // wenn nichts gefunden wurde, wird -1 zurückgegeben for i := Users.count-1 downto 0 do begin if PUser(users.items[i]).ip = searchip then begin result:=i; break; end; end; end; Dani |
Re: TList mit records - wie darin suchen?
ooh...danke!
das mit break hatte ich übersehen :lol: |
Re: TList mit records - wie darin suchen?
oder aus dem break nen "exit" machen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr. |
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