Edito:
Neftali sigue siendo el más rápido del Oeste....

.
(No sé si borrar el mensaje o dejarlo, lo dejo de momento, si te lías más, olvídame

, prácticamente digo lo mismo que Neftali)
Vamos por partes:
- Para cargar el fichero, puedes usar un stringlist llamado fichero y usar fichero.LoadFromfile('ruta completa.txt');
Ahora por cada elemento de ese string, tienes que recorrerlo y ponerlo en formato:
000000000Carlos000000000000234
Suponiendo que "Carlos" es el campo1 y "234" es el campo8
Estos strings con formato especial, vamos a cargarlo en otro stringlist llamado Aordenar, de forma que lo añadimos así:
Código Delphi
[-]
fichero := TStringlist.create;
Aordenar := TStringlist.create;
for i:= 0 to fichero.count-1 do
begin
strConCeros := pues eso, la cadena con los ceros, usa el xprocs o lo que sea para armar la cadena
aordenar.AddObject(strConCeros, pointer(i));
end;
aordenar.sort;
Un ejemplito, Supongamos que aordenar (después de llamar a Sort) tiene esto
Código:
string Object[i]
00000Antonio 3
00000Carlos 1
Eso significa que fichero[3] tendrá a "Antonio" y es el primer nombre en orden alfabético que existe en el fichero.
También significa que en segundo lugar de la lista ordenada, está "Carlos" el cual se encuentra en fichero[1]
Quizás sea un lío, te aconsejo probar con algo así
Código Delphi
[-]
var str:string;
begin
for i:= 0 to Aordenar.count-1 do
begin
str := Aordenar[i] + ' está en el índice '+ IntTostr(integer(Aordenar.objects[i])) + ' de fichero';
ShowMessage(str);
end;
Dicho de otra forma Aordenar.objects[i] guarda la linea en que se encuentra ese individuo en el archivo.
Saludos