Guten Morgen z'sammen,
ich arbeite und lerne zur Zeit mit Delphi. Bei allen bis heute auftretenden Problemen, hat mir diese Community super geholfen und ich konnte meine Fehler immer finden und beseitigen, doch heute bräuchte ich mal Hilfe. Dazu schildere ich am besten mal mein Problem so gut wie es geht:
Ich habe ein Memofeld in den ich Text schreibe. Die einzelnen Wörter werden ausgelesen und in einen String geschrieben - natürlich nicht alle auf einmal. Sobald also ein vollständiges Wort in meinem String ist, soll in meiner TObjectList gesucht werden, ob es bereits vorhanden ist und wenn es das nicht ist, soll es mit einem Counter hinzugefügt werden. Es scheitert bei mir nicht an dem Hinzufügen, sondern an dem Abgleich, weil ich dort eine OutOfRange-
Exception bekomme und ich mit den Lösungen im Internet nicht wirklich viel anfangen konnte. Ich schicke euch mal meinen jämmerlichen Ansatz, wie ich versuche den Abgleich zu machen. <embarassed>
Code:
repeat
if TCharacter.isletter(sEingabe[iIndex]) then // Solange das aktuelle Zeichen
begin // ein Buchstabe ist,
sWort := (AnsiLowerCase(sWort) + sEingabe[iIndex]); // soll dieser zu sWort gefügt werden.
end
else
begin
iCounter := 0;
if sWort <> '' then // Wenn es ein anderes Zeichen ist
begin
if List.Count = 0 then
begin
iAnzahl := 1;
List.Add(TWort.create(AnsiLowerCase(sWort), iAnzahl));
// Sobald es ein anderes Zeichen ist, soll sWort der TObjectList hinzugefügt werden
// Erhöht die Häufigkeit um einen
sWort := '';
end
else
begin
repeat
if sWort = List[iCounter].sWort2 then <--------------- Hier meckert er!
begin
List[iCounter].iAnzahl := List[iCounter].iAnzahl + 1;
// Erhöht die Häufigkeit um einen
sWort := '';
iCounter := List.Count - 1;
end
else
begin
if List[List.Count - 1].sWort2 = '' then
begin
break;
end
else
inc(iCounter);
end;
until iCounter = List.Count - 1;
end;
if sWort <> '' then
begin
iAnzahl := 1;
List.Add(TWort.create(AnsiLowerCase(sWort), iAnzahl));
// Sobald es ein anderes Zeichen ist, soll sWort der TObjectList hinzugefügt werden
// Erhöht die Häufigkeit um einen
sWort := '';
end;
end;
end;
inc(iIndex);
until iIndex = Length(sEingabe) + 2;
__________________________________________________ __________________________________________________ _______________________________________________
(Verzeiht mir, wenn ich nicht die richtige Implementation gewählt habe, mein Browser spinnt gerade irgendwie. Ich kann nichtmals Smileys setzen...)
Also zur Erklärung: Der Obere Teil ist ja einfach nur das Auslesen und gucken, ob es ein Buchstabe ist oder nicht.
Danach soll er dann, weil ja zu Beginn noch kein Element in der List ist, das erste Wort ohne Abgleich reinschreiben. Sobald List.Count aber nicht mehr 0 ist, also ein Element vorhanden ist, soll er den neuen String mit den Elementen in der Liste vergleichen und bei einem Fund den Zähler für dieses Wort erhöhen.
Und wenn das Wort halt nicht drin ist, dann soll er es ganz normal hinzufügen - so weit der Plan.
Ich hoffe ich konnte das gut genug schildern und bedanke mich schonmal für eure Hilfe.
Gruß
Jan