Przepraszam za n00bness tego pytania, ale mam aplikację internetową, w której chcę wysłać potencjalnie duży plik na serwer i zlecić parsowanie formatu. Używam struktury Play20 i jestem nowy w Scala.Parsowanie pliku z BodyParser w Scala Play20 z nowymi liniami
Na przykład, jeśli mam plik CSV, chciałbym podzielić każdy wiersz przez "," i ostatecznie utworzyć List[List[String]]
z każdym polem.
Obecnie myślę, że najlepszym sposobem na zrobienie tego jest BodyParser (ale mogę się mylić). Mój kod wygląda mniej więcej tak:
Iteratee.fold[String, List[List[String]]]() {
(result, chunk) =>
result = chunk.splitByNewLine.splitByDelimiter // Psuedocode
}
Moje pierwsze pytanie brzmi: w jaki sposób poradzić sobie z sytuacją, jak poniżej, gdzie bryła została podzielona na środku linii:
Chunk 1:
1,2,3,4\n
5,6
Chunk 2:
7,8\n
9,10,11,12\n
My Drugie pytanie brzmi: czy napisanie własnego BodyParser jest właściwym sposobem postępowania w tej sprawie? Czy istnieją lepsze sposoby analizowania tego pliku? Moją główną obawą jest to, że chcę, aby pliki były bardzo duże, więc mogę w pewnym momencie opróżnić bufor i nie przechowywać całego pliku w pamięci.
Ten kod wygląda obiecująco, ale zajmie mi trochę zrozumieć ... wszystkich operatorów Scala daje duży krzywej uczenia się. –
Absolutnie nie, możesz przepisać poprzedni kod zastępując><> przez compose, & >> przez transformację, | >>> przez uruchomienie. Operatory te nie pochodzą z scala, ale są metodami odpowiednich obiektów. – Sadache
Ach tak, ponownie przeczytałem dokumenty na temat Enumeratees i ma to sens. Dzięki! –