Hallo,
ich habe hier noch einen Vorschlag
Delphi-Quellcode:
TSignArray =
Array [0..255]
of Double;
// Entspricht dem Ordinalwert der ASCII-Zeichen
procedure TForm1.DoIt(aText: TStrings;
var aArray: TSignArray);
var
iCnt : Integer;
begin
// Array löschen
For iCnt:=Low(aArray)
to High(aArray)
do
aArray[iCnt]:=0.0;
// Berechne über den Ordinalwert des ASCII-Zeichens den Index im Array
// und erhöhe den Wert an dieser Stelle um 1
For iCnt:=1
to Length(aText.Text)
do
aArray[Ord(aText.Text[iCnt])]:=aArray[Ord(aText.Text[iCnt])]+1.0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyArray : TSignArray;
iCnt : Integer;
Gesamt : Double;
begin
DoIt(Memo1.Lines,MyArray);
Gesamt:=0.0;
// Berechne die Anzahl der Zeichen im Text
Gesamt:=Length(Memo1.Lines.Text);
// Die Anzahl eines einzelnen Zeichen geteilt durch die Gesamtanzahl
// ergibt die Häufigkeit
For iCnt:=Low(MyArray)
to High(MyArray)
do
MyArray[iCnt]:=MyArray[iCnt]/Gesamt;
// TChart befüllen
Series1.Clear;
For iCnt:=Low(MyArray)
to High(MyArray)
do
Series1.Add(MyArray[iCnt],IntToStr(iCnt),clRed);
Gesamt:=0.0;
// Test, ob die Summe der Häufigkeiten 1 ergibt
For iCnt:=Low(MyArray)
to High(MyArray)
do
Gesamt:=Gesamt+MyArray[iCnt];
ShowMessage(FloatToStr(Gesamt));
// Rechne die Häufigkeiten in Prozent um
For iCnt:=Low(MyArray)
to High(MyArray)
do
MyArray[iCnt]:=MyArray[iCnt]*100;
Gesamt:=0.0;
// Test, ob die Summe der Häufigkeiten 100% ergibt
For iCnt:=Low(MyArray)
to High(MyArray)
do
Gesamt:=Gesamt+MyArray[iCnt];
ShowMessage(FloatToStr(Gesamt));
end;
Der Algorithmus verwendet ein Array um die Anzahl der einzelnen zu ermitteln.
Dabei entspricht der Index im Array dem Ordinalwert des
ASCII-Zeichens.
Jetzt kann für jedes Zeichen im Text der Ordinalwert berechnet werden. Dieser Ordinalwert wird als
Index für das Array verwendet, um den Wert an der Position um 1 zu erhöhen. Anschließend wird jedes Element im Array durch die Gesamtanzahl der Zeichen geteilt. Damit steht im Array die Häufigkeit des jeweiligen Zeichens. Über MyArray[Ord('a')] erhält man dann die Häufigkeit des Zeichens a.
Wüsste evt. jemand wie es noch schneller gehen könnte alle Häufigkeiten in einem Text zu berechnen?