Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Werte auf Document filtern


skall - So 25.01.09 22:50
Titel: Werte auf Document filtern
nabend

kurze Frage ist es irgendwie möglich Daten aus einem Dokument raus zufiltern, die bestimmte werte beitzen? bzw Zeilen wo ein bestimmter Wert vor kommt...

Oder anders:

ich habe jetzt Zeilen mit den Werten:

A B C D

und ich möchte alle Zeilen haben wo an der dritten Stelle C = C ist...


jaenicke - So 25.01.09 22:56

Entweder nimmst du eine TStringList oder du nimmst AssignFile, Reset, ReadLn, CloseFile.

Dann hast du jeweils den String mit einer Zeile, z.B. mit der StringList:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  xy: TStringList;
begin
  xy := TStringList.Create;
  xy.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Datei.txt');
  for i := 0 to xy.Count - 1 do
    if xy[i][3] = 'C' then
      ShowMessage('Zeile ' + IntToStr(i) + ': ' + xy[i]);
  xy.Free;
Bei größeren Dateien wäre die andere Methode besser, da die Datei nicht komplett in den Speicher geladen wird.


skall - So 25.01.09 23:12

naja die Datei ist ein wenig länger...

über 600 Zeilen...
Und ich such da halt immer so 60 Zeilen zusammen raus...

Lade die eigentlich auch mit AssignFile ReadLn...
Aber wie filter ich denn dann da?


jaenicke - Mo 26.01.09 02:36

user profile iconskall hat folgendes geschrieben Zum zitierten Posting springen:
Lade die eigentlich auch mit AssignFile ReadLn...
Aber wie filter ich denn dann da?
Ich verstehe nicht, wo genau dabei das Problem ist? :gruebel:
Zum Beispiel so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
  CurrentLine: String;
  Results: TStringList;
begin
  Results := TStringList.Create;

  ...
  ReadLn(MyFile, CurrentLine);
  if CurrentLine[3] = 'C' then // die Zeile überprüfen
    ErgebnisListe.Add(CurrentLine); // und ggf. benutzen
  ...

  ShowMessage(Results.Text);
  Results.Free;