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]