В файле содержится последовательность слов, разделенных пробелом. Текст заканчивается точкой. Вывести в новый файл все слова, отличные от последнего слова.
Program Lab_3; {Имя программы}
uses crt; {Команда подключения модулей}
const {Секция объявления констант}
filename1='a.txt';{Присваиваем константе filename1 имя файла, a.txt}
filename2='b.txt'; {Присваиваем константе filename2 имя файла, b.txt}
var {Секция объявления переменных}
f:text; {Переменная для объявления текстового файла}
s,last:string; {Переменная типа строка}
p,o:byte;{Переменная типа byte, переменная типа byte может принимать значения от 0 до 255}
begin
assign(f,filename1);{Связываем файловую переменную f с конкретным именем внешнего файла 'filename1'}
reset(f); {Открываем существующий файл с которым мы связали переменную f}
s:=''; {Присваиваем переменной строки s пустое значение}
repeat {Выполняем оператор после repeat до тех пор пока не выполнится условие заданное после оператора until}
inc(byte(s[0]));{ Увеличиваем значение кода символа s[0] на 1, т.к. s[0] имеет пустое значение, то к пустому значению прибавляем 1}
read(f,s[byte(s[0])]);{Считываем текст из файловой переменной f в переменную s }
until s[byte(s[0])]='.';{Условие выхода из цикла оператора repeat: переменная s[byte(s[0])] равна '.'}
dec(byte(s[0]));{ Уменьшаем кода символа s[0] на 1, т.е. после выполнения цикла организованного оператором repeat код символа s[0] будет равняться количеству символов в файле, а оператор dec уменьшит это значение на 1}
writeln('Строка файла: ',s); {Выводим текст 'Строка файла: s' , где s переменная строки, которая хранит считанную с файла информацию}
close(f);{Закрываем ранее открытый файл f}
for p:=length(s) downto 1 do {Для всех p от length(s) до 1 выполняется оператор после do, где length(s) – количество символов переменной s}
if s[p]=' ' {Если переменная s[p] равна пробелу, то выполняем оператор после then}
then
begin
last:=copy(s,p+1,255);{Присваиваем переменной строки last значение извлеченное из переменной s начиная с символа p+1 до 255, т.е считываем с переменной s в переменную last последнее слово}
break;{Принудительно завершаем цикл, т.к. нет смысла выполнять цикл полностью если мы дошли до конечного значения переменной s}
end;
assign(f,filename2); {Связываем файловую переменную f с конкретным именем внешнего файла 'filename2'}
rewrite(f); {Открываем файл f в режиме записи. Если указанный файл отсутствует на диске, то он будет создан. Если файл существует и содержит данные, то все они будут удалены и заменены в дальнейшем новыми (перезаписаны)}
writeln('Последнее слово: ',last); {Выводим текст 'Последнее слово: last' , где last переменная строки, которая хранит последнее слово файла}
o:=1;{Переменной о присваиваем значение 1, о – переменная с которой будем начинать извлечение слова из переменной s}
for p:=1 to p do {Для p от 1 до p выполняем оператор после do}
if s[p]=' ' {Если переменная s[p] равна пробелу, то выполняем оператор после then}
then
begin
if copy(s,o,p-o)<>last {Если извлеченное значение из переменой s от o до o-p не равно значению переменной last, то выполняется оператор после then, т.е сравниваем извлеченное слово с последним словом и если слова не равны то переходим к выполнению оператора после then}
then writeln(f,copy(s,o,p-o)); {Записываем в файл f значение извлеченное из переменной s от о до p-о, т.е. извлеченное слово}
o:=p+1;{Присваиваем переменной о значение переменной p+1, т.е. задаем номер символа с которого будет начинаться извлечение из переменной s}
end;
close(f); {Закрываем ранее открытый файл f}
readln{Ожидание нажатия клавиши Enter}
end.