Passiert das auch schon beim ersten Durchlauf oder erst bei späteren Durchläufen? Du überprüfst nämlich nicht ob zaehlen auch innerhalb deiner Array-Grenzen liegt, deswegen könnte es da knallen.
//Edit
Schlechtschreibfehler behoben
Und was soll dieses Konstrukt?
for J := 1 to length(temp) do temp1 := temp1 + Temp[J];
Ich seh nämlich keinen Unterschied zu
temp1 := temp;
Und diesen hier
found := my_file.IndexOf(my_file.Strings[i]);
müsstest du eigentlich in
found := i;
verkürzen können, da my_file.Strings[i] bereits über den Index zugreift, du ermittelst also quasi den Index eines Index