Merge pull request #590 from triska/read_line_to_chars
ADDED: read_line_to_chars/3, reading up to and including "\n" from a stream
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
:- module(charsio, [char_type/2,
|
:- module(charsio, [char_type/2,
|
||||||
chars_utf8bytes/2,
|
chars_utf8bytes/2,
|
||||||
get_single_char/1,
|
get_single_char/1,
|
||||||
|
read_line_to_chars/3,
|
||||||
read_term_from_chars/2,
|
read_term_from_chars/2,
|
||||||
write_term_to_chars/3]).
|
write_term_to_chars/3]).
|
||||||
|
|
||||||
@@ -182,3 +183,14 @@ continuation(Code, Chars, Nb) --> [Byte],
|
|||||||
% invalid continuation byte
|
% invalid continuation byte
|
||||||
% each remaining continuation byte (if any) will raise 0xFFFD too
|
% each remaining continuation byte (if any) will raise 0xFFFD too
|
||||||
continuation(_, ['\xFFFD\'|T], _) --> [_], decode_utf8(T).
|
continuation(_, ['\xFFFD\'|T], _) --> [_], decode_utf8(T).
|
||||||
|
|
||||||
|
|
||||||
|
read_line_to_chars(Stream, Cs0, Cs) :-
|
||||||
|
'$get_n_chars'(Stream, 1, Char), % this also works for binary streams
|
||||||
|
( Char == [] -> Cs0 = Cs
|
||||||
|
; Char = [C],
|
||||||
|
Cs0 = [C|Rest],
|
||||||
|
( C == '\n' -> Rest = Cs
|
||||||
|
; read_line_to_chars(Stream, Rest, Cs)
|
||||||
|
)
|
||||||
|
).
|
||||||
|
|||||||
Reference in New Issue
Block a user