AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wörter zählen

Ein Thema von Lisa.99 · begonnen am 27. Feb 2017 · letzter Beitrag vom 6. Mär 2017
Antwort Antwort
Lisa.99

Registriert seit: 13. Feb 2017
21 Beiträge
 
#1

AW: Wörter zählen

  Alt 27. Feb 2017, 08:20
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!

Geändert von MrSpock (27. Feb 2017 um 09:34 Uhr) Grund: Delphi - Tags einfügen. Bitte demnächst selbst machen.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Wörter zählen

  Alt 27. Feb 2017, 09:38
Du hast ja auch noch eine zusätzliche, richtige Idee oben gezeigt. Du musst die Wortgrenzen finden. Das sind in der Regel Leerzeichen. Können aber auch Sonderzeichen wie CR / LF (Zeilenvorschub) oder Tab (Tabulator) sein. Ob du auch Kommata oder Semikolon oder Punkt als Trennzeichen akzeptieren willst, wenn ihnen kein Leerzeichen folgt, musst du dir auch noch überlegen.

Dann kannst du eine Prozedur schreiben, die diese Sonderzeichen findet. das wäre einmal der nächste Schritt.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Slipstream
(Gast)

n/a Beiträge
 
#3

AW: Wörter zählen

  Alt 27. Feb 2017, 11:17
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.
  Mit Zitat antworten Zitat
Lisa.99

Registriert seit: 13. Feb 2017
21 Beiträge
 
#4

AW: Wörter zählen

  Alt 27. Feb 2017, 16:04
Danke für die Hilfe!
Ich schaue, was ich daraus machen kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.360 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wörter zählen

  Alt 27. Feb 2017, 21:32
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!
Das glaub ich nicht.

Erstmal ist 0 bis Length Einer zuviel,
dann zählt das die Zeichen und keine Wörter
und zum Schluss sagt der Code immer "2", da Text leer ist.

Continue ist zwar Nutzlos, da nachfolgend nichts mehr in der Schleife folgt, aber es verursacht hier wenigstens keinen Fehler.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (27. Feb 2017 um 21:52 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz