Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Filterung eines Namens aus einer Textdatei (https://www.delphipraxis.net/159094-filterung-eines-namens-aus-einer-textdatei.html)

neko77 14. Mär 2011 13:28

Delphi-Version: 5

Filterung eines Namens aus einer Textdatei
 
Hi Leute, der Blonde ist zurück.:?

Ich habe eine externe Txtdatei wo Name; Vorname; Geb. von verschiedenen Personen untereinander stehen. Durch eingabe des Namens in ein Editfeld und klicken auf ein Button soll die Personen mit dem Namen in eine Listbox eingefügt werden.

Bis jetzt habe ich nur den Ansatz. und zemirbe mir den Kopf wie ich das mit Pos in verbindung bekomme.

procedure TForm1.btnsuchenClick (Sender: TObject);
VAR

F:textfile;
i,zeilen,laenge:integer;
s:string:

begin;

laenge:=length (s);
assignfile(F,'C:\tmp\Krankenhaus\Namen.txt');
{$I-}
reaset(F);

{$I+}

if IOResult <> 0 then exit;

while not eof (F) do begin
readln (F,s) ;

lbxpatienten.items.add(s);

end;
closefile(f);

Was habe ich falsch gemacht? oder kann ich ausführen um den gewünschten Effekt zu haben?

Lg Neko

s.h.a.r.k 14. Mär 2011 13:39

AW: Filterung eines Namens aus einer Textdatei
 
Grüß dich,

vorab eine Info: schau dir doch mal die [delphi]-bb-Tags an ;) Damit schaut es einfach schöner aus und ist lesbar.

Delphi-Quellcode:
procedure TForm1.btnsuchenClick (Sender: TObject);
var
  F:textfile;
  i,zeilen,laenge:integer;
  s:string; //: <- Der : sollte ein ; sein.
  needle: String;
  tmpStr : String;
begin//; <- hier gehört ; weg
  laenge:=length (s);
  assignfile(F,'C:\tmp\Krankenhaus\Namen.txt');
  {$I-}
  Reset(f); //reaset(F); <- Hier hast einen Schreibfehler!
  {$I+}
  if IOResult <> 0 then exit; // Sicher, dass du hier Exit nutzen willst?
                              // Somit reagierst du evtl. nicht auf Fehler!

  try // Sicherheitshalber sollte hier ein try-finally-Block stehen

    // Suchtext von Edit einlesen
    needle := editSearch.Text;

    // Evtl. noch Lowercase setzen, sodass CaseInsensitive-Vergleich
    // gemacht werden kann
    if (not cbCaseSensitive.Checked) then
      needle := LowerCase(needle);

    while not eof (F) do
    begin
      readln (F, s);

      if (not cbCaseSensitive.Checked) then
        tmpStr := LowerCase(s)
      else
        tmpStr := s;
     
      if (Pos(needle, tmpStr) > 0) then
        lbxpatienten.items.add(s);
    end;
  finally
    closefile(f);
  end;
end;

TonyR 14. Mär 2011 13:42

AW: Filterung eines Namens aus einer Textdatei
 
Du hast also bereits die Zeilen eingelesen!?
Dann benutze Hier im Forum suchenPosEx, um die verschiedenen, scheinbar durch ";" getrennten Teile zu trennen, oder du suchst mal nach Hier im Forum suchenExplode, oder nach Hier im Forum suchenTStringList.DelimitedText ;-)

und bitte setze Delphi Tags für den Code!

alfold 14. Mär 2011 13:44

AW: Filterung eines Namens aus einer Textdatei
 
Schau dir mal TStringList an!
TStringlist ist einfacher im Handling. Speichern/Lesen. Ist auch einfacher beim Suchen wenn man zb den delimiter benutzt. Nur so als Vorschlag!

Gruss alfold

p80286 14. Mär 2011 14:34

AW: Filterung eines Namens aus einer Textdatei
 
Also nochmal zum Mitdenken.
In Deiner Datei befinden Sich "Patientendaten" mit folgender Struktur:
Code:
Patient1.Name
Patient1.Vorname
Patient1.Gebäude
Patient2.Name
Patient2.Vorname
Patient2.Gebäude
....
Patientn.Name
Patientn.Vorname
Patientn.Gebäude
Dann solltest du zunächst einmal die zusammenhängenden Daten auch zusammen führen.
Ob in einem String oder einem Record ist zunächst einmal egal.

Für die weitere Verarbeiung eines Strings bietet sich eine TStringlist eigentlich an, da man sie auch sehr einfach sortieren kann.

Für ein paar Hundert/Tausen Datensätze würde ich aber zur Recordvariante(TList) tendieren, da dann alles über Feldnamen und nicht mehr über Trenner und ihre Positionen definiert ist.

Gruß
K-H


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