Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read a file line by line in Prolog

Tags:

I'd like to read a plain text file and apply a predicate to each line (the predicates contain write which does the output). How would I do that?

like image 449
Igor Marvinsky Avatar asked Jan 26 '11 14:01

Igor Marvinsky


1 Answers

You can use read to read the stream. Remember to invoke at_end_of_stream to ensure no syntax errors.

Example:

readFile.pl

main :-     open('myFile.txt', read, Str),     read_file(Str,Lines),     close(Str),     write(Lines), nl.  read_file(Stream,[]) :-     at_end_of_stream(Stream).  read_file(Stream,[X|L]) :-     \+ at_end_of_stream(Stream),     read(Stream,X),     read_file(Stream,L). 

myFile.txt

'line 0'. 'line 1'. 'line 2'. 'line 3'. 'line 4'. 'line 5'. 'line 6'. 'line 7'. 'line 8'. 'line 9'. 

Thus by invoking main you will recieve the output:

?- main. [line 0,line 1,line 2,line 3,line 4,line 5,line 6,line 7,line 8,line 9] true  

Just configure main. The output here is an example by using write, of course. Configure to match your request.

I assume that this principle can be applied to answer your question. Good luck.

like image 183
Ishq Avatar answered Oct 21 '22 18:10

Ishq