Существует стандартный способ разделить 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 нет новой строки файл.
Источник, если материализован, будет производить ByteString
s, соответствующий каждой строке, без символа новой строки. Если вы ожидаете, что ваши файлы будут содержать разделители строк Windows («\ r \ n»), вам придется обрезать эти строки вручную.
Можете ли вы показать немного больше кода, чем это? –