/*** files ***/

% write to file
?- open('test.txt', write, Stream), write(Stream, 'This is a test string.\nSecond line.'), nl, close(Stream).
% Stream = <stream>(0x7fa6514e25e0).

% read a line
?- open('test.txt', read, Stream), read_string(Stream, "\n", "\r", End, String), close(Stream).
% Stream = <stream>(0x7fa653249d30),
% End = 10,
% String = "This is a test string.".

% read until end
?- open('test.txt', read, Stream), read_string(Stream, "\0", "\r", End, String), close(Stream).
% Stream = <stream>(0x7fa651525d30),
% End = -1,
% String = "This is a test string.\nSecond line.".

/* EXAMPLE: write and read from file */

% write to file
write_to_file(File, Text) :-
    open(File, write, Stream),
    write(Stream, Text), nl,
    close(Stream).

read_file(File) :-
    open(File, read, Stream),
    get_char(Stream, Char_0),
    process_stream(Char_0, Stream),
    close(Stream).

process_stream(end_of_file, _) :- !.
process_stream(Char, Stream) :-
    write(Char),
    get_char(Stream, Char_1),
    process_stream(Char_1, Stream).

?- write_to_file('test.txt', 'This is a test string').
% true.

?- read_file('test.txt').
% This is a test string
% true.

/*
    Michael Sjoeberg
    2019-09-04
    https://github.com/michaelsjoeberg/prolog-playground/blob/master/basics/files.pl
*/