Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Suche in .txt (https://www.delphipraxis.net/39963-suche-txt.html)

tobiasw 9. Feb 2005 15:20


Suche in .txt
 
folgendes ein Programm das schreibt Postleitzahl und Ort in eine .txt datei und speichert diese beim start lädt es sie wieder. So jetzt habe ich eine Suche implementiert so das ich wenn ich PLZ eingebe mit der Ort genannt wird. Nur leider habe ich keine Ahnung wie ich das Machen kann. Hoffe jemand weiß wie

Jelly 9. Feb 2005 15:32

Re: Suche in .txt
 
Wie ist die Datei denn aufgebaut... Wenn so:

67655=Kaiserslautern
60123=Kein Ahnung

Würd ich die ganze Datei in ein TStringList laden und über Values['67655'] die korrespondierende Stadt suchen, am besten wenn die Liste noch nach Postleitzahlen sortiert ist.

Nikolas 9. Feb 2005 15:34

Re: Suche in .txt
 
Du könntest die Datei so anlegen:

Code:
123456 Delphi-City
654321 KleinesKaff
Jetzt lädst du die Dateiin eine Stringlist o.ä. und suchst mit pos den passeden STring und kopierst den Text nach dem Leerzeichen.

// Ein bischen auf die Grammatik in den Fragen zu achten ist auch nicht schlecht :mrgreen:

tobiasw 9. Feb 2005 15:38

Re: Suche in .txt
 
Code:
procedure TForm1.Button1Click(Sender: TObject);

var Zeichenanzahl:integer;
        Datei: Textfile;
       s_text: string;
begin
AssignFile (Datei, 'info_neu.txt');
Rewrite (Datei);
Zeichenanzahl:=1;
s_text:= edit1.text +  edit2.text;
while (Zeichenanzahl <= length (s_text)) do
begin
write (Datei, s_text[Zeichenanzahl]);
inc (Zeichenanzahl)
end;
CloseFile (Datei);
end;




end.
Mein Code fürs speichern

Code:
var Datei: Textfile;
s_Text: string[50];
zeichen: char;
Zeichenanzahl: integer;
begin
AssignFile (Datei, ’info’);
Reset (datei);
Zeichenanzahl:= 0;
s_Text:= ’ ’;
while (not Eof (datei) ) do
read (Datei, zeichen);
s_text:= s_text + Zeichen;
inc (Zeichenanzahl);
end;
Edit1.text:= s_text; // hier das funzt net
end;
Der Code fürs laden möchte ich ins Formcreate stellen damit beim Prog start die Daten geladen werden nur halt funnktioniert dieser Code nicht

Gruß und Hoffnung auf Hilfe

alcaeus 9. Feb 2005 15:40

Re: Suche in .txt
 
Hallo tobiasw,

am einfachsten wäre es, aus der txt-Datei eine ini zu machen. Die erste Zeile muss dann einfach
Code:
[PLZ
lauten (oder etwas anderes, wichtig aber ein Text in eckigen Klammern.
Anschließend kannst du mit Delphi-Referenz durchsuchenTIniFile drauf zugreifen:

Delphi-Quellcode:
uses IniFiles;
//...
function GetLocByZIP(ZIP: String): String;
var IniFile: TIniFile;
begin
  Result := '';
  IniFile := TIniFile.Create(<DeinDateiPfad>);
  try
    Result := IniFile.ReadString('PLZ',ZIP,'');
  finally
    IniFile.Free;
  end;
end;
Wenn du in der Ini statt PLZ was anderes schreibst, dann musst du auch den entsprechenden Text in IniFile.ReadString ändern. Mehr dazu sagt dir die Online-Hilfe.

Greetz
alcaeus

tobiasw 9. Feb 2005 15:47

Re: Suche in .txt
 
aber leider muss es in einer .txt Datei abgespeichert werden

alcaeus 9. Feb 2005 15:48

Re: Suche in .txt
 
Hallo tobiasw,

du kannst der ini auch die Endung .txt geben. Wichtig ist nur die erste Zeile mit den eckigen Klammern, da (jedenfalls soweit ich weiß) eine Section in der Ini-Datei vorhanden sein muss.

Greetz
alcaeus

shmia 9. Feb 2005 15:55

Re: Suche in .txt
 
Zitat:

Zitat von tobiasw
folgendes ein Programm das schreibt Postleitzahl und Ort in eine .txt datei und speichert diese beim start lädt es sie wieder. So jetzt habe ich eine Suche implementiert so das ich wenn ich PLZ eingebe mit der Ort genannt wird.

Wenn du magst kann ich dir alle Postleitzahlen und Orte in Deutschland in einer Datei schicken.
Die Daten sind vom Jan/2005. Es sind 39705 Datensätze.

malo 9. Feb 2005 16:08

Re: Suche in .txt
 
Zu inis noch was: www.dsdt.info/tutorials/ini :zwinker:

GuenterS 9. Feb 2005 16:25

Re: Suche in .txt
 
Zitat:

Zitat von tobiasw
Code:
procedure TForm1.Button1Click(Sender: TObject);

var Zeichenanzahl:integer;
        Datei: Textfile;
       s_text: string;
begin
AssignFile (Datei, 'info_neu.txt');
Rewrite (Datei);
Zeichenanzahl:=1;
s_text:= edit1.text +  edit2.text;
while (Zeichenanzahl <= length (s_text)) do
begin
write (Datei, s_text[Zeichenanzahl]);
inc (Zeichenanzahl)
end;
CloseFile (Datei);
end;




end.
Mein Code fürs speichern

Code:
var Datei: Textfile;
s_Text: string[50];
zeichen: char;
Zeichenanzahl: integer;
begin
AssignFile (Datei, ’info’);
Reset (datei);
Zeichenanzahl:= 0;
s_Text:= ’ ’;
while (not Eof (datei) ) do
read (Datei, zeichen);
s_text:= s_text + Zeichen;
inc (Zeichenanzahl);
end;
Edit1.text:= s_text; // hier das funzt net
end;
Der Code fürs laden möchte ich ins Formcreate stellen damit beim Prog start die Daten geladen werden nur halt funnktioniert dieser Code nicht

Gruß und Hoffnung auf Hilfe


Da sind viele faule sachen drin, zum einen mal die Deklaration von s_Text ... wieso nur 50 Zeichen? und das andere was mal auf den ersten Blick auffällt, wenn man mal übersieht, dass nichts abgesichert ist durch try finally oder try except, die datei wird auch nicht zugemacht. (closefile)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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