TextLib DBPROC - Online TextLib rekord modosito/lekerdezo A program hasznalata: ===================== dbproc [--test] [--silent] muveletek|@listafajl muveletek : ""-ben, ;-vel elvalasztott utasitasok listafajl : muveleteket tartalmazo fajl A sorvege jel is lezarja a muveletet, igy a listafajlban nem szukseges a ; kitevese. A program az exe melletti dbproc.cfg-t hasznalja, ebben kell megadni a szerver cimet es a felhasznalo nevet, illetve jelszavat. Bovebben lasd a file vegen. Működés: ======== a) Egy konkrét rekorddal lehet csinálni valamit. b) Egy találati halmaz minden rekordjával lehet dolgozni. A halmazt pl. kereséssel, dref-ek felsorolásával, egy dolgozó mentett halmazaként, ... lehet meadni, Ujdonsagok: =========== - 1624: mindenfele mezore lehet VALOGASS mezo ~= ertek feltetel. Eddig csak stringre lehetett. - 1624: DATE es REP_DATE mezore is lehet valogass mezo=X--Y (intervallum - nyilt es zart) Egyszeru peldak: ================ dbproc 'get ah1.szallcim" dbproc 'set ah1.szallcim=\"Kossuth utca 1.\"' dbproc 'set ah1.szallvaros=Miskolc ha szallcim == Budapest' dbproc 'sel ah1.szallvaros=Miskolc ha szallcim ures' dbproc 'del ah1.szallvaros ha szallcim ures' dbproc 'delrec p12432.2' Listafajl peldak: ================= # Minden Egri Csillagok c. konyvnek a megjegyzesebe beir valamit keress cim="egri csillagok" set megjegyzes[new]="valami" # "F1" kezdetu vonalkodos peldanyok fiok-janak beallitasa keress vonalkod="F1?" set fiok=az1243 # b1 es b2 rekord focime 'konyvcim' lesz # Ha ures a FOCIM mezo, akkor hiba! Uj ismetlodes: FOCIM[new]= DREF b1,b2 set FOCIM[0]=konyvcim # minden dokumentum focimenek kiirasa KERESS ahol cim=biblia RT dokumentum GET FOCIM # Felesleges megjegyzesek kitorlese. Csak azokat az ismetlodeseket torli # amelyek megfelelnek a feltetelnek. Tobbi megmarad KERESS megjegyzes="#HM3-Info?" DEL megjegyzes ha megjegyzes *= "#HM3-Info*" # Adott ismetlodes torlese DREF b234 DEL megjegyzes[2] # /tmp/drefs.txt fajlban felsorolt drefek kozul ami 'kotet', kiirja a focimet LIST /tmp/drefs.txt DF KOTET GET FOCIM # Mezo utolso ismetlodesre (nem ujat csinal, a meglevot irja at) DREF b1 SET alcim[last]="utolso ismetlodes" # Mezo utolso ismetlodese utan beszur egy ujat DREF b1 SET alcim[new]="elozo utolso utani" # Rekordok torlese - ha nincsenek fontos kapcsolatai DREF x123.2,x1232 DELREC # Rekordok torlese feltetellel DREF p1234,p4567 DELREC HA KOTETE URES # Adott rekord torlese feltetellel DELREC p1234 HA KOTETE URES # Adott rekord torlese feltetel nelkul - ha hivatkozott nem torlodik! DELREC p1234 # Rekord torlese - mindenkepp. Ha hivatkozott, akkor is. Vigyazz vele! DREF x123.2,p111 KILLREC # Rekord torlese - mindenkepp. Ha hivatkozott, akkor is. Vigyazz vele! KILLREC x123.3 # rekord kiirasa fajlba, olyan formaban, hogy dbproc-al be lehet tolteni # A fajl vegehez irunk hozza. APPEND nelkul folulirnank... OUTPUT /tmp/a23.txt dref a23 dumprec # Ismetlodes pelda. Ha nincs megadva az utolso ismetlodes, akkor a lekerdezes # a teljes mezore vonatkozik. Csak az utolso ismetlodes megadasat lehet # elhagyni. dref ac6410 get intkent get intkent[0].beiratkozva get intkent[0].beiratkozva[0] get intkent[0].beiratkozva[0].u_stat get intkent[0].beiratkozva[0].u_stat[0] get intkent[0].beiratkozva[0].u_stat[0].tartozik # eredmenye peldaul: # DREF: ac6410 # [=] ac6410: GET intkent : (1) { INTEZMENY=ah1 } # [=] ac6410: GET intkent[0].beiratkozva : (1) { ALL=s24872 } # [=] ac6410: GET intkent[0].beiratkozva[0] : { ALL=s24872 } # [=] ac6410: GET intkent[0].beiratkozva[0].u_stat : (1) { TARTOZIK=0 } # [=] ac6410: GET intkent[0].beiratkozva[0].u_stat[0] : { TARTOZIK=0 } # [=] ac6410: GET intkent[0].beiratkozva[0].u_stat[0].tartozik : 0 # Uj rekord letrehozasa: # newrec utan adatfajlt lehet megadni es egy opcionalis azonositot, amire # kesobb datarefkent lehet hivatkozni. A blokkon belul az uj rekord kitoltheto. # Kesobbiekben a megadott $azonosito-ra csak SET kifejezes jobb oldalan # lehet hivatkozni. $azonosito kis-nagybetu erzekeny; $azonosito != $Azonosito newrec kotet $ujkotet set kotes="fűzött" # Frissen bevitt rekord hozzarendelese, feltetellel dref p1234, p5678 set kotete=$ujkotet ha kotete ures # Halmazbol az elso dref kiszedese firstdref $xx "keress kategorianev=felnott" dref ac1234 set kategoria=$xx # Csak dataref kiirasa, blokkon belul dref p1234 GET # Egyeb kiirasok PRINT "Blokkon kivuli kiiras" # Blokkon belul $current mindig az aktualis dataref dref p1234 PRINT "Az aktualis dref: $current" # Halmaz mentese dref p1234 saveth viki peldany "Egy darab peldany" # Keresokerdes eredmenyenek mentese keress cim=alma saveth viki halmaz # Halmaz hasznalata th viki halmaz get # Mentett halmaz masolasa th viki halmaz saveth bela halmaz "Viki halmazanak masolata" # Formatummal kiiras, output file # A fajl vegehez irunk hozza. APPEND nelkul folulirnank... OUTPUT "/tmp/x.txt" APPEND keress szemelynev=kovács? PRINTF "Nev:$1,szul:$2,dref:$current",NEV,SZULIDO # Ha pl. egy masik dbproc-nak csinalunk adatfajlt. " == \u0022 ;-) PRINTF "set SZULIDO=\"$1\"",SZULIDO PRINTF "set SZULIDO=\u0022$1\u0022",SZULIDO # mező ismétlődésszám vizsgálat OUTPUT "email.txt" (dref=ac4856) PRINTF "$1-$2",EMAIL,INTKENT[0].VONALKOD HA EMAIL #> 0 # Dataref csere minden dref mezoben (mirol mire): dref b1234 DREFCHG x14323 x1212 # Dataref csereben lehet valtozo (v2.1.1.8) DREFCHG $from $to # Olvasi kategori csereje olvasoban firstdref $lakos "keress okateg kategorianev=Lakosság?GJK" firstdref $nyug "keress okateg kategorianev=Nyugdíjas?GJK" keress kategoriaja="Nyugdíjas?GJK" drefchg $nyug $lakos # Kilepes a programbol feltetel eseten keress szerzo="coelho?" exit 1 ha FOCIM ~= "(alma|korte)fa" # tartozas dref torlese olvaso barmely mezojebol dref ac12534 killdref ca1432.2 # Kolcsonzes rekord kereses # ELVESZT_TARTOZAS mezo torlese # A KOLCSONZO olvaso rekordjabol a tartozas dref torlese s0=keress felszdatum=--MA() valogass s0 kolcs ELVESZT_TARTOZAS nemures var $xx ELVESZT_TARTOZAS del ELVESZT_TARTOZAS var $user KOLCSONZO rec $user killdref $xx # rendszergazda dolgozoban a KISTERSEGEI mezo beallitasa # var $xx csak dref-re jo most, nem tetszoleges stringre! var $user 'ad1' keress kisterseg intezmenynev=? rec $user set KISTERSEGEI[new]=$current Halmaz peldak: ============== # Ha nem volt meg halmaza, ez lesz az aktualis. Kulonben nem. # viki az olvaso azonositoja # Halmaz neve a default (dbproc) lesz # Halma megjegyzese a keresokerdes maga lesz keress cim=biblia saveth viki # Ez biztos nem az aktualis halmaz lesz # 'halmazka' lesz a halmaz neve dref ad1 ad23.2 saveth vkik halmazka # Elozo mentett halmazt szedjuk elo, azzal dolgozzunk th viki halmazka get nev A dokumentacioban hasznalt tipusok, jelolesek: ============================================== [opcionalis] : a megadott szoveg nem kotelezo (kiveve ismetlodes) : a megadott szoveg kotelezo dref: dataref szoveges formaban, pl. ah1.2, b34, ac342 mezo: rekord tipusatol fuggoen MEZO, MEZO[ism], MEZO[ism].ALMEZO, stb. ismetlodes: a mezo ismetlodesenek sorszama ismetelheto mezo eseten. Az elso mezo sorszama 0, az utolsoe N-1. Ertelmezettek az alabbi pszeudo mezok is: 'new' - uj ismetlodes (modositaskor) 'last' - utolso letezo ismetlodes (lekerdezeskor/modositaskor) 'all' - lekerdezeskor es torleskor az osszes ismetlodest jelenti. ertek: szoveg formatumu ertek. Ha a mezo szoveges, akkor idezojelek koze kell tenni, es backslash-al kell escapelni a stringben '"' es '\' karaktereket. Ha a ertek szoveges, de csak alfanumerikus karaktereket es '_' jelet tar- talmaz, akkor nem szukseges idezojelbe tenni. feltetel: HA mezo URES|NEMURES HA mezo == != < <= > >= ~= *= #> #< #= ertek thnum: talalati halmaz sorszam dfile: rekord adatfajl neve (pl. KOTET) rectype: rekord tipus neve (pl. DOKUMENTUM) keresokerdes: TextLib keresonyelv formatumu lekerdezes szures: DF dfile | RT rectype halmaz: DREF dref,dref... | LIST listafajl | THNUM thnum | keresokerdes | TH user [halmaznev] ';' : sorvege jel, illetve ures sor helyett is hasznalhato '#' : komment jel, ha ez a sorban az elso, nem whitespace karakter akkor az adott sort figyelmen kivul hagyja Muveletek: muvelet egymasutani vegrehajtasa a bemenet altal adott sorrendben Muvelet: Egyszeru muvelet vagy halmaz muvelet, sorvege jellel lezarva Egyszeru muvelet: egy rekordot modosit, formatuma: GET dref.mezo [feltetel] SET dref.mezo = ertek [feltetel] DEL dref.mezo [feltetel] Halmaz muvelet: halmazon megy vegig, formatuma: halmaz [szures1] GET mezo [feltetel] [szures2] mezo = ertek [feltetel] [szuresN] DEL mezo [feltetel] ... Halmaz mentese - azonositoju dolgozonak neven megjegyzessel hoz letre egy mentett halmazt. Ha a nev nincs megadva akkor a halmaz neve 'dbproc', ha a komment akkor pedig komment helyett a halmaz leirasa lesz ott; ie.: a kerdes amibol kepzodott a halmaz. halmaz [Halmaz muveletek] saveth user [halmaznev] [komment] Halmaz hasznalata - ha nincs megadva nev akkor a dolgozo aktualis mentett halmazaval dolgozik. TH user [nev] [Halmaz muveletek] Formatumok: =========== text: asciiszoveg, "Hosszu szoveg", "Hosszu szoveg \"idezojellel\"" char, byte: 0..255 word/attr: 0..65535 coded: 0..255 int: -32768..32767 long: -2^31...2^31-1 date: YYYYMMDD dataref: dref Feltetelek: =========== HA mezo URES : mezo nincs a rekordban HA mezo NEMURES : mezo ki van toltve HA mezo == != < <= > >= ertek : sima hasonlitas HA mezo ~= ertek : regularis kifejezes, pl.: "alma.(meggy|banan).korte" HA mezo *= ertek : mcsere-szeru feltetel, pl.: "alma*korte" Ha mezo nem konkret ismetlodesre vonatkozik, akkor a feltetel megfeleltese a mezo osszes ismetlodesere vonatkozik. Ha a feltetel modositas resze, akkor csak a megegyezo ismetlodesek modosulnak. Szoveges mezo eseten figyelmen kivul hagyja a kis es nagy betuk kulonbozoseget. ~= esetben a mintaban () kozt szereplo mintanak megfelelo szoveget a mezobe a $1, $2, stb-vel lehet beszurni. pl: Ha minta: (.*)X(.*) A szoveg: szerelesXvillany Akkor a "a $2$1 multja" erteke ez lesz: "a villanyszereles multja" Feltetel peldak: ================ DREF p1,p2,p3 SET LELTARISZAM=semmi HA VONALKOD ures SET LELTARISZAM=valami HA VONALKOD nemures SET LELTARISZAM=megfelel HA VONALKOD *= "ez*az" SET LELTARISZAM=megfelel HA VONALKOD ~= "(alma|korte)fa" dref b2; get focim [=] b2: GET focim : (1) Villanyszereles dref b2; set focim[0]="Gaz$1 az $1" ha focim ~= "Villany(.*)" [+] b2: SET focim[0] = "Gaz$1 az $1" HA focim ~= "Villany(.*)" dref b2; get focim [=] b2: GET focim : (1) "Gazszereles az szereles" !!! Ezzel lehet pl. egyik mezo erteket egy masik mezobe berakni (dref is!): dref p1234; set tulajdonos="$1" HA konyvtar ~= "(.*)" Vagy egy mezo ertekenek reszletet felhasznalva kitolteni masik mezot: dref p1234; set vonalkod="VKOD$1xx" HA LELTSZAM ~= "(.*)/2001" A kiirasok formatuma: ===================== Modositas jele: [+] Modosult [-] Hiba [=] Nem modosult Futtatasi hibak: [Hiba rovid leirasa (hibakod)] Forditasi hiba: HIBA: [Hiba rovid leirasa (hibakod)] at line L near 'text' L: forras fajl hibas soranak szama (1-tol indul) N: ismetlodesek szama (0..N-1) Ha mezo almezot hataroz meg, akkor a kiiras: Nem ismetelheto vagy pontosan meghatarozott: { fomezo=dref } Egyebkent: (N) { fomezo0=dref0 ; fomezo1=dref1 ; ... ; fomezoN-1=drefN-1 } Nem ismetelheto, vagy ismetelheto mezo megadott ismetlese: [=] dref: GET mezo : ertek Ismetelheto mezo: [=] dref: GET mezo : (N) ertek0 ; ertek1 ; ... ; ertekN-1 Nem teljesulo feltetel: [=] dref: GET mezo feltetel Hiba, feltetel nelkul: [=] dref: GET mezo [Hiba rovid leirasa (hibakod)] Hiba, feltetellel: [=] dref: GET mezo feltetel [Hiba rovid leirasa (hibakod)] Feltetel nelkul, sikeres: [+] dref: SET mezo = ertek Feltetellel, sikeres: [+] dref: SET mezo = ertek feltetel Feltetel nelkul, sikertelen: [-] dref: SET mezo = ertek [Hiba rovid leirasa (hibakod)] Feltetellel, sikertelen: [-] dref: SET mezo = ertek feltetel [Hiba rovid leirasa (hibakod)] Feltetel nem teljesul: [=] dref: SET mezo = ertek feltetel Feltetel nelkul, sikeres: [+] dref: DEL mezo Feltetel nelkul, siketelen: [-] dref: DEL mezo [Hiba rovid leirasa (hibakod)] Feltetellel, sikeres: [+] dref: DEL mezo feltetel Feltetellel, siketelen: [-] dref: DEL mezo feltetel [Hiba rovid leirasa (hibakod)] Feltetel nem teljesul: [=] dref: DEL mezo feltetel dbproc.cfg pelda ~~~~~~~~~~~~~~~~ # dbproc.cfg network=tcp servertcp=10.3.1.12:11345 user = bela password = titok loglevel = 2 logchannels = 0x7fffffff logpath = /var/log/textlib