Autor Beitrag
majolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334

Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
BeitragVerfasst: Mo 23.09.02 18:04 
Hi Leute,

wie kann man Wörter im Memo/RichEdit oder einer Listbox zählen?Ich habe nur so ne Vermutung bin mir aber sehr unsicher. :? :? Weiß einer wie es geht?Ich denke,dass man bei ner Listbox irgendwie die Items zusammenzählen muss.So alla count Items oder so um den dreh. :angel:
Danke im vorraus.
Gruss
majolo
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mo 23.09.02 18:19 
jetzt definier mir mal wort. Also ich würde sagen, dass Wörter durch Leerzeichen getrennt sind. AHA, jetzt könnte man zum Beispiel die Leerzeichen zählen.

Beispiel:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  i, Anzahl: Integer;
begin
  Anzahl := 0;
  for i := 0 to Length(RichEdit1.Text) do
  begin
    Inc(Anzahl);
  end;
  Inc(Anzahl); //Weil am Ende eines Textes ja auch ein Wort zu Ende sein kann. Vielleicht wäre vorher ne Abfrage nicht schlecht ;-)
end;


DAs ist jetzt nur ein Beispiel, dass man ohne weiteres weiterentwickeln kann. Das schaffst du schon :)

_________________
Viele Grüße
Jakob
majolo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334

Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
BeitragVerfasst: Mo 23.09.02 18:38 
Hi,

also ich habe mir, dass Ergebnis jetzt mal ausgeben lassen.Ich komme erstens auf den Wert aller Zeichen + 4.Also mal angenommen ich schreibe majolo hat 6 Buchstaben + 4 er gibt mir also 10 aus. Das er mir die richtige Anzahl an Zeichen ausgibt,habe ich ihm schon beigebracht.Nur leider happert es noch an den Wörtern.Definition:
Wenn ich schreibe:"majolo hat ein kleines Problem", dann möchte ich,dass er mir sagt, dass dies 5 Wörter sind.Ist das möglich?????
Danke
Gruss
majolo
SpeedyGTD
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Mo 23.09.02 18:48 
ich denke mal das du damit ein bisschen weiter kommst.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var I1, Anzahl: Integer; S1: String;
begin
I1:=0;
Anzahl:=0;
For I1:=0 to Length(Memo1.Text) do
   begin
   S1:=Memo1.Text[I1];
   If S1=' ' Then
      begin
      Inc(Anzahl);
      end;
   end;
Inc(Anzahl);

wenn was unklar ist nachfragen

_________________
...hab ich vergessen ;)
majolo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334

Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
BeitragVerfasst: Mo 23.09.02 19:02 
Hi SpeedyGTD,

das ist schon viel besser, denn es zählt schon mal die Leerstellen.Ich muss halt einbauen, dass nur eine Leerstelle zwischen jedem Wort erlaubt ist und ob der letzte String Leerstelle oder Zeichen ist.Danach wird dann entschieden, ob plus oder minus 1 gerechnet wird dann dürfte ich auf die richtige anzahl der Wörter kommen.Was bedeutet eigentlich genau das Inc?Habe ein Delphi-Buch gehabt(war für Kinder) und mir Delphi dann selbst beigebracht.
Gruss
majolo
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mo 23.09.02 19:31 
oh shit, ich habe die abfrage vergessen, ob das zeichen ein leerzeichen ist. :oops: Tut mir sorry. Ich bitte nochmals um Verzeihung.

_________________
Viele Grüße
Jakob
SpeedyGTD
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89



BeitragVerfasst: Mo 23.09.02 19:40 
ausblenden Quelltext
1:
2:
3:
4:
Var I1: Integer;
begin
Inc(I1) // gleiche wie I1:=I1+1
end

also einfach 1 dazu adieren. :wink:

_________________
...hab ich vergessen ;)
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Mo 23.09.02 21:00 
Bleiben noch 3 Probleme wenn man nur die Leerzeichen zählt.

1. Steht am Zeilenende meist KEIN Leerzeichen dafür ist aber ein Wort dort meist zuende. :shock:
2. Gibt es natürlich hierzu auch ausnahmen (Bindestriche) :o
3. Zählt man doppelte Leerzeichen einfach mit. :cry:

Ausserdem dauert die Char-by-Char Methode komischerweise oft recht lange und man sieht immer nur das eine Zeichen.

Ich hab kurz mal was geproggt:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
procedure TForm1.Button1Click(Sender: TObject);
var
  Anzahl, i : integer;
  s1 : String;
begin
 {Datei öffnen}
 IF OpenDialog1.Execute then begin
  RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName); // Datei öffnen

  {Zähler auf 0 setzen}
  Anzahl := 0;

  {An jede Zeile ein 'blank' anhängen,}
  {weil sonst letztes Wort nicht gezählt wird}
  For i := 0 to RichEdit1.Lines.Count-1 do begin
   {Hier noch prüfen, ob das letzte Zeichen nicht ein Bindestrich ist}
   s1 := RichEdit1.Lines[i];
   IF length(s1) > 0 then begin // s1[length(s1)] gibt Fehler bei Leerstring
    IF s1[length(s1)] <> '-' then begin
     {Ansonsten Leerzeichen ans Ende setzen}
     RichEdit1.Lines[i] := RichEdit1.Lines[i]+' ';
    end;
   end;
  end;

  {Und los gehts mit dem Zählen. Dafür den Text in einen String kopieren}
  s1 := RichEdit1.Text;
  {Und solange vorne weglöschen bis kein Leerzeichen mehr drin ist}
  While Pos(' ',s1) > 0 do begin // Ist noch ein Leerzeichen vorhanden
   INC(Anzahl); //Dann Zähler eins hochsetzen,
   Delete(s1,1,Pos(' ',s1)); // und bis zu diesem Leerzeichen vorne weglöschen
   s1 := TrimLeft(s1); // Eventuell doppelte Leerzeichen und Steuerzeichen
                        vorne entfernen
  end;
  {Und das ganze irgendwo anzeigen}
  SpinEdit1.Value := Anzahl;
 end;
end;


Also damit komm ich bei folgendem Text auf 54 Worte
(Hihi, Word sieht 55 Worte und erkennt den Bindestrich nicht...) :P
Zitat:
Hi Leute,

wie kann man Wörter im Memo/RichEdit oder einer Listbox zählen?
Ich habe nur so ne Vermutung bin mir aber sehr unsicher. Weiß einer wie es geht?
Ich denke, dass man bei ´ner Listbox irgendwie die Items zusammen-
zählen muss. So alla count Items oder so um den dreh.

Danke im vorraus.
Gruss,
majolo


Vorher könnte man zB auch noch hinter jedem . oder , ein Leerzeichen einfügen, für den Fall, daß jemand schreibt wie majolo (Hast die Sätze im Original oft direkt zusammengeschrieben) Doppelte stören ja hier nicht.

Grüße,
Wolfgang

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
majolo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334

Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
BeitragVerfasst: Di 24.09.02 12:57 
Hi Wolfgang,

dein Code scheint irgendwie der Beste bis jetzt zu sein.Werde mich jetzt mal im Proggi davon überzeugen.
Gruss
majolo