【发布时间】:2017-05-15 17:09:20
【问题描述】:
我正在使用 Akka FileIO(在 scala 中)创建一个文件解析器,该解析器旨在从输入文件中读取每一行并应用一个简单的接收器。每一行都用换行符 ('\n') 分隔,但文件中的最后一行以 EOF 结尾。
如何处理换行符和 eof 定界,以便我可以可靠地读取最后一行,而不必依赖最终的 '/n' 字符?
var rowNum = 0
val simpleMsgSink: Sink[String, Future[Done]] =
Sink.foreach {
case row: String => {
println(s"$rowNum: $row")
rowNum = rowNum+1
}
}
val source = FileIO.fromPath(file, 1 * 1024 * 1024 )
.via(Framing.delimiter(ByteString("\n"), maximumFrameLength = 1024))
.map(_.utf8String)
.runWith(simpleMsgSink)
如果这是针对文件执行的(最后一行末尾没有换行符):
Sensor_ID,Location,Seqno,gwrx.time,Temp,Humidity,Noise,CO2,Water
A0890,"51.645368, 0.072211",1,42793.00278,16,48,36,325,0
A0891,"51.645370, 0.072300",1,42793.00278,15,41,34,353,3
输出是:
0: Sensor_ID,Location,Seqno,gwrx.time,Temp,Humidity,Noise,CO2,Water
1: A0890,"51.645368, 0.072211",1,42793.00278,16,48,36,325,0
我怎样才能提取最后一行?
【问题讨论】:
-
感谢您的测试,@chunjef。我也在运行 2.4.16。 sn-p 是否返回 3 行输出?您确定没有在第 3 行末尾添加额外的 \n 吗?
标签: scala parsing akka newline eof