![]() |
Postleitzahl mit Ort verknüpfen
Hallo
ich habe eine Textdatei in der alle Postleitzahlen mit den dazugehörigen Orten in folgendem Format: Zitat: 01003 = Dresden Ich möchte folgendes machen: ich habe zwei Tedits, in das eine schreibe ich die Postleitzahl z.B. 01003 dann soll in dem anderen TEdit der Ort automatisch eingetragen werden. Komme mit folgendem Beispiel nicht weiter, wenn ich zum Beispiel nach 01003 = Dresden suche bekomme ich die Zeile und den Inhalt angezeigt. Suche ich aber nur nach 01003 wird nichts gefunden.
Delphi-Quellcode:
Grüsse
procedure TForm1.Button8Click(Sender: TObject);
var MyList: THashedStringList; Index, i: Integer; begin MyList := THashedStringList.Create; MyList.LoadFromFile( ExtractFilePath(Application.ExeName) + 'plzDat.txt'); try if MyList.Find('01003 = Dresden', Index) then //später dann das edit begin for i := 0 to MyList.Count - 1 do begin if MyList[i] = '01003 = Dresden' then //später dann das edit begin Edit2.text := MyList[i]; Edit3.text := IntToStr(Index); end; end; end; finally MyList.Free; end; end; Steven |
Re: Postleitzahl mit Ort verknüpfen
Hallo Steven,
mit ein wenig Glück kommst du mit der Methode IndexOfName() besser voran. Grüße vom marabu |
Re: Postleitzahl mit Ort verknüpfen
Versuch das mal
Delphi-Quellcode:
var
MyList: THashedStringList; i: Integer; Ort, PLZ: String; begin MyList := THashedStringList.Create; MyList.LoadFromFile(ExtractFilePath(Application.ExeName) + 'plzDat.txt'); if MyList.Find('01003 = Dresden', i) then begin PLZ := Trim(Copy(MyList[i], 1, Pos('=', MyList[i]) -1)); Ort := Trim(Copy(MyList[i], Pos('=', MyList[i]) +1, Length(MyList[i]))); ShowMessage(Format('"%s - %s"', [PLZ, Ort])); end; MyList.Free; |
Re: Postleitzahl mit Ort verknüpfen
Hallo Marabu
Ich bin schon am suchen. Hallo ErazerZ Das haut hin, wenn ich in Edit1 nur die PLZ angeben dann haut das auch mit deinem Beispiel nicht hin. ODer sehe ich das falsch? Grüße vom Steven |
Re: Postleitzahl mit Ort verknüpfen
Ich würde es so machen ...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var sl : TStringList; Indx : Integer; begin sl := TStringList.Create; sl.LoadFromFile(ExtractFilePath(Application.ExeName) + 'plzDat.txt'); //Leerzeichen vor und nach dem = entfernen sl.Text := StringReplace(sl.Text, ' = ', '=', [rfReplaceAll]); Indx := sl.IndexOfName(Edit1.Text); if Indx < 0 then Exit; Edit2.Text := sl.ValueFromIndex[Indx]; Edit3.Text := IntToStr(Indx); sl.Free; end; |
Re: Postleitzahl mit Ort verknüpfen
Hast du wirklich die Leerstellen rund um den NameValueSeparator in deiner Datei? Dann geht auch das hier:
Delphi-Quellcode:
Gute Nachtbegin // ... index := MyList.IndexOfName(PlzEdit.Text + ' '); // edit: ValueFromIndex[] - und nicht ValueFromIndex() OrtEdit.Text := IfThen(index < 0, '', Trim(MyList.ValueFromIndex[index]); // ... end; |
Re: Postleitzahl mit Ort verknüpfen
Delphi-Quellcode:
und Bsp.
{
MyList = Deine StringList SucheNach = Nach was sollte gesucht werden? StartFrom = Von welchem Index sollte gesucht werden (evtl. Weitersuchen) CaseSentive = Groß- und Kleinbuchstaben unterscheiden } function IndexOf(const MyList: THashedStringList; SuchenNach: String; StartFrom: Integer = 0; CaseSensitive: Boolean = False): Integer; var i: Integer; s: String; begin Result := -1; for i := StartFrom to MyList.Count -1 do begin s := MyList[i]; if not CaseSensitive then begin s := LowerCase(s); SuchenNach := LowerCase(SuchenNach); end; if Pos(SuchenNach, s) > 0 then begin Result := i; Exit; end; end; end; function NameOfIndex(const MyList: THashedStringList; Index: Integer): String; begin Result := Trim(Copy(MyList[Index], Pos('=', MyList[Index]) +1, Length(MyList[Index]))); end; function PLZOfIndex(const MyList: THashedStringList; Index: Integer): String; begin Result := Trim(Copy(MyList[Index], 1, Pos('=', MyList[Index]) -1)); end; function NameAndPLZOfIndex(const MyList: THashedStringList; Index: Integer): String; begin Result := MyList[Index]; end;
Delphi-Quellcode:
Meintest du vielleicht soetwas?
ShowMessage(NameOfIndex(MyList, IndexOf(MyList, 'dres')));
|
Re: Postleitzahl mit Ort verknüpfen
So viele Sourcen, es klappt nun
So schaut's aus:
Delphi-Quellcode:
Danke an alle ! :feuerchen:
procedure TForm1.Button8Click(Sender: TObject);
var MyList: THashedStringList; Index, i: Integer; begin MyList := THashedStringList.Create; MyList.LoadFromFile( ExtractFilePath(Application.ExeName) + 'plzDat.txt'); try begin for i := 0 to MyList.Count - 1 do begin index := MyList.IndexOfName(PlzEdit.Text + ' '); OrtEdit.Text := IfThen(index < 0, '', Trim(MyList.ValueFromIndex[index])); end; end; finally MyList.Free; end; end; |
Re: Postleitzahl mit Ort verknüpfen
Besser so:
Delphi-Quellcode:
Und noch besser, wenn du die Liste nicht bei jedem Klick auf den Button erstmal laden musst. Lade sie doch einach nur einmal zu Beginn deines Programms.
procedure TForm1.Button8Click(Sender: TObject);
var MyList: THashedStringList; Index, i: Integer; begin MyList := THashedStringList.Create; try MyList.LoadFromFile(ExtractFilePath(Application.ExeName) + 'plzDat.txt'); index := MyList.IndexOfName(Trim(PlzEdit.Text) + ' '); OrtEdit.Text := IfThen(index < 0, '', Trim(MyList.ValueFromIndex[index])); finally MyList.Free; end; end; Und herzlich willkommen in der DP, Steven. Freundliche Grüße |
Re: Postleitzahl mit Ort verknüpfen
Für was um Gottes Willen durchläufst du denn die ganze Stringlist ...
das reicht auch !!!
Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
var MyList: THashedStringList; Index: Integer; begin MyList := THashedStringList.Create; MyList.LoadFromFile( ExtractFilePath(Application.ExeName) + 'plzDat.txt'); try index := MyList.IndexOfName(PlzEdit.Text + ' '); If index > -1 Then OrtEdit.Text := Trim(MyList.ValueFromIndex[index]); finally MyList.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 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