Por pasos:
(1) Carga el fichero en un TStringList (llamaremos el original). Hay un método que lo hace, esa es otra de las ventajas del TStrigList.
Código Delphi
[-]
TS.loadFromFile('nombrefichero')
(2) Monta un segundo TStringList con las cadenas; Ese segundo es el que utilizaremos para ordenar. Tendrás las cadenas y el apuntador e la posición en la lista original.
Código Delphi
[-]
var
i:Integer;
pi:PInteger;
begin
...
TS2 := TStringList.Create();
...
for i := 0 to (TS.Count - 1) do begin
Str := 'Cadena con los campos 2 y 8'
pi := Pointer(i);
TS2.AddObject(Str, TObject(pi));
end;
Ahora tu segunda lista tiene las cadenas 2 y 8 y la posicion en la lista original; Al ordenar, ordenará por las cadenas y segirás teniendo cada cadena con un entero que te dirá la posición en la lista original.
(3) Ordenar.
Si originalmente la lista estaba así (TS):
Lunes
Martes
Miercoles
Jueves
Viernes
Sábado
Domingo
La segunda lista estará así (TS2) despues de ordenar; Lo segundo es el apuntador:
Domingo (7)
Jueves(4)
Lunes(1)
Martes(2)
Miercoles(3)
Sábado(6)
Viernes(5)
Por lo tanto puedes reordenar la lista original en una tervera (TS3) utilizando algo así:
Código Delphi
[-]
for i := 0 to (TS2.Count - 1) do begin
Str := TS2[i];
j := Integer(TS2.Objects[i]);
TS3.Add(TS.[j]);
end;
Espero que quede más claro.