var
f1, f2 : file of Char;
ch : Char;
li, i : longint;
begin
{открываем файл номер раз}
Assign(f1, 'F1');
Reset(f1);
{узнаем количество символов в файле}
li := FileSize(f1);
{создаем файл номер два}
Assign(f2, 'F2');
ReWrite(f2);
{главный цикл}
i:=li-1;
while i>0 do
begin
Seek(f1, i); {устанавливаем позицию в файле}
Read(f1, ch); {читаем символ}
if ord(ch)=10 then
begin
{скипим CR и LF, т.к. они всегда идут парой и означают переход на новую строку в текстовом файле}
{или раскомментируйте 2 следующие строки, чтобы сохранить структуру строк
ch:=#$0d; Write(f2, ch);
ch:=#$0a; Write(f2, ch);
}
i:=i-2;
continue;
end
else
begin
Write(f2, ch);
Dec(i);
end;
end;
{закрываем ранее открытые файлы}
Close(f2);
Close(f1);
{улыбаемся}
ReadLn;
end.
Вариант 2
Program xa;
uses
crt;
type
Tstek=^Pstek;
Pstek=record
ch:char;
next:Tstek
end;
var
stek,tmp,adr:Tstek;
f,f1:text;
s,namefile:string;
n,i:integer;
p:boolean;
begin
{$I-}
repeat
clrscr;
p:=true;
WRiteln('VVedite HaumeHoBaHue faila');
readln(namefile);
assign(f,namefile);
reset(f);
If IOResult<>0 then
p:=false;
until p;
{$I+}
readln(f,s);
New(Stek);
adr:=stek;
Stek^.next:=nil;
Stek^.ch:=s[1];
n:=length(s);
for i:=2 to n do
begin
new(tmp);
tmp^.next:=stek;
stek:=tmp;
adr:=stek;
stek^.ch:=s[i];
end;
While not EOF(f) do
begin
readln(f,s);
n:=length(s);
for i:=1 to n do
begin
new(tmp);
tmp^.next:=stek;
stek:=tmp;
adr:=stek;
stek^.ch:=s[i];
end;
end;
close(f);
{$I-}
namefile:='';
repeat
clrscr;
p:=true;
WRiteln('VVedite HaumeHoBaHue faila dlia 3anici otveta');
readln(namefile);
assign(f,namefile);
rewrite(f);
If IOResult<>0 then
p:=false;
until p;
{$I+}
stek:=adr;
while stek<>nil do
begin
Write(f,stek^.ch);
stek:=stek^.next
end;
stek:=adr;
while stek<>nil do
begin
adr:=stek^.next;
dispose(stek);
stek:=adr
end;
close(f);
end.