Переписать содержимое файла в строку(или список). На SWI-Prolog
readFile(Path):-
open(Path, read, Stream),
get_char(Stream, Char1),
process_the_stream(Char1, Stream),
close(Stream).
process_the_stream(end_of_file, _):-!.
process_the_stream(Char, Stream):-
write(Char),
get_char(Stream, Char2),
process_the_stream(Char2, Stream).
Данный код выводит содержимое файла.
Нужно, чтобы запрос выглядел следующим образом:
?-readFile("D:/file.txt", Res).
Res = "Содержимое файла".
или
Res = ['С','о','д','е','р','ж','и','м','о','е',' ','ф','а','й','л','а'].
Ответы (1 шт):
Автор решения: Rylexium
→ Ссылка
Текст программы, которая содержимое файла преобразовывает в список атомов(символов).
file_to_list(Path,Lst):-
open(Path, read, Stream),%открыли файл на чтение
get_char(Stream,Char),%получаем первый символ из потока
stream_to_list(Stream, Lst, Char), %передаем наш поток, лист где хранится результат, и первый символ
close(Stream).%закрываем поток
stream_to_list(_Stream,[],end_of_file):-!. %если конец файла, то делать ничего не надо
stream_to_list(Stream,[Char|Tail],Char):-
get_char(Stream,Char1),%получаем следующий символ
stream_to_list(Stream,Tail,Char1). %рекурсивно пробегаем по всему файлу
Формируем запрос:
?-file_to_list("D:/some_file.txt", L).
Результат будет таким:
L = [' ', ' ', f, d, ' ', ' ', g, f, s|...].
!!! Не обращайте внимание, что в конце стоит "..." (многоточие), на самом деле в листе находится все атомы, которые есть в файле. !!! При желании, можно полученный список атомов(символов) преобразовать в строку.