为了逐行读取文本文件,而不将整个文件加载到内存中,在 Rebol 中执行此操作的常用方法是什么?
我正在执行以下操作,但我认为(如果我错了,请纠正我)它首先将整个文件加载到内存中:
foreach line read/lines %file.txt [ print line ]
至少在 Rebol2 中
read/lines/direct/part %file.txt 1
应该接近你想要的
但如果你想要所有的行一行接一行,它应该像
f: open/lines/direct %test.txt
while [l: copy/part f 1] [print l]
理论上你可以取代任何函数,甚至是本地函数。我会尝试给一个新的foreach
foreach_: :foreach
foreach: func [
"Evaluates a block for each value(s) in a series or a file for each line."
'word [get-word! word! block!] {Word or block of words to set each time (will be local)}
data [series! file! port!] "The series to traverse"
body [block!] "Block to evaluate each time"
/local port line
] [
either any [port? data file? data] [
attempt [
port: open/direct/lines data
while [line: copy/part port 1] [
set :word line
do :body
line
]
]
attempt [close port]
] [
foreach_ :word :data :body
]
]
大概是设置:字线部分和尝试应该更加详细,以避免名称冲突并出现有意义的错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)