![]() |
Re: tstringlist probleme mit find/indexof..
Delphi-Quellcode:
das würde gehen aber ich nur einen eintrag, klar weil ich keinen loop habe
IF VehicleTypeKey.IndexOf('pkw') <> -1 then
begin fmaddcars.cbFahrzeugart.Items.Add(VehicleTypeDe.Strings[VehicleTypeKey.IndexOf('pkw')]); end; aber wie kann ich sagen, loop mir solange wie ich den eintrag pkw habe ? |
Re: tstringlist probleme mit find/indexof..
Ist dir bewusst, dass IndexOf case-sensitiv sucht und somit keinen "Audi" in der StringListe findet, obwohl ein "audi" in dieser enthalten ist?
|
Re: tstringlist probleme mit find/indexof..
den Eintrag 'pkw' wirst Du über .find finden:
Siehe mal in die Hilfe:
Delphi-Quellcode:
Insbesondere der Abschnitt ist für Dich interessant:
Zu diesem Beispiel gehören eine Liste und eine Beschriftung (Label). Nach dem Start der Anwendung wird eine Stringliste erzeugt und mit drei Strings gefüllt. Die Methode Find durchsucht die Strings nach dem Vorkommen des Strings 'Blumen'. Wenn dieser String gefunden werden kann, wird die komplette Stringliste in das Listenfeld eingefügt, und der Indexwert von 'Blumen' erscheint als Beschriftungstext.
procedure TForm1.FormCreate(Sender: TObject); var MyList: TStringList; Index: Integer; begin MyList := TStringList.Create; try MyList.Add('Animals'); MyList.Add('Flowers'); MyList.Add('Cars'); MyList.Sort; { Find funktioniert nur für sortierte Listen! } if MyList.Find('Flowers', Index) then begin ListBox1.Items.AddStrings(MyList); Label1.Caption := 'Flowers has an index value of ' + IntToStr(Index); end; finally MyList.Free; end; end;
Delphi-Quellcode:
Jetzt müsstet Du es aber schaffen...
MyList.Sort; { Find funktioniert nur für sortierte Listen! }
if MyList.Find('Flowers', Index) then begin ListBox1.Items.AddStrings(MyList); Label1.Caption := 'Flowers has an index value of ' + IntToStr(Index); end; |
Re: tstringlist probleme mit find/indexof..
wenn es eine stringliste ist kann man auch alternativ
die liste auf sorted stellen, dann dublicates auf delete setzen. dann immer einträge hinzufügen. doppelte werden weggeworfen.
Delphi-Quellcode:
sl.Sorted:=true;
sl.Duplicates:=dupIgnore; |
Re: tstringlist probleme mit find/indexof..
Hi,
warum genau scheidet denn der von Heiko gepostete Weg aus? Ich denke der ist für dich hier immer noch der geeignetste. Zwei verschiedene Listen über den Index konsistent zu halten ist keine schöne Möglichkeit. Um nochmal auf den Weg von Hoika zurückzukommen: Du erstellst dir eine eigene Klasse und arbeitest mit einer TObjectList. Deine Klasse kapselt dabei alle Eigenschaften des Fahrzeugs, die TObjectList kann dann die einzelnen Instanzen speichern.
Delphi-Quellcode:
Ok, das wäre nur das Beispiel wie deine Auto Klasse aussehen könnte. Wie man eine Instanz der Klasse erzeugt denke ich ist dir klar. Alle Autos die du erzeugst speicherst du einfach in einer TObjectList. Möchtest du nun aus dieser TObjectlist alle Autos, die ein PKW sind, dann kannst du das einfach so machen:
type
TAutor = class(TObject) private FVehicleTypeDe : String; FVehicleTypeKey : String; protected procedure setVehicleTypeDe(const VehicleTypeDe : String); procedure setVehicleTypeKey(const VehicleTypeKey : String); public constructor create(const VehicleTypeDe, VehicleTypeDe : String); property VehicleTypeDe : String read FVehicleTypeDe write setVehicleTypeDe; property VehicleTypeKey : String read FVehicleTypeKey write setVehicleTypeKey; end; ... constructor TAuto.create(const VehicleTypeDe, VehicleTypeDe : String); begin self.VehicleTypeDe := VehicleTypeDe; self.VehicleTypeKey := VehicleTypeKey; end; procedure TAuto.setVehicleTypeDe(const VehicleTypeDe : String); begin self.FVehicleTypeDe := VehicleTypeDe; end; procedure TAuto.setVehicleTypeKey(const VehicleTypeKey : String); begin self.FVehicleTypeKey := VehicleTypeKey; end;
Delphi-Quellcode:
Schöner ist es allerdings, wenn du den TypeKey durch etwas anderes als einen String ersetzt. Du kannst z.B. einen eigenen Typen einführen:
procedure PkwsToCombobox(const ComboBox : TComboBox; const List : TObjectList);
var i : Integer; begin if List.Count > 0 then begin for i := 0 to List.Count - 1 do begin if TAuto(List[i]).VehicleTypeKey = 'pkw' then begin ComboBox.Items.Add(TAuto(List[i]).VehicleTypeDe; end; // if TAuto(List[i]).VehicleTypeKey = 'pkw' end; // for i := 0 to List.Count - 1 end; // if List.Count > 0 end;
Delphi-Quellcode:
Dann kommt es einfach nicht mehr auf Groß- und Kleinschreibung an und du es entfällt auch der Overhead der Arbeit mit Strings.
type
TypeKey = (tkPkw, tkLwk, tkMotorad, ...); Gruß Der Unwissende |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 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