Skip to content

Commit 5ca9617

Browse files
committed
Add readuntil() convenience function
1 parent 61554e8 commit 5ca9617

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/StringEncodings.jl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
module StringEncodings
44
import Base: close, eachline, eof, flush, isreadable, iswritable,
5-
open, read, readline, readlines, show, write
5+
open, read, readline, readlines, readuntil, show, write
66
import Base.Libc: errno, strerror, E2BIG, EINVAL, EILSEQ
77
import Compat: read
88

@@ -398,6 +398,15 @@ Methods to read text in character encoding `enc`.
398398
readlines(s::IO, enc::Encoding) = readlines(StringDecoder(s, enc))
399399
readlines(filename::AbstractString, enc::Encoding) = open(io->readlines(io, enc), filename)
400400

401+
"""
402+
readuntil(stream::IO, enc::Encoding, delim)
403+
readuntil(filename::AbstractString, enc::Encoding, delim)
404+
405+
Methods to read text in character encoding `enc`.
406+
"""
407+
readuntil(s::IO, enc::Encoding, delim) = readuntil(StringDecoder(s, enc), delim)
408+
readuntil(filename::AbstractString, enc::Encoding, delim) = open(io->readuntil(io, enc, delim), filename)
409+
401410
"""
402411
eachline(stream::IO, enc::Encoding)
403412
eachline(filename::AbstractString, enc::Encoding)

test/runtests.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,20 @@ mktemp() do path, io
143143
@test readstring(path, enc"ISO-2022-JP") == s
144144
@test open(io->readstring(io, enc"ISO-2022-JP"), path) == s
145145
@test open(readstring, path, enc"ISO-2022-JP") == s
146+
147+
@test readuntil(path, enc"ISO-2022-JP", '\0') == "a string \0"
148+
@test open(io->readuntil(io, enc"ISO-2022-JP", '\0'), path) == "a string \0"
149+
@test readuntil(path, enc"ISO-2022-JP", "チャ") == "a string \0チャ"
150+
@test open(io->readuntil(io, enc"ISO-2022-JP", "チャ"), path) == "a string \0チャ"
151+
146152
@test readline(path, enc"ISO-2022-JP") == string(split(s, '\n')[1], '\n')
147153
@test open(readline, path, enc"ISO-2022-JP") == string(split(s, '\n')[1], '\n')
148154
a = readlines(path, enc"ISO-2022-JP")
149155
b = open(readlines, path, enc"ISO-2022-JP")
156+
150157
c = collect(eachline(path, enc"ISO-2022-JP"))
151158
d = open(io->collect(eachline(io, enc"ISO-2022-JP")), path)
159+
152160
@test a[1] == b[1] == c[1] == d[1] == string(split(s, '\n')[1], '\n')
153161
@test a[2] == b[2] == c[2] == d[2] == split(s, '\n')[2]
154162

0 commit comments

Comments
 (0)