在 Crystal 中,如果我有一个字符串(或一个文件),如何一次读取一定数量的字符?使用像这样的函数IO#read
、IO#gets
、IO#read_string
、IO#read_utf8
,可以指定一定的字节数读取,但不是一定数量的 UTF-8 字符(或其他编码的字符)。
例如,在 Python 中,可以这样做:
from io import StringIO
s = StringIO("abcdefgh")
while True:
chunk = s.read(4)
if not chunk: break
或者,对于文件,这是:
with open("example.txt", 'r') as f:
while True:
chunk = f.read(4)
if not chunk: break
通常,我希望 IO::Memory
是用于字符串大小写的类,但据我所知,它的方法不允许这样做。 如何以一种高效和惯用的方式做到这一点(对于字符串和文件——也许每个答案都不同)在 Crystal 中?
最佳答案
目前在 Crystal 中没有对此可用的快捷方式实现。
您可以使用 IO#read_char
读取单个字符或使用 IO#each_char
读取连续的字符。
所以一个基本的实现是:
io = IO::Memory.new("€abcdefgh")
string = String.build(4) do |builder|
4.times do
builder << io.read_char
end
end
puts string
无论您使用内存 IO 还是文件或任何其他 IO 都是无关紧要的,行为都是一样的。
关于crystal-lang - 如何在 Crystal 中读取一定数量的字符(而不是字节)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65289805/