Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MyList.ValueFromIndex[index] (https://www.delphipraxis.net/92175-mylist-valuefromindex%5Bindex%5D.html)

Steven2 15. Mai 2007 18:41


MyList.ValueFromIndex[index]
 
Hallo,

Mit dem Delphi-Quellcode: kann tippe ich eine Postleitzahl in ein Edit ein und bekomme in einem anderen Edit den dazugehörigen Ort angezeigt

Da ich heute erfahren habe das eine Postleitzahl auch für verschiedene Orte gültig sein kann.
Z.B.

Zitat:

21385;Amelinghausen
21385;Oldendorf
21385;Rehlingen
Ich würde gerne wenn eine PLZ für mehrere Orte gültig ist diese Orte in einer Combobox darstellen, wie muss ich das machen?
Delphi-Quellcode:
 combobox1,items.add(Trim(MyList.ValueFromIndex[index]));
funktioniert nicht



Delphi-Quellcode:
...
  private
    { Private declarations } 
    MyList: THashedStringList;
  public
    { Public declarations } 
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm} 

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyList := THashedStringList.Create;
  MyList.LoadFromFile( 
    ExtractFilePath(Application.ExeName) + 'plzDat.txt');
    MyList.NameValueSeparator := ';';
...
end;

//--angepasste proc von ACE-ppc:
procedure TForm1.Button8Click(Sender: TObject);
var
  Index: Integer;
begin
    index := MyList.IndexOfName(PlzEdit.Text + ' ');
    If index > -1 Then
    OrtEdit.Text := Trim(MyList.ValueFromIndex[index]);
end;

//--jetzte erst die Liste freigeben
procedure TForm1.FormDestroy(Sender: TObject);
begin
...
   MyList.Free;
...
end;

marabu 15. Mai 2007 19:24

Re: MyList.ValueFromIndex[index]
 
Hallo Steven,

bei einer assoziativen Liste gehst du von der Eindeutigkeit des Zugriffsschlüssels aus. Wenn du dein Datenformat etwas modifizierst, dann kannst du recht einfach zum Ziel kommen:

Code:
21385=Amelinghausen,Oldendorf,Rehlingen
Delphi-Quellcode:
combobox.items.CommaText := MyList.ValueFromIndex[index]; // wie auch immer index ermittelt wurde
Grüße vom marabu

capo 15. Mai 2007 21:35

Re: MyList.ValueFromIndex[index]
 
Das finde ich auch interessant...danke

Steven2 15. Mai 2007 23:25

Re: MyList.ValueFromIndex[index]
 
Danke. das isses. :xmas:
Eine Frage noch, ist es möglich direkt das erste Item der Combobox mit Inhalt zu füllen?
War ja das Tolle daran wenn eine PLZ eingegeben wurde und der Ort sofort zu sehen war.
Nun muss man immer die Combobox aufklappen.

Eins meiner ganz großen Probleme ist es nun das ich alle Daten umschreiben muss, wenn dazu jemand noch eine Idee hat.

Greatings
Steven

marabu 16. Mai 2007 06:23

Re: MyList.ValueFromIndex[index]
 
Hallo Steven,

eine simple Zuweisung des ersten Items an die Texteigenschaft der ComboBox liefert dir die gewünschte Vorbelegung:

Delphi-Quellcode:
 with ComboBox do Text := Items[0];
Deine Daten vom alten Format in das neue Format umwandeln - ich würde es so machen:

Delphi-Quellcode:
function CommaText(const ct, value: string): string;
begin
  with TStringList.Create do
  try
    CommaText := ct;
    Add(Value);
    Result := CommaText;
  finally
    Free;
  end;
end;

function CreateFoldedValues(s: TStrings; nvs: Char = '='): TStringList;
var
  i: Integer;
  ct, name, value: string;
begin
  Result := TStringList.Create;
  s.NameValueSeparator := nvs;
  for i := 0 to Pred(s.Count) do
  begin
    name := s.Names[i];
    value := s.ValueFromIndex[i];
    ct := Result.Values[name];
    if ct = ''
      then Result.Values[name] := value
      else Result.Values[name] := CommaText(ct, value);
  end;
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
var
  s: TStrings;
begin
  with ListBox do
  begin
    Items.LoadFromFile(ParamStr(1));
    s := CreateFoldedValues(Items, ';');
    Items.Assign(s);
    s.Free;
    Items.SaveToFile(ParamStr(2));
  end;
end;
Freundliche Grüße

Steven2 16. Mai 2007 11:31

Re: MyList.ValueFromIndex[index]
 
wow..ich versteh zwar nicht alles aber es funktioniert.
Danke !
Gruß Steven


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz