Julia迭代器,它解析文件中的每一行
我是朱莉娅的新手,我想这是一个常见的场景: 我想要一个迭代器,它一次解析一行文本文件。因此,就像Julia迭代器,它解析文件中的每一行,julia,Julia,我是朱莉娅的新手,我想这是一个常见的场景: 我想要一个迭代器,它一次解析一行文本文件。因此,就像eachline(f),除了对每一行应用函数parse。如果愿意,可以调用结果eachline(parse,f)(如带有额外函数参数的open版本):映射parse到eachline 更具体地说:我有一个函数偏序集(s::String),它将偏序集的字符串表示形式转换为偏序集: function poset(s::String) nums = split(s) ... retu
eachline(f)
,除了对每一行应用函数parse
。如果愿意,可以调用结果eachline(parse,f)
(如带有额外函数参数的open
版本):映射parse
到eachline
更具体地说:我有一个函数偏序集(s::String)
,它将偏序集的字符串表示形式转换为偏序集:
function poset(s::String)
nums = split(s)
...
return transitiveclosure(g)
end
现在我想说些
open("posets7.txt") do f
for p in eachline(poset, f)
#something
end
end
(我特别需要一个迭代器:我的文件相当大,所以我真的想一次解析一行)。在这种情况下,我(个人)会使用:
open("posets7.txt") do f
for p in Iterators.map(poset, eachline(f))
# do something
end
end
但是,正如文档所述(以及您自己发现的),这相当于使用:
我刚刚学会了我可以为p-in做
(poset(x)for x-in-eachline(f))
这对我来说已经足够好了。谢谢弗朗索瓦!我对你的建议所做的唯一改进就是添加一个if!将占位符(r“^\s*(?:#|$)”,x)
插入生成器,以便忽略注释行。
open("posets7.txt") do f
for p in (poset(x) for x in eachline(f))
# do something
end
end