Помощь - Поиск - Пользователи - Календарь
Полная версия: задача о замене слов в файле
Форум «Всё о Паскале» > 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.



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


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