Parsowanie pliku

0

Mam kilka plików po kilka gigabajtów (~5GB per plik) . Każdy zawiera rekordy o N polach (N jest znane, ale zmienne per plik wejściowy).

  • Wartości pól otoczone są ".
  • Pola odseparowane są ;
  • Po rekordzie występuje znak \n.

W wartości pola mogą wystąpić znaki \n, ", ;. Znaki " występujące w wartościach pól są escapowane "". \n i ; nie są escapowane.

Doraźnie pliki wejściowe poprawiam przed dalszym przetwarzaniem:

  • " pojawiające się w wartości pola, zastąpić przez: ###QUOT###
  • \n nie będące separatorem rekordów , zastąpić przez : ###BREAK###

Docelowo ziomek, który produkuje pliki będzie musiał poprawić format.

Przykład poglądowy:
Wejście:
Dla N=4

"val11";"";"val13
a
b"";""
c
";"foo
"
"val21";"";"val22";"val23"

Wyjście:

"val11";"";"val13###BREAK###a###BREAK##b###QUOT###;###QUOT#####BREAK###c###BREAK###";"foo###BREAK###"
"val21";"";"val23";"val24"

W moim przypadku wybór padł na Perla.

Ciekaw jestem jak byście podeszli do tematu, gdyby przyszło je faktycznie poprawiać. Jaki byłby Wasz wybór (technologia, biblioteka)?

2

Zależy co bym miał z tym robić. Jak bardzo mi zależy na wydajności, czy kod odpalę raz i wyrzucę, czy będzie odpalany co pięć minut; co będzie się z tymi danymi później działo; czy mam wymagania wyryte w kamieniu, czy pisane po wodzie…

Jak mam wszystko w nosie, to pewnie Python, bo mam wrażenie, że to w nim stworzenie czegoś byle jak by mnie najmniej bolało.

1

Myslę że w dzisiejszych czasach pliki do jednokrotnego przetworzenia po 5 GB nie są dużym problemem (wczoraj mój interpreter WhiteSpace wpadł w nieskończoną pętlę i zajął 1T pamięci wirtualnej), więc jeśli pozwolili by mi wziąć co tylko chcę to wziąłbym Haskella (bo nie napisałem jeszcze produkcyjnego kodu w Haskellu a bardzo chcę). A jeśli nie, to wziałbym Scalę bo aktualnie zawodowo piszę w Scali

0

Może być perl, ale wygląda jak modelowe zastosowanie dla AWK, wyjdzie trochę zwieźlej i czytelniej niż w Perlu, o ile nie wchodzi w grę jakaś bardziej złożona logika.

https://it.wiedz.net.pl/unix/awk.html

Zadanie generalnie tak proste, że strosowanie biblioteki do tego to jakiś przerost formy nad treścią.

1 użytkowników online, w tym zalogowanych: 0, gości: 1