私は、alpakkaとscalaストリームを使用してftpサーバーからファイルを読み込もうとしています。 私がFtp.fromPath(...)
から得るタイプはSource[ByteString, Future[IOResult]]
です。私はファイルを1行ずつ読みたいと思うでしょう(それはCSVファイルです)。しかし、私はその方法を知りません。Akka stream from ftp、行ごと
私はどんな助けにも感謝します。
私は、alpakkaとscalaストリームを使用してftpサーバーからファイルを読み込もうとしています。 私がFtp.fromPath(...)
から得るタイプはSource[ByteString, Future[IOResult]]
です。私はファイルを1行ずつ読みたいと思うでしょう(それはCSVファイルです)。しかし、私はその方法を知りません。Akka stream from ftp、行ごと
私はどんな助けにも感謝します。
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行が非常に長い場合は危険ですが)allowTruncation
はtrue
に設定され、CSVの末尾に改行がない場合に使用できますファイル。
result
ソースは、マテリアライズされると、改行文字なしで各行に対応するByteString
を生成します。ファイルにWindowsの行区切り文字( "\ r \ n")が含まれていると思われる場合は、これらの文字列を手動でトリミングする必要があります。
これ以上のコードを表示できますか? –