Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Array-Sortierung mit großen Zahlen - oder nich?

  Alt 5. Dez 2006, 13:54
Herzlich willkommen in der Delphi-PRAXiS, Markus.

Die Zuordnung von Wort und Punktezahl kannst du auch ganz einfach mit der Allzweckwaffe TStringList machen. Die Punktezahl wird dabei einfach im Objects-Array der StringList mitgeführt.

Delphi-Quellcode:
procedure Analyze(const s: String; weight: Integer; words: TStringList);
var
  i, iStart, iWord: Integer;
  inWord: Boolean;
  sWord: String;
begin
  iStart := 0;
  for i := 1 to Succ(Length(s)) do
  begin
    inWord := (i <= Length(s))
        and (s[i] in ['a'..'z', 'A'..'Z', 'ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', 'ß']);
    if (iStart = 0) and inWord then iStart := i;
    if not inWord and (iStart > 0) then
    begin
      sWord := Copy(s, iStart, i - iStart);
      iStart := 0;
      iWord := words.IndexOf(sWord);
      if iWord <> -1
        then words.Objects[iWord] := Pointer(Integer(words.Objects[iWord]) + weight)
        else words.AddObject(sWord, Pointer(weight));
    end;
  end;
end;
Das Sortieren ist dann auch nicht sooo schwer:

Delphi-Quellcode:
function CompareInteger(i1, i2: Integer): Integer;
begin
  if i1 < i2 then Result := -1 else
  if i1 > i2 then Result := 1 else
  Result := 0;
end;

function CompareItems(list: TStringList; index1, index2: Integer): Integer;
begin
  Result := CompareInteger(Integer(list.Objects[index2]), Integer(list.Objects[index1]));
end;
Verwenden kannst du die Routinen dann so:

Delphi-Quellcode:
procedure TMainForm.AnalyzeButtonClick(Sender: TObject);
begin
  WordList.Clear;
  with WebBrowser.Document as IHTMLDocument2 do
  begin
    Analyze(title, 5, WordList);
    Analyze(body.innerText, 1, WordList);
  end;
  WordList.CustomSort(CompareItems);
  ShowRanking(WordList);
end;
Freundliche Grüße vom marabu
Angehängte Dateien
Dateityp: zip wb-analyze_184.zip (2,4 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat