Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var i, woerter : integer;
text : string;
begin
woerter:= 1;
for i := 0 to length (text) do
begin
inc(woerter);
continue;
end;
Edit3.Text:= inttostr(woerter);
end;
Das habe ich und für wenige Wörter funktioniert das!
Length(Text) gibt die Anzahl der Buchstaben und Zeichen zurück. Die Zählung bei Strings beginnt nicht bei 0, sondern bei 1: Text[1] bezeichnet das erste Zeichen des Strings
Text. In deiner Prozedure iterierst du durch die Zeichen und erhöhst bei jedem Durchlauf die Zählvariable
woerter. Danach gibt deine Procedure die Anzahl der Zeichen aus, nicht die Anzahl der Wörter.
Ich würde so vorgehen: zuerst einmal legst du fest, welche Zeichen als Worttrenner gelten sollen. Das macht man am besten mit einem Set:
Delphi-Quellcode:
private { Private-Deklarationen }
Trenner = set of (' ', '?', ',', '.', ';', '!'); // ... und was dir sonst noch einfällt
Dann entwickelst du eine Function, die das gewünschte Ergebnis zurückliefert:
Delphi-Quellcode:
function Form1.GetWordCount(AText : String) : Integer; // "Text" sollte man nicht als Variable verwenden
var
i,
Zaehler,
Laenge : Integer;
begin
Zaehler := 0;
i := 1;
Laenge := Length(AText);
while i <= Laenge do
begin
if AText[i] in Trenner then // ein Trennzeichen wurde gefunden
begin
if (i < Laenge) and (AText[i] = ' ') then // wenn i nicht das letzte Zeichen ist, wird das nächste auf Space geprüft
inc(Zaehler);
if i = Laenge then // wenn i das letzte Zeichen ist, wird nicht das nächste auf Space geprüft
inc(Zaehler);
end;
inc(i); // nicht vergessen, den Index des Strings zu erhöhen
end;
Result := Zaehler;
end;
Den Beispielcode hab ich nicht getestet, sondern einfach im Foreneditor getippt. Der Code ist natürlich nicht perfekt, zB reagiert er nicht darauf, wenn am Ende des Strings gar kein Trennzeichen mehr steht.