Portál AbcLinuxu, 12. května 2025 21:34
DATUM 1.1.2006
KATEGORIE A
neco uplne jineho
neco uplne jineho
UDAJ udaj1
neco uplne jineho
neco uplne jineho
neco uplne jineho
neco uplne jineho
neco uplne jineho
UDAJ udaj2
neco uplne jineho
neco uplne jineho
UDAJ udaj3
neco uplne jineho
neco uplne jineho
neco uplne jineho
KATEGORIE B
neco uplne jineho
neco uplne jineho
neco uplne jineho
UDAJ udaj4
neco uplne jineho
neco uplne jineho
UDAJ udaj5
neco uplne jineho
neco uplne jineho
neco uplne jineho
UDAJ udaj6
neco uplne jineho
neco uplne jineho
DATUM 2.1.2006
neco uplne jineho
neco uplne jineho
UDAJ udaj7
neco uplne jineho
neco uplne jineho
neco uplne jineho
KATEGORIE C
neco uplne jineho
neco uplne jineho
neco uplne jineho
UDAJ udaj8
A co potrebuji? Potrebuji ziskat UDAJ a zaroven potrebuji vedet V JAKE JE KATEGORII a JAKE MA DATUM. Datum a kategorii ma podle toho, ktere datum a kategorie je mu nejblize nadrazena.
Takze z tohoto textu, co jsem uvedl potrebuju ziskat toto:
udaj1 A 1.1.2006
udaj2 A 1.1.2006
udaj3 A 1.1.2006
udaj4 B 1.1.2006
udaj5 B 1.1.2006
udaj6 B 1.1.2006
udaj7 B 2.1.2006
udaj8 C 2.1.2006
Co jsem zkousel?
Vytvoril jsem 3 regularni vyrazy, po jednom pro nalezeni UDAJE, KATEGORIE a DATUMU. A spojil je pomoci alternace |. Jenze oni se regularni vyrazy chovaji jinak nez jsem ocekaval, a hledaji stale pouze podle 1. regularniho vyrazu a k 2. prikroci az kdyz 1. vubec nematchne. Lze toto nejak zmenit?
Dale me napadlo, zda neni mozne hledat od urcite pozice. Prochazel bych text znak po znaku a u kazdeho znaku bych zkusil aplikovat tyto 3 regularni vyrazy (asi dost neefektivni, ale to by se dalo skousnout) a kdyby selhaly, posunul bych se o znak dal. Jde to nejak?
A nebo jsem jenom blbej a reseni je uplne jednoduchy?
Diiky
A proč sem proboha nenapíšete co přesně chcete dělat? Tyhle "abstraktní problémy" tady poslední dobou začínají bejt děsná móda... Pak to dopadá přesně takhle - 0.5kB regulárníma výrazama, který stejně nevedou k cíly.
for (split /(A|B|C)/, $riadok) { if (/A/) { ...; next; } if (/B/) { ...; next; } if (/C/) { ...; next; } }
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.