我正在寻找处理文件的最佳方法,根据内容,我将某些行合并为XML并返回XML。
e.g。给定
line 1
line 2
line 3
line 4
line 5
我可能想要第一次回复
<msg>line 1, line 2</msg>
以及随后的回复呼叫
<msg>line 5, line 4</msg>
跳过第3行的不感兴趣的内容并耗尽输入流。 (注意:<msg>
标记将始终包含连续的行,但XML中这些行的数量和组织会有所不同。)如果您想要选择要包含在消息中的行的某些条件,请假设为奇数行# s与以下四行组合,偶数行#s与以下两行组合,mod(10)行#s与以下五行组合,跳过以'#'开头的行。
我在想我应该将它作为迭代器来实现,所以我可以做到
<root>{ for (m <- messages(inputstream)) yield m }</root>
这合理吗?如果是这样,如何最好地实施它?如果没有,如何最好地实施它? :)
由于
答案 0 :(得分:0)
这个答案提供了我的解决方案:How do you return an Iterator in Scala?
我尝试了以下操作,但似乎存在某种缓冲问题,并且在调用Log.next
之间会跳过行。
class Log(filename:String) {
val src = io.Source.fromFile(filename)
var node:Node = null
def iterator = new Iterator[Node] {
def hasNext:Boolean = {
for (line <- src.getLines()) {
// ... do stuff ...
if (null != node) return true
}
src.close()
false
}
def next = node
}
可能有更多的Scala方式可以做到这一点,我希望看到它,但这是我现在向前推进的解决方案。