http://www.delphisources.ru/forum/sh...ad.php?t=26859
Небольшое размышление: рандомное перемешивание может вызвать забавную ситуацию - некоторые строки могут быть "посланы" в результирующий файл несколько раз, а другие остаться даже неупомянутыми в нём, такова специфика системного "блендера", решение видится в таком варианте - предварительно собрать рандомный массив индексов строк с проверкой на дубляж/отсутствие их в нём и лишь после его формирования произвести перенос исходных строк в конечный файл посредством seek > readln > writeln простым проходом по элементам этого массива с последовательным считыванием их значений, по-другому вроде решение не наблюдается
З.Ы. Поскольку текстовый файл допускает лишь одностороннее чтение, только вперёд, вариант получился довольно медленным т.к. при переходе на нужную строчку необходимо каждый раз возвращаться в начало файла, много циклов, но к сожалению, иначе никак
Код:
var
i, j, b: integer;
ft, ft2: TextFile;
s: string;
sc: array of integer;
begin
Randomize;
AssignFile(ft, '1.txt');
Reset(ft);
i:= 0;
// Подсчёт количества строк в файле
while not Eof(ft) do
begin
Readln(ft);
Inc(i);
end;
SetLength(sc, i);
// Заполнение массива индексами строк
for i := Low(sc) to High(sc) do sc[i]:= i;
// Перемешивание индексов
for i := High(sc) downto Low(sc) do
begin
b:= Random(i);
j:= sc[b];
sc[b]:= sc[i];
sc[i]:= j;
end;
AssignFile(ft2, '2.txt');
Rewrite(ft2);
for i := Low(sc) to High(sc) do
begin
// Имитация seek
Reset(ft);
for j:= 0 to sc[i] do Readln(ft, s);
Writeln(ft2, s);
end;
CloseFile(ft);
CloseFile(ft2);
end;