J'utilise Akka FileIO (in scala) pour créer un analyseur de fichier qui est destiné à lire chaque ligne à partir d'un fichier d'entrée et à appliquer un simple puits. Chaque ligne est délimitée par un caractère de nouvelle ligne ('\ n') à l'exception de la dernière ligne du fichier qui se termine par un EOF.AKKA FileIO Stream Analyser à Newline et EOF
Comment puis-je gérer à la fois la nouvelle ligne et la délimitation de l'eof afin de pouvoir lire de façon fiable la ligne finale sans avoir à dépendre d'un caractère final '/ 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)
Si cette option est exécutée sur le fichier (pas de nouvelle ligne à la fin de la dernière ligne):
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
La sortie est:
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
Comment puis-je pickup cette dernière ligne ?
Merci pour le tester, @chunjef. Je cours également 2.4.16. L'extrait renvoie-t-il 3 lignes de sortie? Etes-vous sûr (e) de ne pas avoir ajouté de \ n à la fin de la troisième ligne? –