Vlákno názorů k článku Parser bankovních výpisů aneb hrátky s Ragel od Palo - Priklad bol asi zvoleny nevhodne. Toto som urobil...

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

    Palo (neregistrovaný)
    Priklad bol asi zvoleny nevhodne. Toto som urobil rychlejsie nez som precital clanok. Pracu s jednotlivymi hodnotami group(N) uz asi zvladne kazdy. Ja tomu clanku asi nerozumiem.
    __________________________________________________
    import java.util.regex.*;
    import java.io.*;

    public class Do {
    public static void main(String arg[]) throws java.io.IOException {
       BufferedReader d=new BufferedReader(new InputStreamReader(System.in));

       // Parse header
       Pattern p=Pattern.compile("\"([^\"]+)\",\"(.+)\"");
       for (Matcher m=p.matcher(d.readLine()); m.matches(); m=p.matcher(d.readLine())) {
          System.out.println(""+m.group(1)+"\t"+m.group(2));
       }

       // Parse TX
       p=Pattern.compile("\"([^\"]+)\",\"([^\"]+)\",\"([^\"]+)\",\"([^\"]+)\",\"([^\"]+)\"");
       for (Matcher m=p.matcher(d.readLine()); m.matches(); m=p.matcher(d.readLine())) {
          System.out.println(""+m.group(1)+"\t"+m.group(2)+"\t"+m.group(3)+"\t"+m.group(4)+"\t"+m.group(5));
       }
    }
    }
    __________________________________________________
  • 15. 2. 2008 9:58

    bez přezdívky
    Máte v podstatě pravdu, že pro soubory přesně tohoto formátu by to takhle bylo jednodušší. Ale příklad je úmyslně zjednodušen a navíc ten konečný automat z Ragelu je o něco málo obecnější, než Vaše řešení - zpracuje v druhé části libovolný počet polí. BTW, těch polí je víc než 5 - řádky ve výpisu CSV souboru jsou pro přehlednost zkráceny - všimněte si třech teček.

    Vaše řešení má IMHO oproti mému ještě další nevýhodu: zkuste si (když už je to cvičení :-) ty regulární výrazy upravit tak, aby akceptovaly v hodnotě pole uvozovky (obvykle se zdvojují nebo se nějak escapují např. dvojice backslash-uvozovky). Možná, že to není složité (nepovažuji se zrovna za regexp guru), ale přesto si myslím, že úpravy tohoto typu jsou v gramatice Ragelu podstatně jednodušší.
  • 15. 2. 2008 23:53

    Palo (neregistrovaný)
    Treba skomplikovat vyraz pre obsah uvodzoviek na ((([^\"]*)|(\\\"))*) a potom to poziera korektne aj \".
  • 15. 2. 2008 19:39

    Jan Molič (neregistrovaný)
    Fakt netuším, co proti autorovi článku všichni máte. Nepoužil reguláry, nepoužil sed. Nepoužil Javu. Porušil kodex? Naopak myslím, že celkem přehledně demonstroval použití univerzálního parseru. Kolikrát člověk řešil nějaký šablonovací systém a potřeboval právě něco takového (a ne všichni se to učili ve škole, takže ne všichni vědí, že podobné parsery vůbec existují).
    A vzhledem k tomu, že parsování souboru sedem může být časově náročnější, autorův přístup oceníte, zejména děláte-li hodně bankovních operací za sekundu :-)