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内のそれらの行の数と構成は異なります。)メッセージに含める行を選択するための基準が必要な場合は、奇数行番号が次のように組み合わされていると想定します。 4行、行番号も次の2行と結合し、mod(10)行番号は次の5行と結合し、「#」で始まる行をスキップします。

私はこれをイテレータとして実装する必要があると考えていました。

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

それは合理的ですか?もしそうなら、それを実装するための最良の方法は?そうでない場合、それを実装するための最良の方法は?:)

ありがとう

4

1 に答える 1

0

この答えは私の解決策を提供しました:ScalaでIteratorを返すにはどうすればよいですか?

私は次のことを試しましたが、何らかのバッファの問題があるようで、への呼び出し間で行がスキップされます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 に答える