Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Textdatei nach bestimmten Begriff durchsuchen (https://www.delphipraxis.net/111188-textdatei-nach-bestimmten-begriff-durchsuchen.html)

N30N 31. Mär 2008 11:40


Textdatei nach bestimmten Begriff durchsuchen
 
Update weiter unten!



Hi,

Ich versuche 100 Textdateien nach einem bestimmten Begriff zu durchsuchen. Ich hab dann mal die Forensuche bedient und folgenden Code gefunden und angepasst.Die Dateien liegen im Format 1.txt, 2.txt, 3.txt usw vor. Allerdings funktioniert das nicht so wie ich will.

Delphi-Quellcode:
procedure TForm5.SuchestartenClick(Sender: TObject);
var
    StringList : TStringList;
    posi : integer;
    s : string;
    i : byte;
begin
  for i := 0 to 100 do
    begin
      StringList := TStringList.Create;
      try
        StringList.LoadFromFile('\\Server\Datenbank\' + inttostr(i) + '.txt); [b]// [Fehler] Unit5.pas(45): Nicht abgeschlossener String[/b]
        s := StringList.Text; [b]// [Fehler] Unit5.pas(46): ')' erwartet, aber Bezeichner 's' gefunden[/b]
        delete(s, 1, pos(edit1.text, s) + length(edit1.text) - 1);
        memo1.lines.add (copy(s, 1, pos('<Endewort>', s) - 1));
      finally
        StringList.free;
      end;
    end;
end;
Die Fehlermeldungen sagen mir nicht viel, was mach ich falsch? Und wozu brauche ich Endewort?

Originalthread ist übrigens der hier

Ach ich sehe gerade, der Ersteller des anderen Threads sucht eine Möglichkeit um den Inhalt zwischen zwei Wörter herauszusuchen. Naja, viel Unterschied wird in den Verfahren nicht sein. Ich will eigentlich nur den Namen der Textdatei in der Memobox ausgeben, wenn ein bestimmter Begriff in dieser Datei gefunden wurde.

Medium 31. Mär 2008 11:46

Re: Textdatei nach bestimmten Begriff durchsuchen
 
Delphi-Quellcode:
StringList.LoadFromFile('\\Server\Datenbank\' + inttostr(i) + '.txt);
Hinter '.txt fehlt das abschließende '. Genau das sagt auch die Fehlermeldung, und die "kaputte" Formatierung des Quelltextes hier im Forum lässt das doch prima erkennen. Der 2. Fehler ist lediglich eine Folge des ersten.

\\Edit: Und für dein Vorhaben reicht eine einfach Suche mittles Delphi-Referenz durchsuchenPos in der Stringliste.

Nuclear-Ping 31. Mär 2008 11:51

Re: Textdatei nach bestimmten Begriff durchsuchen
 
LoL ... der is ma geil :lol: ... :wall:

Ausserdem durchläufst du die Schleife 101 mal ... "for i := 0 to 100 do" ... "for i := 1 to 100 do" oder "for i := 0 to 99 do" würde 100x die Schleife durchlaufen

N30N 1. Apr 2008 09:35

Re: Textdatei nach bestimmten Begriff durchsuchen
 
Okay, der erste Teil war vielleicht etwas verwirrend oder sogar komplett falsch ^^

Also nochmal:

Ich habe 100 Text-Dateien, es geht von 1 los und endet bei Datei Nr 100. Ich möchte jede dieser Dateien nach einem bestimmten Begriff durchsuchen und anschliesend den Dateinamen in einem Memofeld ausgeben.

Das klappt jetzt sogar, allerdings unterscheidet die Funktion pos zwischen Groß und Kleinschreibung wie mir scheint.

Delphi-Quellcode:
procedure TForm5.SuchestartenClick(Sender: TObject);
var
    StringList : TStringList;
    s : string;
    i : byte;
begin
  memo1.clear;
  for i := 1 to 100 do
    begin
      StringList := TStringList.Create;
      try
        StringList.LoadFromFile('\\Server\Datenbank\' + inttostr(i) + '.txt');
        s := StringList.Text;
        if pos(edit1.text, s) > 0 then
        memo1.lines.add (inttostr(i));
      finally
        StringList.free;
      end;
    end;
end;

Könnte mir noch einer verraten wie ich die Unterscheidung ausschalte? ^^

Klaus01 1. Apr 2008 09:42

Re: Textdatei nach bestimmten Begriff durchsuchen
 
Ja, pos ist case sensitiv.

Du kannst mit upperCase oder lowerCase den Text in Groß- oder Kleinbuchstaben
wandeln und dann mit pos abfragen.

Grüße
Klaus

N30N 1. Apr 2008 10:31

Re: Textdatei nach bestimmten Begriff durchsuchen
 
Hm, also mit lower und uppercase könnte ich zwar Den Text in groß und klein wandeln, aber was ist denn wenn es gemisch ist? cg, CG oder Cg.

Gibts nicht noch ne andere Lösung bzw Suchmethode?

taaktaak 1. Apr 2008 10:37

Re: Textdatei nach bestimmten Begriff durchsuchen
 
SameText() oder CompareText()

Klaus01 1. Apr 2008 10:40

Re: Textdatei nach bestimmten Begriff durchsuchen
 
Hallo,

vielleicht solltest Du Dir einmal klar werden
was Du willst.

Eine case sensitive Behandlung des Textes, also mit Unterscheidung von cg, CG oder Cg.
Das mach pos von Hause aus.

Eine case insensitive Behandlung des Textes, keine Unterscheidung von cg, CG odewr Cg.
Dann heißt es vor der Prüfung mit pos alles gleichzumachen.

Grüße
Klaus

N30N 2. Apr 2008 07:13

Re: Textdatei nach bestimmten Begriff durchsuchen
 
Ahhh tschuldigung Klaus01, ich glaub ich hab nur die Hälfte von deinem Vorschlag erkannt. Jetzt gleiche ich Text und Suchbegriff vor dem Vergleich auf lowercase an und es funktioniert! :)

Danke ncohmal an alle :)

Richtiger Quellcode ist also:

Delphi-Quellcode:
procedure TForm5.SuchestartenClick(Sender: TObject);
var
    StringList : TStringList;
    s : string;
    i : byte;
begin
  memo1.clear;
  for i := 1 to 100 do
    begin
      StringList := TStringList.Create;
      try
        StringList.LoadFromFile('\\Server\Datenbank\' + inttostr(i) + '.txt');
        s := lowercase(StringList.Text);
        if pos(lowercase(edit1.text), s) > 0 then
        memo1.lines.add (inttostr(i));
      finally
        StringList.free;
      end;
    end;
end;


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