Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String an Position x ausgeben lassen (https://www.delphipraxis.net/141413-string-position-x-ausgeben-lassen.html)

alleinherrscher 8. Okt 2009 16:15

Re: String an Position x ausgeben lassen
 
Der Code von mir oben liefert dir doch direkt die Zeile, in der die PLZ gefunden wurde. Diese ist noch in der Variablen aline gespeichert, wenn die Schleife verlassen wird. Das einzige was du noch machen müsstest ist, aus der Zeile den Stadtnamen zu isolieren. Dafür würd ich mir z.B. mal ansehen, mit welchem Zeichen die PLZ etc. getrennt sind in der Datei. Ich schätze mal, es ist ein Tabulator. Dann trennst du die Zeile anhand des Tabulators auf, und schon hast du deinen Stadtnamen.

Ist vielleicht nicht die performanteste Lösung, aber auf jedenfall einfacher zu verstehen als der Code, den du eben gepostet hast.

@ himitsu: Okay, wir haben ja alle genug speicher dafür, aber im Grunde ist die Datei doch ein bisschen sehr groß, um sie komplett in den Speicher zu laden...

//edit: Okay, es sind keine Tabulatoren als Trennzeichen, sondern Leerzeichen. Aber die Position (Anzahl der Zeichen vom Start der Zeile) der einzelnen Einträge ist immer gleich.

Den Stadtnamen kannste also z.B. so erhalten:

Delphi-Quellcode:
function PLZtoStadt(afilename:string;gesuchte_PLZ:string):string;
var T:Textfile;
    found_PLZ:boolean;
    aline:string;
begin


found_PLZ:=false;
assignfile(T,afilename);

reset(T);
while (not eof(T)) and (not found_PLZ) do
begin
   readln(T,aline);
   if pos(gesuchte_PLZ,aline)>0 then found_PLZ:=true;
end;

closefile(T);

result:=trim(copy(aline,0,45)); //Liefert den Stadtnamen zurück.

end;

SaFu 8. Okt 2009 16:25

Re: String an Position x ausgeben lassen
 
Delphi-Quellcode:

var T:Textfile;
    found_PLZ:boolean;
    gesuchte_PLZ:string;
    aline:string;
begin

 gesuchte_PLZ:='52067';
 found_PLZ:=false;

 assignfile(T,'bla.txt');

 reset(T);
 while (not eof(T)) and (not found_PLZ) do
 begin
   readln(T,aline);
   if pos(gesuchte_PLZ,aline)>0 then found_PLZ:=true;
 end;

 closefile(T);

end;
Naja wenn ich das so mache weis der Code doch immer noch nicht in welcher Zeile die PLZ steht

DeddyH 8. Okt 2009 16:29

Re: String an Position x ausgeben lassen
 
Die steht doch dann in aline.

alleinherrscher 8. Okt 2009 16:29

Re: String an Position x ausgeben lassen
 
Zitat:

Zitat von fuknersascha

Naja wenn ich das so mache weis der Code doch immer noch nicht in welcher Zeile die PLZ steht

1. Ist das nicht wahr (wenn du tatsächlich die Zeile bräuchtest - was du nicht tust - könntest du nen interger hochzählen lassen)
2. Habe ich dir gerade die Funktion fertig programmiert. Siehe Post #11

//edit:

Danke für deine Unterstützung @DeddyH
Außerdem möchte ich noch eine Anregung einwerfen: Bei meiner schönen Stadt erstrecken sich die Postleitzahlen über einen ganzen PLZ-Bereich. In der txt steht dann:

Stadt XYZ XXXXX-YYYYY

Wenn du eine Postleitzahl suchst, die zwischen diesen beiden Werten liegt, wirst du sie nicht finden. D.h. hier müsste man noch etwas fine-tuning machen.

SaFu 8. Okt 2009 16:36

Re: String an Position x ausgeben lassen
 
Wenn ich mir aline in einem edit ausgeben lasse bekomme ich immer die Daten der ersten Zeile angezeigt

alleinherrscher 8. Okt 2009 16:42

Re: String an Position x ausgeben lassen
 
Zitat:

Zitat von fuknersascha
Wenn ich mir aline in einem edit ausgeben lasse bekomme ich immer die Daten der ersten Zeile angezeigt

Das kann nicht sein. Guck nochmal genau nach. Ich habe gerade die Funktion aus Beitrag #11 in Delphi kopiert und sie funktioniert wunderbar. Ich gebe eine PLZ ein (die muss natürlich in der TXT Datei vorkommen) und bekomme die Stadt als string zurück) - Vielleicht brauchst du ein Edit.refresh oder sowas?

SaFu 8. Okt 2009 16:50

Re: String an Position x ausgeben lassen
 
Jetzt hab ich es nochmal neu geschrieben und siehe da es funzt. Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz