Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Wörter zählen(Memo/RichEdit, Listbox)?
majolo - Mo 23.09.02 18:04
Titel: Wörter zählen(Memo/RichEdit, Listbox)?
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 - 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 :)
majolo - 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 - 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
majolo - 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 - 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.
SpeedyGTD - Mo 23.09.02 19:40
Quelltext
1: 2: 3: 4:
| Var I1: Integer; begin Inc(I1) // gleiche wie I1:=I1+1 end |
also einfach 1 dazu adieren. :wink:
Wolff68 - 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:
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
majolo - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!