Программа
Program Words;
{ Печать слов отличных от последнего }
Const ConstFileName='WORDS.TXT'; { Предопределенное имя файла }
Var Word:string; { Переменная "слово"}
EndWord:string; { Переменная "последнее слово"}
StringOfWords:string; { Переменная "строка слов" }
FileOfWords:text; { Файловая переменная }
FileName:string; { Имя файла }
Procedure DeleteWords(var Str:string;Word:string);
{ Процедура удаления слов из строки }
Const Bukva=['A'..'Z','a'..'z','А'..'Я','а'..'я']; { Множество букв }
Var WordNumber:integer; { Переменная "Номер слова" }
function QuantityWordsInString(Str:string):integer;
{ Функция подсчета числа слов в строке }
var Quantity:integer; { Буферная переменная для подсчета количества слов }
Meter:byte; { Счетчик }
begin
Quantity:=0; { Сброс количества слов }
{ Подсчет количества слов по количеству разделителей: }
for Meter:=1 to Length(Str) do { Цикл просмотра строки по символам }
if not(Str[Meter] in Bukva) { Если текущий символ "небуква" }
then Quantity:=Quantity+1; { то - увеличение количества слов }
if Str[Length(Str)]<>'.' { Если последний символ в строке "неточка" }
then Quantity:=Quantity+1;{ то - доопределение количества слов }
QuantityWordsInString:=Quantity { Определение значения функции }
end;
function WordFromString(Str:string;Number:integer):string;
{ Функция выделения слова из строки по номеру слова }
var MeterWord:integer; { Счетчик слов }
MeterSymbol:byte; { Счетчик символов }
Buf:string; { Буфер для набора слова }
EndPosition:byte;
{ Вспомогательная переменная - указатель на последний символ }
begin
MeterWord:=1; { Сброс счетчика слов }
MeterSymbol:=1; { Сброс счетчика символов }
while MeterWord<Number do { Цикл просмотра строки до получения
указателя на первый символ искомого слова }
begin
if Str[MeterSymbol]=',' { Если текущий символ - разделитель}
then MeterWord:=MeterWord+1; { то переопределение числа слов }
MeterSymbol:=MeterSymbol+1 { Переопределение счетчика }
end;
Buf:=Copy(Str,MeterSymbol,255);
{ Выделение подстроки от текущего символа }
EndPosition:=Pos(',',Buf)-1;
{ Определение номера последнего символа в слове по разделителю }
if EndPosition=0 { Если на предыдущей операции разделитель необнаружен }
then { то - переопределение указателя на последний символ }
EndPosition:=Length(Buf);
Buf:=Copy(Buf,1,EndPosition); { Выделение искомого слова }
if Buf[Length(Buf)]='.' { Если последний символ - точка }
then Delete(Buf,Length(Buf),1); { то - отсечение ее }
WordFromString:=Buf { Определение значения функции }
end;
procedure DeleteWord(var Str:string; Number:integer);
{ Процедура удаления слова из строки }
var MeterWord:byte; { Счетчик слов }
MeterSymbol:byte; { Счетчик символов }
Buf:string; { Буфер для набора строки }
begin
MeterWord:=1; { Сброс счетчика слов }
Buf:=''; { Сброс буфера }
for MeterSymbol:=1 to Length(Str) do
{ Цикл посимвольного копирования строки }
begin
if Str[MeterSymbol]=',' { Если текущий символ - разделитель }
then MeterWord:=MeterWord+1;{ то - переопределение счетчика слов }
if (MeterWord<>Number) or (Str[MeterSymbol]='.') { Если текущее
слово неотносится к исключаемому или текущий символ символ - точка }
then Buf:=Buf+Str[MeterSymbol]
{ то - копирование текущего символа в буфер }
end;
Str:=Buf { Переопределение переменной }
end;
Begin
for WordNumber:=1 to QuantityWordsInString(Str) do
{ Цикл перебора слов в строке }
if WordFromString(Str,WordNumber)=Word
{ Если текущее слово равно последнему }
then DeleteWord(Str,WordNumber) { то - удаление текущего слова }
End;
BEGIN
WriteLn; { Пропуск строки }
{ Ввод имени файла: }
WriteLn('Введите имя внешнего файла [',ConstFileName,']');{ Вывод
приглашения ввести имя файла со словами и указание имени "по умолчанию" }
ReadLn(FileName); { Чтение имени файла }
If FileName='' then FileName:=ConstFileName;
{ Переопределение пустого имени файла }
{ Поиск последнего слова: }
Assign(FileOfWords,FileName);
{ Связывание файловой переменной с именем файла }
Reset(FileOfWords); { Открытие файла для чтения }
while not EOF(FileOfWords) do { Цикл просмотра файла }
ReadLn(FileOfWords,StringOfWords); { Чтение строки из файла }
Close(FileOfWords); { Закрытие файла }
while Pos(',',StringOfWords)<>0 do { Цикл выделяющий последнее слово }
StringOfWords:=Copy(StringOfWords,Pos(',',StringOfWords)+1,255);
Delete(StringOfWords,Pos('.',StringOfWords),1);
{ Удаление последней точки из слова }
EndWord:=StringOfWords; { Определение последнего слова }
{ Печать слов отличных от последнего: }
Reset(FileOfWords); { Открытие файла для чтения }
while not EOF(FileOfWords) do { Цикл просмотра файла }
Begin
ReadLn(FileOfWords,StringOfWords); { Чтение строки из файла }
DeleteWords(StringOfWords,EndWord);
{ Удаление последнего слова из текущей строки }
WriteLn(StringOfWords) { Печать строки }
End;
Close(FileOfWords); { Закрытие файла }
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию