0

我正在寻找处理文件的最佳方法,在该文件中,我根据内容将某些行组合成 XML 并返回 XML。

例如给定

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) line #s 与以下五行结合,跳过以'#'开头的行。

我在想我应该把它作为一个迭代器来实现,这样我就可以做到

<root>{ for (m <- messages(inputstream)) yield m }</root>

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

谢谢

4

1 回答 1

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

于 2011-05-24T01:36:59.477 回答