Einzelnen Beitrag anzeigen

Guenni

Registriert seit: 11. Sep 2003
4 Beiträge
 
#1

Problem beim Vergleich von 1 Array mit sich selbst

  Alt 23. Nov 2003, 19:11
Hallo,

ich habe ein Problem mit einem Programm (was auch sonst ? *g*).
Also das Programm soll eine Liste auslesen und auswerten in der Namen stehen und dann ausgeben wie oft ein Name vorkommt.
Bei der Liste handelt es sich um die "WhoReadMyStatusMessage"-Liste von Miranda (falls die jemand kennt), daher müssen die Namen vorher noch aus der Zeile ausgeschnitten werden.
Die Zeile sieht ungefähr so aus
Code:
[20/11/2003 - 19:49] [12345678] Manfred Mustermann read your Away message
Ok, soweit so gut. Der Name wird aus der Zeile ausgeschnitten und in ein separates Memo-Fenster ausgegeben. Nun sollen alle Namen in ein Array eingetragen werden. Das Klappt auch soweit.
Jetzt ist das Problem, dass die Namen ja nich doppelt in dem Array drinstehen sollen, deswegen geht eine 2. Schleifen den Array durch und vergleicht alle bisher eingetragenen Namen mit dem, der nun eingetragen werden soll. Dabei kommt es aber zu Konfusen einträgen die absolut nicht stimmen und ich kann mir nicht erklären wieso.

Vielleicht findet jemand den Fehler, danke ;)

Deklaration
Delphi-Quellcode:
type TNames = record
     Name : String[50];
     Hit : integer;
end;

var
  ....
  Auswertung : Array[0..300] of TNames;
Quelltext
Delphi-Quellcode:
var k,i,l,m,ext,nPos : integer;
     S,Part,Substr: String;

begin
 Memo2.Clear;

// ####################
// ### Definitionen ###
// ####################

 ext := Memo1.Lines.Count-1;
 Label3.Caption := IntToStr(ext);

// ###################
// ## Array säubern ##
// ###################

 FOR i := 0 TO ext DO BEGIN
  WITH Auswertung[i] DO BEGIN
   Name := '';
   Hit := 0;
  END;
 END;

// ##################
// # Cut First Part #
// ##################

   FOR i := 0 TO ext DO BEGIN
      S := Memo1.Lines[i];

     FOR k := 1 TO 2 DO BEGIN
      Substr := ']';
      nPos:=Pos(Substr, S);
      Part := Copy(Part,nPos+2,Length(S));
      Delete(S,1,nPos+1);
     END;

// ###################
// # Cut Second Part #
// ###################

    Substr := 'read';
    nPos:=Pos(Substr, S);
    Part := Copy(S,1,nPos-2);
// Memo2.Lines.Add(Part);

// ###################
// # Array eintragen # <<< HIER IST DAS PROBLEM, IN DEM UNTEREN ABSCHNITT.
// ###################


    FOR l := 0 TO i-1 DO BEGIN
    IF Auswertung[l].Name = Part THEN
      Auswertung[l].Hit := Auswertung[l].Hit+1
     ELSE
      Auswertung[i].Name := Part;
      Auswertung[i].Hit := Auswertung[i].Hit+1
    END;


 END;

END;
//EDIT Die Liste wird in Memo1 geladen, deswegen auch die Zuweisung S := memo1.lines[i]
  Mit Zitat antworten Zitat