2017-01-18 11 views
0

私は、alpakkaとscalaストリームを使用してftpサーバーからファイルを読み込もうとしています。 私がFtp.fromPath(...)から得るタイプはSource[ByteString, Future[IOResult]]です。私はファイルを1行ずつ読みたいと思うでしょう(それはCSVファイルです)。しかし、私はその方法を知りません。Akka stream from ftp、行ごと

私はどんな助けにも感謝します。

+0

これ以上のコードを表示できますか? –

答えて

3

Source[ByteString, _]を線で分割する標準的な方法があります。これはと呼ばれます。このように使用することができる。

val source: Source[ByteString, Future[IOResult]] = Ftp.fromPath(...) 

val splitter = Framing.delimiter(
    ByteString("\n"), 
    maximumFrameLength = 1024, 
    allowTruncation = true 
) 

val result: Source[ByteString, Future[IOResult]] = source.via(splitter) 

maximumFrameLengthパラメータは、行の最大長さを決定します。基本的に無制限の行の長さにするにはInt.MaxValueに設定してください(CSV行が非常に長い場合は危険ですが)allowTruncationtrueに設定され、CSVの末尾に改行がない場合に使用できますファイル。

resultソースは、マテリアライズされると、改行文字なしで各行に対応するByteStringを生成します。ファイルにWindowsの行区切り文字( "\ r \ n")が含まれていると思われる場合は、これらの文字列を手動でトリミングする必要があります。

関連する問題