Predtym som cital ( http://www.onlamp.com/pub/a/python/2006/01/26/pyparsing.html ) o module pyparsing ( http://pyparsing.wikispaces.com/), ale zial nemal som cas sa s tym zaoberat. Doteraz parsujem vsetko iba regularnymi vyrazmi. Zda sa mi to najrychlejsie riesenie - i ked nie najlepsie a ma to tiez svoje hranice a uskalia.
Dik za info -o yapps-e som doteraz nepocul. Nevidim dokumetaciu Yappsu na tej stranke. preto sa chcem spytat: 1. aky je vstup pre Yapps? Nejako zapisana gramatika? 2. pouzil si Yapps1 alebo Yapps2 3. Nemas nejaky kratky priklad ako si parsoval to SQL? s pozdravom Roman Jan Janech <[EMAIL PROTECTED]> Sent by: [EMAIL PROTECTED] 01.02.2007 16:51 Please respond to Konference PyCZ <[email protected]> To Konference PyCZ <[email protected]> cc Subject Re: [python] Problem s regularnym vyrazom Na taketo veci sa hodia skor parser-generatory ako regularne vyrazy. Ja pouzivam YAPPS (http://theory.stanford.edu/~amitp/yapps/). Konkretne SQL som s nim uz parsoval. [EMAIL PROTECTED] wrote: > Rad by som tymto oslovil odbornikov na regularne vyrazy. > > Extrahujem datove polia tabulky cez regularny vyraz takto: > --------------------------- skript --------------------------- > import sys,re > > sql_statement='''CREATE TABLE IBPDDB071/R004660V > (PERSONNR DECIMAL (10, 0) NOT NULL WITH DEFAULT, LFDNR1 DECIMAL > (3, 0) NOT NULL WITH DEFAULT, VOTYP CHARACTER (1) NOT > NULL WITH DEFAULT, BSSTAMMNR DECIMAL (7, 0) NOT NULL WITH > DEFAULT,BSVNR DECIMAL (2, 0) NOT NULL WITH DEFAULT );''' > regexp_sql_create=\ > re.compile(r"^\s*CREATE\s+TABLE\s+" > r"(?P<library>[A-Z0-9]+)\s*[/.]\s*(?P<file>[A-Z0-9]+)\s*" > r"\((?P<tbl_field_def>.*)\)\s*") > > result=regexp_sql_create.search(sql_statement) > if result == None: > # CREATE TABLE statement not valid ! > print "SQL CREATE TABLE statement is not valid !!!" > sys.exit() > else: > # Parse data from RegExp > library=result.group('library') > print "Library=%s" % library > table=result.group('file') > print "Table=%s" %table > table_field_def=result.group('tbl_field_def') > print "Field Definitions=%s" % table_field_def > ------------------------ konec skriptu ------------------------ > > Potom definicie dat. poli dalej pracovavam. > Toto by fungovalo, az na to ze SQL-skript je vygenerovany a okrem CREATE > TABLE (...); moze obsahovat aj LABEL ON (...); > takze moze vyzerat takto: > > sql_statement='''CREATE TABLE IBPDDB071/R004660V > (PERSONNR DECIMAL (10, 0) NOT NULL WITH DEFAULT, LFDNR1 DECIMAL > (3, 0) NOT NULL WITH DEFAULT, VOTYP CHARACTER (1) NOT > NULL WITH DEFAULT, BSSTAMMNR DECIMAL (7, 0) NOT NULL WITH > DEFAULT,BSVNR DECIMAL (2, 0) NOT NULL WITH DEFAULT ); Label > on IBPDDB071/R004660V(PERSONNR IS 'PERSONNR', LFDNR1 IS 'LFDNR1', > VOTYP IS 'VOTYP', BSSTAMMNR IS 'BSSTAMMNR', BSVNR IS > 'BSVNR');''' > > Vtedy mi horeuvedeny regexp matchuje (pretoze je greedy) vsetko, takze > rozpozna vsetko od 'CREATE TABLE(' az po poslednu zatvorku ')' stringu > t.j. '..); LABEL ON(..' ale ja potrebujem aby rozpoznal len to co je v > tele CREATE TABLE. > > Vie mi niekto poradit ako napisat ten regularny vyraz aby robil co > potrebujem? > Mgr. Ing. Roman MIKLÓŠ > Prvá stavebná sporiteľňa a.s. > Bajkalská 30, P. O. Box 48 > 829 48 Bratislava 25 > Tel.: +421/ 2 / 582 31 174 > Fax: +421/ 2 / 582 31 109 _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python Mgr. Ing. Roman MIKLÓŠ Prvá stavebná sporiteľňa a.s. Bajkalská 30, P. O. Box 48 829 48 Bratislava 25 Tel.: +421/ 2 / 582 31 174 Fax: +421/ 2 / 582 31 109 _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
