Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Buchstaben zählen mit Microsoft Word

183 views
Skip to first unread message

Mustafa Korkmaz

unread,
May 10, 2000, 3:00:00 AM5/10/00
to
Servus,

wie kann ich unter Word einzelne Buchstaben eines Textes zählen?

mein Dank schonmal im voraus

Mustafa

Thorsten Matzner

unread,
May 11, 2000, 3:00:00 AM5/11/00
to
"Mustafa Korkmaz" <Must...@gmx.de> wrote:

>wie kann ich unter Word einzelne Buchstaben eines Textes zählen?

Bei ord 97 und Word 2000 findest du diese Information in Datei >
Eigenschaften > Statistik.

--
(tm)

Lothar Seiffert

unread,
May 11, 2000, 3:00:00 AM5/11/00
to
Mustafa Korkmaz schrieb:

> wie kann ich unter Word einzelne Buchstaben eines Textes zählen?

Du speicherst den Text als *.txt-Datei. Deren Länge in Byte ist dann
die Zahl der Buchstaben ...
Oder willst Du die a, b, c ... einzeln zaehlen? Dann brauchst Du ein
Script/Makro.

Gruss: Lothar Seiffert

PS: Wozu muss man die Zahl de Buchstaben wissen?

Mustafa Korkmaz

unread,
May 11, 2000, 3:00:00 AM5/11/00
to

"Lothar Seiffert" <seif...@fh-furtwangen.de> schrieb im Newsbeitrag
news:391A77AB...@fh-furtwangen.de...

> Oder willst Du die a, b, c ... einzeln zaehlen? Dann brauchst Du ein
> Script/Makro.

Genau das will ich wissen. Habe aber keine Ahnung von Makros unter Word..

> PS: Wozu muss man die Zahl de Buchstaben wissen?

Brauche ich um die Häufigkeitsverteilung der Buchstaben in der deutschen
Sprache zu ermitteln.

Mustafa Korkmaz

unread,
May 11, 2000, 3:00:00 AM5/11/00
to

"Thorsten Matzner" <t_ma...@hotmail.com> schrieb im Newsbeitrag
news:8fdor8$h0p$1...@sshuraac-i-1.production.compuserve.com...

> "Mustafa Korkmaz" <Must...@gmx.de> wrote:
>
> >wie kann ich unter Word einzelne Buchstaben eines Textes zählen?
>
> Bei ord 97 und Word 2000 findest du diese Information in Datei >
> Eigenschaften > Statistik.
>
Da ist leider keine detaillierte Aufzählung der einzelnen Buchstaben (also
soundsoviel a, soundsoviel b, etc)
Aber sowas suche ich..

Lothar Seiffert

unread,
May 11, 2000, 3:00:00 AM5/11/00
to
Mustafa Korkmaz schrieb:

> Brauche ich um die Häufigkeitsverteilung der Buchstaben in der deutschen
> Sprache zu ermitteln.


Sie ist ziemlich genau:
e n i s r a t d h u l g m o b w f k z ...
17,7 9,8 7,6 7,3 7,0 6,5 6,2 5,1 4,8 4,4 3,4 3,0 2,5 2,5 1,9 1,9 1,7 1,2 1,1 <0,01

Siehe:
http://cruncher.ba-mannheim.de/~972870/krypanal.htm
http://www.uni-karlsruhe.de/~za220/htm/kurse/mag/aufgabe1.htm

Gruss: Lothar Seiffert

Mustafa Korkmaz

unread,
May 11, 2000, 3:00:00 AM5/11/00
to
Hallo,

ist zwar ganz nett, daß du mir die Arbeit erleichterst, nur _muß_ ich die
Verteilung anhand eines Textes
selbst bestimmen..
Trotzdem danke für die nützlichen links.

Mustafa

"Lothar Seiffert" <seif...@fh-furtwangen.de> schrieb im Newsbeitrag

news:391A9469...@fh-furtwangen.de...

Lothar Seiffert

unread,
May 12, 2000, 3:00:00 AM5/12/00
to
Mustafa Korkmaz schrieb:
> [Buchstabenverteilung]

> ist zwar ganz nett, daß du mir die Arbeit erleichterst, nur _muß_ ich die
> Verteilung anhand eines Textes selbst bestimmen..

Muss es ein Word-Dokument sein? Wenn Du den Text als ASCII speichern kannst,
was ja zum Buchstabenzaehlen ausreicht, kannst Du ein primitives Programm
selber schreiben. Idee: Die letzten 5 Bit des Buchstaben abschneiden und als
Index in eine Tabelle mit den Zaehlwerten nehmen.

Gruss: Lothar Seiffert

Lothar Seiffert

unread,
May 12, 2000, 3:00:00 AM5/12/00
to
Mustafa Korkmaz wrote:
> [Buchstaben zählen]

> ist zwar ganz nett, daß du mir die Arbeit erleichterst, nur _muß_ ich die
> Verteilung anhand eines Textes selbst bestimmen..

Habe soeben ein Quick'n'Dirty-Programm zum Zählen geschrieben. Es produziert
folgenden Output (für ein deutsches Wörterbuch):

M:\TURBO>buchzahl deutsch.txt
Zählt die Buchstaben einer Text-Datei. (c) 2000 Lothar Seiffert

Ausgewertet wurden 2048288 Buchstaben:
a: 5.1% 104552x k: 1.9% 39507x u: 3.5% 71498x
b: 2.3% 48085x l: 4.3% 87930x v: 0.9% 19212x
c: 3.0% 61027x m: 2.5% 50479x w: 1.1% 22934x
d: 2.8% 56720x n: 8.8% 180196x x: 0.1% 1275x
e: 17.6% 360282x o: 2.2% 44316x y: 0.1% 1627x
f: 2.1% 42672x p: 1.4% 27843x z: 1.2% 25273x
g: 4.0% 81331x q: 0.0% 807x ä: 0.8% 16780x
h: 4.3% 87329x r: 8.1% 166415x ö: 0.3% 5743x
i: 5.9% 120116x s: 7.6% 156681x ü: 0.8% 15397x
j: 0.1% 1736x t: 7.3% 150525x ß: 0.0% 0x
Leerzeichen: 0 Sonstige Zeichen: 174734

Das Programm sieht so aus:

Program BuchstabeZahl;

Var Block : Array [1..1024] of Byte;
Buch : Array [0..31] of Char;
Zahl : Array [0..31] of LongInt;
Proz : Array [0..31] of Real;
Summe : LongInt;
Rest : Integer;
I : Integer;
Datei : File;

{ Initialisiert Buchstaben }
Procedure BuchInit;
Var I:Integer;
Begin
For I:=1 to 26 do Buch[I]:=Char(I+96);
Buch[00]:='*'; Buch[27]:='ä'; Buch[28]:='ö';
Buch[29]:='ü'; Buch[30]:='ß'; Buch[31]:='§';
End;

{ Initialisiert Zahlen }
Procedure ZahlInit;
Var I:Integer;
Begin
For I:=1 to 30 do Zahl[I]:=0;
End;

{ Zählt Buchstaben }
Procedure BuchZahl(E:Integer);
Var I,W:Integer;
Begin
For I:=1 to E do
Case Block[I] of
$41..$5A : Inc(Zahl[Block[I]and$1F]);
$61..$7A : Inc(Zahl[Block[I]and$1F]);
$C4,$8E,$E4,$84 : Inc(Zahl[27]);
$D6,$99,$F6,$94 : Inc(Zahl[28]);
$DC,$9A,$FC,$81 : Inc(Zahl[29]);
$DF,$E1 : Inc(Zahl[30]);
$20 : Inc(Zahl[31]);
else Inc(Zahl[00]);
End;
End;

{ Berechnet Prozente }
Function Prozente:LongInt;
Var I:Integer; S:Longint;
Begin
S:=0;
For I:=1 to 30 do S:=S+Zahl[I];
If S=0 then Exit;
For I:=1 to 30 do Proz[I]:=Zahl[I]*100/S;
Prozente:=S;
End;

Begin
Writeln('Zählt die Buchstaben einer Text-Datei. (c) 2000 Lothar Seiffert');
Writeln;
If ParamStr(1)='' then Begin Writeln('Dateinamen eingeben!'); Exit; End;
BuchInit;
ZahlInit;
FileMode:=0;
Assign(Datei,ParamStr(1));
Reset(Datei,1);
If IOresult<>0 then Begin Writeln('Lesefehler!'); Exit; End;
While not Eof(Datei) do Begin
If IOresult<>0 then Begin Writeln('Lesefehler!'); Exit; End;
BlockRead(Datei,Block,1024,Rest);
BuchZahl(Rest);
End;
Summe:=Prozente;
Writeln('Ausgewertet wurden ',Summe,' Buchstaben:');
For I:=1 to 10 do Writeln(' ',Buch[I+00],': ',Proz[I+00]:4:1,'% ',Zahl[I+00]:6,'x',
' ',Buch[I+10],': ',Proz[I+10]:4:1,'% ',Zahl[I+10]:6,'x',
' ',Buch[I+20],': ',Proz[I+20]:4:1,'% ',Zahl[I+20]:6,'x');
Writeln('Leerzeichen: ',Zahl[31],' Sonstige Zeichen: ',Zahl[0]);
End.

Ist es das, was Du suchst?

Gruss: Lothar Seiffert

Gernot Saborowski

unread,
May 12, 2000, 3:00:00 AM5/12/00
to
"Mustafa Korkmaz" <Must...@gmx.de> schrieb im Newsbeitrag
news:8fe2ru$ajdn8$2...@fu-berlin.de...

>
> Da ist leider keine detaillierte Aufzählung der einzelnen Buchstaben (also
> soundsoviel a, soundsoviel b, etc)
> Aber sowas suche ich..

Behelfsmäßig, ohne Programmieraufwand:
Öffne den Text in Word, gehe auf BEARBEITEN und ERSETZEN. Suche nach a,
ersetze durch a. Rückmeldung: XX Ersetzungen wurden vorgenommen.
Aufschreiben. BEARBEITEN und ERSETZEN, Suche nach b, ersetze durch b. Das
ganze einmal quer durchs Alfabet. Groß/Klein ist egal, beide werden
berücksichtigt.


Gruß,

Gernot

Mustafa Korkmaz

unread,
May 12, 2000, 3:00:00 AM5/12/00
to
Wow da hast du dir ja richtig Mühe gemacht.. Respekt!

Mittlerweile habe ich mir mal angeguckt wie die Makros funktionieren und
auch ein Makro für mein Problem geschrieben.
Das Problem ist nur noch, daß bei sehr langen Texten das Makro astronomisch
viel Zeit braucht, aber wenn ich den Text Seite für Seite durchsuche klappt
es prima.

Also mein großes Dank für die Mühe..

Hier mein Makro, wenn du es ausprobieren willst kannst du es einfach
kopieren und im Visual Basic Editor einfügen. Du müßtest vorher nur ein
leeres Dokument mit dem Namen "Ergebnis.doc" erstellen und in "Eigene
Dateien" abspeichern.

Sub Anzahl_Buchstaben()
'
' Anzahl_Buchstaben Makro
' Makro aufgezeichnet am 12.05.2000 von Mustafa'

Dim Buchstaben(65 To 90) 'Feld mit 26 Ziffern für A-Z (65 bis 90 sind die
ASCII Werte)
For i = 65 To 90
Buchstaben(i) = 0
Next i

anzahl = ActiveDocument.Characters.Count 'Alle Zeichen im Dokument werden
gezählt
Gesamtanzahl = 0 'Problem: Auch
Leerzeichen sind mitgezählt
For i = 1 To anzahl 'Hier werden dann
die Leerzeichen rausgenommen
If (Asc(ActiveDocument.Characters(i)) >= 65 And
Asc(ActiveDocument.Characters(i)) <= 90) Or
(Asc(ActiveDocument.Characters(i)) >= 97 And
Asc(ActiveDocument.Characters(i)) <= 122) Then
Gesamtanzahl = Gesamtanzahl + 1
End If
Next i

For i = 1 To anzahl
For A = 65 To 90 'Jedes Zeichen wird nach Buchstaben
untersucht
If Chr(A) = ActiveDocument.Characters(i) Or Chr(A + 32) =
ActiveDocument.Characters(i) Then
Buchstaben(A) = Buchstaben(A) + 1 'Das entsprechende Feld
wird um eins erhöht
End If
Next A
Next i
' Hier erfolgt die Auswertung, Achtung: Pfad
entsprechend umändern

Documents.Open FileName:="C:\Eigene Dateien\Ergebnis.doc",
ConfirmConversions:=False, _
ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
WritePasswordTemplate:="", Format:=wdOpenFormatAuto
Selection.TypeParagraph
Selection.TypeText Text:="HÄUFIGKEITSVERTEILUNG"
Selection.TypeParagraph
Selection.TypeParagraph
For i = 65 To 90
Selection.TypeText Text:=Chr(i) & ": " & Buchstaben(i) & " = " &
(Buchstaben(i) / Gesamtanzahl) * 100 & "%"
Selection.TypeParagraph
Next i
Selection.TypeParagraph
Selection.TypeText Text:="Gesamtanzahl der Buchstaben: " & Gesamtanzahl
End Sub

Mustafa Korkmaz

unread,
May 12, 2000, 3:00:00 AM5/12/00
to

"Gernot Saborowski" <ger...@vlfbox.de> schrieb im Newsbeitrag
news:8fgd6t$ht5$1...@salyko.cube.net...

> Behelfsmäßig, ohne Programmieraufwand:
> Öffne den Text in Word, gehe auf BEARBEITEN und ERSETZEN. Suche nach a,
> ersetze durch a. Rückmeldung: XX Ersetzungen wurden vorgenommen.
> Aufschreiben. BEARBEITEN und ERSETZEN, Suche nach b, ersetze durch b. Das
> ganze einmal quer durchs Alfabet. Groß/Klein ist egal, beide werden
> berücksichtigt.

Hey coole Idee, danke dir!

Gernot Saborowski

unread,
May 12, 2000, 3:00:00 AM5/12/00
to
"Mustafa Korkmaz" <Must...@gmx.de> schrieb im Newsbeitrag
news:8fgn0e$agd4p$2...@fu-berlin.de...

> > Behelfsmäßig, ohne Programmieraufwand:
> > Öffne den Text in Word, gehe auf BEARBEITEN und ERSETZEN. Suche nach a,
> > ersetze durch a. Rückmeldung: XX Ersetzungen wurden vorgenommen.
> > Aufschreiben. BEARBEITEN und ERSETZEN, Suche nach b, ersetze durch b.
Das
> > ganze einmal quer durchs Alfabet. Groß/Klein ist egal, beide werden
> > berücksichtigt.
>
> Hey coole Idee, danke dir!


Gerne doch ;-) Würde gerne wissen, wie Du es letztendlich gemacht hast...

Gernot

Mustafa Korkmaz

unread,
May 12, 2000, 3:00:00 AM5/12/00
to

"Gernot Saborowski" <ger...@vlfbox.de> schrieb im Newsbeitrag
news:8fgoe9$th2$1...@salyko.cube.net...

> Gerne doch ;-) Würde gerne wissen, wie Du es letztendlich gemacht hast...
>

Ich habe es genau so gemacht, wie du es beschrieben hast. Mit meinem Makro
funktioniert das zwar auch, aber das
würde einfach viel zu lange dauern, aber habe natürlich trotzdem behauptet
ich hätte es mit dem Makro gemacht :-)

Mustafa

Lothar Seiffert

unread,
May 13, 2000, 3:00:00 AM5/13/00
to
Mustafa Korkmaz schrieb:

> Ich habe es genau so gemacht, wie du es beschrieben hast. Mit meinem Makro
> funktioniert das zwar auch, aber das würde einfach viel zu lange dauern, ...

Häh? Mein Turbo-Pascal-Programm schafft etwa 2 MByte Text pro Sekunde ...

Gruss: Lothar Seiffert

Arno Fleck

unread,
May 14, 2000, 3:00:00 AM5/14/00
to Mustafa Korkmaz
Hi !

> Das Problem ist nur noch, daß bei sehr langen Texten das Makro astronomisch
> viel Zeit braucht, aber wenn ich den Text Seite für Seite durchsuche klappt
> es prima.

Also, ich kenne mich mit Word-Makros kein bißchen aus, aber hier sehe
ich doch mal ganz deutlich eine riesige Optimierungsmöglichkeit...

Und zwar läßt Du erstmal die Zählung der Gesamtanzahl weg (einfach
löschen). Dann ersetzt Du die FOR-Schleife durch folgendes:

FOR i = 1 TO Anzahl
Zeich = Asc(ActiveDocument.Characters(i))
IF (Zeich >= 97) AND (Zeich <= 122) THEN Zeich = Zeich - 1
IF (Zeich >= 65) AND (Zeich <= 90) THEN
Buchstaben(Zeich) = Buchstaben(Zeich) + 1


Gesamtanzahl = Gesamtanzahl + 1

END IF
NEXT i

Und schon dürfte das Programm um ein Vielfaches schneller laufen...
Grundsätzliche Optimerungsregel: Wenn ein Programm zu langsam läuft,
nachschauen wo man Schleifen verkürzen oder zusammenfassen könnte - Du
hattest erstmal schon das ganze Dokument zweimal durchsuchen lassen und
dabei auch noch eine unnötige 65 Schritte große Schleife eingebaut - bei
einer Textgröße von ca. 5000 Zeichen sind das 500*65 = 325000 Durchläufe
(statt 5000) !

Sollte ich irgendwo einen Syntaxfehler reingebaut haben (ich habe schon
lange kein BASIC mehr programmiert, sondern immer nur Pascal), wirst Du
das bestimmt finden.

Gruß,
Arno
--
http://afleck.home.pages.de (English and German)
Software, Links, C&C, Chartbreaker and more

http://pangea.home.pages.de (German only)
Mach mit bei einem Spiele-Projekt im Internet


0 new messages