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
Seite 1 von 3  1 23      
Lisa.99

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

Wörter zählen

  Alt 27. Feb 2017, 06:55
Hallo Zusammen!

Ich wollte mein Programm Wörter zählen lassen. Nur leider weiß ich nicht, wie ich das anstellen soll.
Ganz grob gedacht, muss er ja nach jedem Leerzeichen die Gesamtzahl mit 1 addieren, aber wie sieht das im Quelltext aus?

Danke schon mal für die Hilfe
  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, 07:29
Welche Idee hast du denn schon dazu entwickelt?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Lisa.99

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

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
 
#4

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
 
#5

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
 
#6

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
43.139 Beiträge
 
Delphi 12 Athens
 
#7

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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

Registriert seit: 12. Sep 2007
3 Beiträge
 
#8

AW: Wörter zählen

  Alt 28. Feb 2017, 20:32
Das ist eine einfache Aufgabe. Die folgenden Zeilen sollten dein Problem lösen.

Delphi-Quellcode:
function TokenCount(const cText: String): integer;
    var s: string;
        nPos: integer;
    begin
     result:=0;

     s:=trimright(cText);

     nPos:=Pos(#32,s);

     if (nPos=0) and (length(s)>0) then inc(result);

     while nPos>0 do
     begin
      inc(Result);
      System.Delete(s,1,nPos);
      s:=trimleft(trimright(s));

      nPos:=Pos(#32,s);
     end;
     
    end;
Liebe Grüße aus dem Süden

Geändert von awk ( 1. Mär 2017 um 08:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Wörter zählen

  Alt 28. Feb 2017, 22:18
Mit TStringList, Delimiter und DelimitedText sollte das IMHO auch recht einfach zu machen sein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wörter zählen

  Alt 28. Feb 2017, 22:48
Mit TStringList, Delimiter und DelimitedText sollte das IMHO auch recht einfach zu machen sein.
Length(SplitString(...))
Delphi-Referenz durchsuchenSplitString

Im Prinzip braucht man nur irgendwas, das den String an den Wortgrenzen oder Trennzeichen "zerlegt" und zählt dann die Teile.
"Schneller" wird der Code, wenn man nur die Trennstellen sucht und zählt und nicht wirklich zerlegt. (unnötige Speicheroperationen)
Man kann sogar mit RegEx arbeiten, denn da gibt es nette Steuerzeichen, um "Wort"-Grenzen (Wortanfang/Wortende) zu suchen, wo dazwischen nur "Wort"-Zeichen sind, und zählt dann die Matches.

Selbt eine For-Schleife funktioniert gut, wenn man sie richtig implementiert.
z.B. alle Zeichen durchgehen, beim (ersten) "Wort"-Zeichen (Buchstaben) den Zähler erhöht und dann alle nachfolgenden "Wort"-Zeichen (Buchstaben, Bindestrich usw.) ignoriert, bis zum nächsten Nicht-Wort-Zeichen und beim nächsten Wort-Zeichen wieder zählen usw.
Bzw. ganz billig: Man zählt Alles, wo man ein Wort-Zeichen findet, wo direkt davor ein Nicht-Wort-Zeichen liegt und zählt 1 dazu, wenn das allererste Zeichen auch ein Wort-Zeichen war.

"Etwas" Aufwändiger wird es, wenn man mehrfache aufeinanderfolgende "Nicht-Wort-Zeihen" hat und die als "mehrere" Trennstellen zählt, obwohl keine Wörter dazwischen sind.
Bei der StringList kann man da z.B. mit StrictDelimiter rumspielen.

Dann kann man noch "Nicht-Wörter" ignorieren (z.B. Zahlen) und wenn man dann auch noch zusammengesetzte Wörter erkennen will wird es erst spaßig.


Es geht also einfach oder aufwändiger ... jenachdem was man als "Wörter" definiert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Feb 2017 um 22:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 23:13 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