需要最好的方法来迭代将批量行返回为XML的文件

时间:2011-05-23 19:59:34

标签: scala iterator list-comprehension for-comprehension

我正在寻找处理文件的最佳方法,根据内容,我将某些行合并为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>

这合理吗?如果是这样,如何最好地实施它?如果没有,如何最好地实施它? :)

由于

1 个答案:

答案 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方式可以做到这一点,我希望看到它,但这是我现在向前推进的解决方案。