Nach dem DRY-Prinzip ('Dont repeat yourself') solltest Du den Aufruf von GetStringLine so ändern, das die Zeilennummer (anstatt dem FileIndex) übergeben wird:
Delphi-Quellcode:
function GetStringLine(I : Integer; Upper : Boolean): string;
var
CharStr : PAnsiChar;
index : TIndex;
begin
index := FileIndex[I];
CharStr := StrAlloc(Index.size +1);
FillChar(CharStr^, Index.size +1, #0);
aSourceFileStream.Seek(Index.offset, soFromBeginning);
aSourceFileStream.Read(CharStr^, Index.size);
if Upper then
Result := AnsiUpperCase(CharStr)
else
Result := CharStr;
StrDispose(CharStr);
end;