Из двух отсортированных в убывающем порядке файлов целых чисел IN1.DAT и IN2.DAT получается новый файл OUT.DAT, отсортированный в том же порядке.
Program Merge;
{ Учебный пример:
Создание файла OUT.DAT, отсортированного в убывающем порядке,
объединенного из файлов IN1.DAT и IN2.DAT, так же отсортированных }
Var In1,In2,Out: File of integer;
x1,x2: integer; { вспомогательные переменные - элементы файлов }
Begin
{ Ставим в соответствие внутреннее и внешнее имя файлов }
Assign(In1,'IN1.DAT');
Assign(In2,'IN2.DAT');
Assign(Out,'OUT.DAT');
{$I-} { Запрет контроля ошибок в среде ОС }
{ Открываем и контролируем открытие файлов }
Reset(In1);
If IOResult <>0 Then Begin
Writeln ('Ошибка файла IN1.DAT');
Exit; End;
Reset(In2);
If IOResult <>0 Then Begin
Writeln ('Ошибка файла IN2.DAT');
Exit; End;
Rewrite(Out);
If IOResult <>0 Then Begin
Writeln ('Ошибка создания файла OUT.DAT');
Exit; End;
{$I+} { Обязательно восстанавливаем контроль за ошибками }
{ в цикле While обрабатываются элементы файлов }
While not (EOF(In1) or EOF(In2)) do
Begin
{ Читаем элемент файла, но указатель не перемещаем,
иначе будет пропущен последний элемент }
Read(In1,x1); Seek(In1,FilePos(In1)-1);
|
|
Read(In2,x2); Seek(In2,FilePos(In2)-1);
If x1<x2 Then Begin
Write(Out,x2);
Seek(In2,FilePos(In2)+1)
end
else Begin
Write(Out,x1);
Seek(In1,FilePos(In1)+1)
end;
end;
{ Чтение одного из входных файлов закончено –
переписываем конец незаконченного файла в выходной }
While not EOF(In1) do
Begin
Read(In1,x1);
Write(Out,x1);
end;
While not EOF(In2) do
Begin
Read(In2,x2);
Write(Out,x2);
end;
{ Закрытие использованных файлов – хороший стиль программирования}
Close (In1);
Close (In2);
Close (Out);
end.