读取平面文件中组行的最佳方法
Best way to read lines in groups in a flat file
我有一个由行组组成的文件。每个组代表一个事件。组的末尾用 "END" 表示。我可以想到使用 for 循环遍历行,存储中间行并在遇到 "END" 时发出组。
但是因为我想用 Scala 来做。我想知道是否有人可以建议一种更实用的方法来完成同样的事情?
----------
A
B
C
END
----------
D
E
F
END
----------
只需为return组定义一个迭代器
def groupIterator(xs:Iterator[String]) =
new Iterator[List[String]]
{ def hasNext = xs.hasNext; def next = xs.takeWhile(_ != "END").toList}
正在测试(使用 Iterator[String]
,但 Source.getLines
将 return 成为文件行的迭代器)
val str = """
A
B
C
END
D
E
F
END
""".trim
for (g <- groupIterator(str.split('\n').toIterator)) println(g)
//> List(A, B, C)
//| List(D, E, F)
我有一个由行组组成的文件。每个组代表一个事件。组的末尾用 "END" 表示。我可以想到使用 for 循环遍历行,存储中间行并在遇到 "END" 时发出组。
但是因为我想用 Scala 来做。我想知道是否有人可以建议一种更实用的方法来完成同样的事情?
----------
A
B
C
END
----------
D
E
F
END
----------
只需为return组定义一个迭代器
def groupIterator(xs:Iterator[String]) =
new Iterator[List[String]]
{ def hasNext = xs.hasNext; def next = xs.takeWhile(_ != "END").toList}
正在测试(使用 Iterator[String]
,但 Source.getLines
将 return 成为文件行的迭代器)
val str = """
A
B
C
END
D
E
F
END
""".trim
for (g <- groupIterator(str.split('\n').toIterator)) println(g)
//> List(A, B, C)
//| List(D, E, F)