Vlákno názorů k článku Parser bankovních výpisů aneb hrátky s Ragel od Miloš - Známe názvy sloupců a vsadím se, že každý...

  • Článek je starý, nové názory již nelze přidávat.
  • 15. 2. 2008 17:22

    Miloš (neregistrovaný)
    Známe názvy sloupců a vsadím se, že každý má předepsaný formát. Rozdělit řetězec podle oddělovače a hodnoty přiřadit sloupcům není problém. Teprve PAK bych hodnotu upravoval,konvertoval a současně KONTROLOVAL, zda vyhovuje předepsané deklaraci sloupce. Vámi popsaná metoda je nejen kanónem na vrabce, ale navíc číselnému sloupci přiřadí řetězec jen proto, že někdo při pořizování udělal chybu! Smutný výsledek po takové námaze!

    Pokud jste chtěl pouze upozornit na existenci Ragelu a jeho možnosti, měl jste zvolit úplně jiný přístup.

  • 15. 2. 2008 18:25

    bez přezdívky
    Přiznám se, že moc nerozumím tomu, co se mi snažíte sdělit. Vždyť popisujete přesně tu metodu, kterou jsem použil, protože dostupné knihovny na parsování CSV v Ruby to dělají jinak (převádějí na odhadnutý datový typ rovnou, bez jakéhokoliv kontextu).

    A pokud víte, že každý sloupec bankovního výpisu ČS má předepsaný formát, budu Vám vděčný, pokud mne na ty informace nasměrujete. Já jsem nic rozumného nenašel a "variabilitu" formátu poznávám jen podle toho, že mi občas na něčem parser zhavaruje.

    Neřekl bych, že Ragel v tomto případě je kanón na vrabce. Zvažte, kolik úprav by bylo potřeba v Ragelu a kolik v ostatních případech např. pro parsování jen trochu obecnějšího případu, kdy se mohou v hodnotách vyskytnout escapované uvozovky nebo kdy hodnoty nemusejí být povinně v uvozovkách.
  • 15. 2. 2008 19:44

    Miloš (neregistrovaný)
    Určitě je předepsáno alespoň to, který sloupec musí být datumem a který číslem. (Nakonec to lze poznat i ze samotných názvů - přesnější formát není ani potřeba). Escapované uvozovky jsou pro rozdělení nepostatné - rozhodující jsou oddělovače. Pouze je potřeba zjistit, zda se tentýž oddělovač nevyskytuje také v uvozovkách jako součást hodnoty a v tom případě ho dočasně nahradit nebo escapovat. (I když bych se tomu divil - znamenalo by to, že byl zvolen zcela chybně. Ani to však není problém).

    Na vašem postupu mi vadí právě to, že je bezkontextový. Každá hodnota se přeci pojí s nějakým sloupcem a k tím i s jeho deklaraci typu. Pokud vím, že sloupec musí být číselný, musí být konvertovatelný na číslo i kdyby byl zapsán exponenciálně.(S tím si váš parser poradí?) Podstatné je, že typ konverze se musí řídit deklarací sloupce a nikoliv pouhým obsahem. Vy snad neprovádíte validaci vstupních dat? A pokud jí chcete dělat poději, budete znovu spouštět parser?

  • 15. 2. 2008 21:04

    bez přezdívky

    Nevím, zda bych to nazval, že je to předepsáno. No, ale OK, jakž takž se to dá odhadnout. Přesnější specifikaci formátu bych ale docela uvítal - když už se např. z nějakých záhadných důvodů ignoruje pro zápis data norma ISO8601, nebylo by špatné mít alespoň jistotu, že rok, měsíc a datum jsou pořád ve stejném pořadí.

    Co se týká oddělovačů, tak u CSV právě oddělovač se může v hodnotě vyskytovat - v tom případě musí být hodnota v uvozovkách.

    Podle mého názoru je tomu právě naopak - můj postup je kontextový. Vždyť v okamžiku, kdy KA přijme hodnotu ji rovnou páruju se jménem sloupce. V tom okamžiku bych mohl udělat i převod na příslušný datový typ (včetně případných oprav chyb ve formátování čísel), validaci, atd. Po načtení celého řádku lze provést zápis do databáze, případně další operace (např. daná transkace se přiřazuje plátci/příjemci). Zdrojový kód pro převod datových typů, validaci, práci s databází apod. v příkladu (na rozdíl od skutečné aplikace) pochopitelně není, protože se primárně netýká popisu KA v Ragelu a tím ani tématu článku.