Вывести из файла строки, длина которых больше заданной

      Комментарии к записи Вывести из файла строки, длина которых больше заданной отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Задачи на строки и файлы Вывести из файла строки, длина которых больше заданной

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 6 мес., 1 неделя назад.

  • Автор
    Сообщения
  • #3344

    Нужно решить на Visual Prolog задачу с файлами. Из файла f1.txt нужно выбрать строки, длина которых больше заданного значения. Результат вывести в файл f2.txt.

    domains
      file = infile;outfile
    predicates
      longer_file_string(integer)
      print_longer_string(string, integer)
    clauses
      longer_file_string(_Length):- 
        eof(infile), !.
      longer_file_string(Length):-
        readln(String),
        print_longer_string(String, Length),
        longer_file_string(Length).
    
      print_longer_string(String, LimitLength):-
        str_len(String, Length),
        Length >= LimitLength, !,
        write(String), nl; !.
    
    goal
      write("Input the minimal length of string:"), readint(Length),
    
      openread(infile,"f1.txt"), readdevice(infile),
      openwrite(outfile, "f2.txt"), writedevice(outfile),
    
      longer_file_string(Length),
    
      closefile(infile),
      closefile(outfile).

    В секции domains описывает два типа файла, с которыми будем работать. В секции goal — открываем файлы, связывая их с заданными нами идентификаторами. Указываем файлы через идентификаторы как текущие устройства ввода и вывода — теперь все операции типа write выводят результат в f2.txt, а readln будет считывать строки с файла f1.txt. После обработки не забываем закрыть файлы (если не закрыть файл, открытый для записи — информация не сохранится).

    Функция longer_file_string(Length) считывает строки пока файл не кончится (функция eof не завершится успешно) — eof(infile). Строка передается вспомогательной функции print_longer_string, а остальные строки обрабатываются рекурсивно.

    Функция print_longer_string использует встроенную str_len для определения длины строки и сравнивает полученное значение с ограничением, введенным пользователем. Если сравнение проходит успешно — строка выводится на экран, а затем выводим символ перевод строки (nl) — без него все строки будут записаны в одну. Если же текущая строка короче чем надо — управление передается коду, расположенному после оператора «точка с запятой» (см. «Введение в логическое программирование«). Чтобы функция всегда завершалась успешно — поместим туда оператор отсечения.

Для ответа в этой теме необходимо авторизоваться.