Помощь - Поиск - Пользователи - Календарь
Полная версия: задача о замене слов в файле
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
tryno
Даны два текстовых файла f1 и f2. Файл f1 содержит произвольный текст.
Слова в тексте разделены пробелами и знаками препинаниями.
Файл f2 содержит не более 30 слов, которые разделены запятыми.
Эти слова образуют пары: каждое второе является синонимом первого.
Заменить в файле f1 те слова, которые можно, их синонимами.
Результат поместить в новый файл.
Lapp
Рекомендую описать файлы как file of char, а потом читать их посимвольно, заполняя слово пока идут подряд буквы. При встече первого небуквенного символа:
- в случае f1: сверять слово со словарем синонимов;
- в случае f2: заносить слово в словарь синонимов.

То есть примерно такая конструкция для чтения:
const
Letters=['A'..'Z','a'..'z'];
var
f:file of char;
c:char;
s:string;
...
s:='';
while not EoF(f) do begin
Read(f,c);
if c in Letters then s:=s+c else if s<>'' then begin
{тут делаем, что надо}
s:=''
end
end;

Разумеется, сначала читаем f2, а потом f1.
Для словаря нужно завести массив строк, можно двумерный - для наглядности алгоритма.
tryno
Если файл описывать как char, то он не находит его и не читает, а если переделать в String все то не работает.
Lapp
Цитата(tryno @ 20.12.2006 18:20) *

Если файл описывать как char, то он не находит его и не читает

Поподробнее, пожалуйста. Приведи свою программу и файл данных.
tryno
Цитата(Lapp @ 21.12.2006 7:00) *

Поподробнее, пожалуйста. Приведи свою программу и файл данных.

Пока что так :


program ten;
uses crt;
const
Letters=['A'..'Z','a'..'z'];
var
f:file of char;
c:char;
s:string;
begin
assign(f,'c:\f1.file');
reset(f);
s:='';
while not eof(f) do begin
read(f,c);
if c in Letters then s:=s+c else
if s<>' ' then begin

s:=' ';
end;
end;
write(' ');
writeln(s);
end.



М
Пользуемся тегами


Файл данных:
Нажмите для просмотра прикрепленного файла
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.