Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу поместить строки из файла в лист(SWI prolog)
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Jared Jared вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.10.2014
По умолчанию поместить строки из файла в лист(SWI prolog) - 13.10.2014, 19:03

Всем привет!
Нужно из файла прочитать текст и каждую строку поместить в лист. А потом из имеющегося листа сделать обратный лист.
Сейчас я могу считать содержимое файла и отобразить на экране. И могу из списка сделать обратный список, а вот поместить строки из файла в список ну никак, т.к. в прологе очень слаб. Помогите!

Это код, чтобы прочитать файл и отобразить на экране.
prolog Код:
f(X) :- see(X),
    repeat,get_char(T),
    print(T),
    T=end_of_file,!,
    seen.

А это код, чтобы сделать обратный список
prolog Код:
обр_порядок([],[]).
обр_порядок([H|T],R):-обр_порядок(T,R1), append(R1,[H],R).
Ответить с цитированием
  (#2 (permalink)) Старый
compasses compasses вне форума
Member
 
Сообщений: 44
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 25.02.2014
По умолчанию 14.10.2014, 12:03

T=end_of_file,!,
наряду с этим, можно использовать end_of_line, чтобы понимать где кончается строка в файле.
строки в список читаются, например, так:
prolog Код:
my_read_line(Str):-
    get_code(H), (
        code_type(H, end_of_line), !;
        code_type(H, end_of_file), !;
        Str = [H|T], rd_line(T)
    ).
либо подключем модуль и читаем так:
prolog Код:
:- use_module(library(dialect/sicstus)).
....
read_line(Stream,X),
Вообще, по алгоритму, который ты описал, я бы не стал делать. Я бы сделал что-то типа:
prolog Код:
:- use_module(library(dialect/sicstus)).
main :-
    open('test.txt', read, Str),
    read_file(Str,Lines),
    close(Str).

read_file(Stream,[]) :-
    at_end_of_stream(Stream).

read_file(Stream,[X|L]) :-
    \+ at_end_of_stream(Stream),
    read_line(Stream,X),
    reverse(Xs, X),
    string_to_list(S, Xs),
    write(S),nl,
    read_file(Stream,L).
Ответить с цитированием
  (#3 (permalink)) Старый
compasses compasses вне форума
Member
 
Сообщений: 44
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 25.02.2014
По умолчанию 14.10.2014, 12:26

prolog Код:
my_read_line(Str):-
    get_code(H), (
        code_type(H, end_of_line), !;
        code_type(H, end_of_file), !;
        Str = [H|T], my_read_line(T)
    ).
вот так правильно конечно же
Ответить с цитированием
Пользователь сказал cпасибо:
Jared (14.10.2014)
  (#4 (permalink)) Старый
Jared Jared вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.10.2014
По умолчанию 14.10.2014, 13:07

Цитата:
Сообщение от compasses Посмотреть сообщение
prolog Код:
:- use_module(library(dialect/sicstus)).
main :-
    open('test.txt', read, Str),
    read_file(Str,Lines),
    close(Str).

read_file(Stream,[]) :-
    at_end_of_stream(Stream).

read_file(Stream,[X|L]) :-
    \+ at_end_of_stream(Stream),
    read_line(Stream,X),
    reverse(Xs, X),
    string_to_list(S, Xs),
    write(S),nl,
    read_file(Stream,L).
Спасибо. Только у меня при консалте выдает предупреждение "Singleton variables: [Lines]". Я так понимаю, что Lines нигде не используется. Или так и должно быть?
Ответить с цитированием
  (#5 (permalink)) Старый
compasses compasses вне форума
Member
 
Сообщений: 44
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 25.02.2014
По умолчанию 14.10.2014, 13:29

это я заготовку на твой алгоритм оставил. если хочешь сделать как писал:
собрать все в список списков и потом ревертнуть и вывести, то используй Lines и убери реверт и вывод из read_file
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Prolog-«Строки»,«Файлы» igrokk Языки программирования 2 09.12.2013 16:13
SWI Prolog. Задача на строки trueCoder Prolog 1 22.10.2013 19:52
Turbo Prolog Файлы, Строки kaarb Prolog 4 18.12.2011 18:04
Строки в Prolog 5.2 yJIaJIa Prolog 8 03.06.2011 13:19
Как сделать чтоб сохраняло 1й лист ШАБЛОНА под др именем в одно место,а 2й лист сохранялся в шаблоне ^GENTLY^ Visual Basic 5 13.11.2006 12:14
Как добавить лист по имени файла. NJohn Visual Basic 7 28.06.2006 15:27
Как преобразовать строки файла 11Сергей11 Pascal 1 02.11.2005 17:00
чтение строки из файла imported_kep PHP 5 01.08.2005 02:50
Как удалить строки из файла shiz С/С++ 2 25.06.2005 17:49
Как при вводе строки с пробелами поместить всю строку в массив Stalk200 Вопросы начинающих программистов 2 09.06.2005 11:30
Выдираем строки из файла demonphp PHP 0 09.04.2005 23:57
Как поместить курсор в конец строки в поле CEdit LeM2003 Visual C++ 1 21.03.2004 00:34



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов