Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tstringlist Länge ermitteln (https://www.delphipraxis.net/82183-tstringlist-laenge-ermitteln.html)

Ajin 8. Dez 2006 09:02


Tstringlist Länge ermitteln
 
Hallo DP User!

Ich wollte mir eine Funktion schreiben welche mir die Anzahl bestimmer Wörter in einer Textdatei Zeile ausgibt.

So sieht die Zeile der Datei aus:

Ich bin ein kleiner Mensch. Ein Apfel ist kein Mensch. Ein Hund ist auch kein Mensch

Ich möchte jetzt das Wort Mensch zählen.

Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
////
////  Anzahl Mensch im textfile
////
function anzahl_mensch: Integer;
var
 s: Tstrings;
 i, laenge, count, pos_mensch: integer;
Begin
 s := TStringList.Create;
 count := 0;
  try
   s.loadfromFile(meine_datei);
   //stringlist s nach Mensch durchsuchen
   for i := 0 to s.Count[i] - 1 do
   begin
      //--->> Position des gewünschten strings suchen
      pos_mensch := pos('Mensch', s.strings[i]);
      //--->> Position von Mensch gefunden
      if pos_mensch <> 0 then
      begin
        inc(count);
      end;
   end;//for
  Result := Count;
  Finally
   s.Free;
  End;
End;
s.count = die Anzahl der Zeilen. Da es nur eine Zeile ist kommt auch nur 1 x Mensch als result.
Ich möchte nun aber nicht die Anzahl der Zeilen durchsuchen, sondern die gesamte Zeile.
Ich dachte an die length Eigenschaft der Stringfunktionen aber das geht mit der Stringlist nicht.

Ich hab bestimmt irgendwas einfaches vergessen... :gruebel:

marabu 8. Dez 2006 09:11

Re: Tstringlist Länge ermitteln
 
Hallo Jaimy,

du darfst die Suche innerhalb der Zeile nicht nach dem ersten Vorkommen abbrechen:

Delphi-Quellcode:
function Occurs(const subStr, s: String): Integer;
var
  i: Integer;
begin
  Result := 0;
  i := 1;
  repeat
    i := PosEx(subStr, s, i);
    if i > 0 then
    begin
      Inc(Result);
      Inc(i, Length(subStr));
    end;
  until i = 0;
end;
Grüße vom marabu

Klaus01 8. Dez 2006 09:15

Re: Tstringlist Länge ermitteln
 
Guten Morgen,

pos_mensch := pos('Mensch', s.strings[i]);
liefert Dir nur die erste Position im String wo "Mensch" auftaucht.

Gibt Dir pos <> 0 aus solltest Du den String ändern, also mit delete oder copy
den ersten Mensch aus dem String entfernen und dann mit pos noch einmal suchen,
solange bis pos 0 ergibt.

Mit posex kannst Du auch arbeiten, dort kannst Du einen StartIndex angeben
ab wo gesucht werden soll dann brauchst Du nur den Index verschieben.

edit: da war der Achim mal wieder um Längen schneller und präzieser.

Grüße
Klaus

Ajin 8. Dez 2006 09:54

Re: Tstringlist Länge ermitteln
 
Ergs.. klar man sollte die Suche auch weiterführen. :wall:

Ich danke euch für die Hinweise !!
P.S. Klaus mach dir nichts draus, die gute Absicht zählt! :xmas:


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