Autor |
Beitrag |
majolo
      
Beiträge: 334
Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
|
Verfasst: 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.
Danke im vorraus.
Gruss
majolo
|
|
DeCodeGuru
      
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: 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:
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 
      
Beiträge: 334
Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
|
Verfasst: 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
      
Beiträge: 89
|
Verfasst: Mo 23.09.02 18:48
ich denke mal das du damit ein bisschen weiter kommst.
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 
      
Beiträge: 334
Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
|
Verfasst: 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
      
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: Mo 23.09.02 19:31
oh shit, ich habe die abfrage vergessen, ob das zeichen ein leerzeichen ist.  Tut mir sorry. Ich bitte nochmals um Verzeihung.
_________________ Viele Grüße
Jakob
|
|
SpeedyGTD
      
Beiträge: 89
|
Verfasst: Mo 23.09.02 19:40
_________________ ...hab ich vergessen
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: 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.
2. Gibt es natürlich hierzu auch ausnahmen (Bindestriche)
3. Zählt man doppelte Leerzeichen einfach mit.
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:
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...)
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 
      
Beiträge: 334
Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
|
Verfasst: 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
|
|
|