Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Postleitzahl mit Ort verknüpfen (https://www.delphipraxis.net/80941-postleitzahl-mit-ort-verknuepfen.html)

Steven2 17. Nov 2006 19:08


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:
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;
Grüsse
Steven

marabu 17. Nov 2006 19:18

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

ErazerZ 17. Nov 2006 19:26

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;

Steven2 17. Nov 2006 19:30

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

TKC 17. Nov 2006 19:48

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;

marabu 17. Nov 2006 19:53

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:
 
begin
  // ...
  index := MyList.IndexOfName(PlzEdit.Text + ' ');
  // edit: ValueFromIndex[] - und nicht ValueFromIndex()
  OrtEdit.Text := IfThen(index < 0, '', Trim(MyList.ValueFromIndex[index]);
  // ...
end;
Gute Nacht

ErazerZ 17. Nov 2006 20:05

Re: Postleitzahl mit Ort verknüpfen
 
Delphi-Quellcode:
{
  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;
und Bsp.
Delphi-Quellcode:
  ShowMessage(NameOfIndex(MyList, IndexOf(MyList, 'dres')));
Meintest du vielleicht soetwas?

Steven2 17. Nov 2006 20:21

Re: Postleitzahl mit Ort verknüpfen
 
So viele Sourcen, es klappt nun

So schaut's aus:

Delphi-Quellcode:
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;
Danke an alle ! :feuerchen:

marabu 17. Nov 2006 20:26

Re: Postleitzahl mit Ort verknüpfen
 
Besser so:

Delphi-Quellcode:
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 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.

Und herzlich willkommen in der DP, Steven.

Freundliche Grüße

TKC 17. Nov 2006 20:32

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 21:49 Uhr.
Seite 1 von 2  1 2      

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