Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Copyright, 1999 © Szlávi Péter Szövegfeldolgozás 1.

Hasonló előadás


Az előadások a következő témára: "Copyright, 1999 © Szlávi Péter Szövegfeldolgozás 1."— Előadás másolata:

1

2 Copyright, 1999 © Szlávi Péter Szövegfeldolgozás 1.

3  99.03.04.Programozásmódszertan -- Szövegfeldolgozás2 Tartalomjegyzék 0. Bevezetés (specifikációk) 1. A szövegtípusok szűkebb értelmezése 1.1. A karaktertípus 1.2. A szövegtípus 1.3. A szövegfájltípusok 1. A szövegtípusok szűkebb értelmezése 1.1. A karaktertípus 1.2. A szövegtípus 1.3. A szövegfájltípusok 2. A szövegtípusok tágabb értelmezése 2.1. Karaktertípus 2.2. Szövegtípus 2.3. „Lineáris” szövegfájltípusok 2. A szövegtípusok tágabb értelmezése 2.1. Karaktertípus 2.2. Szövegtípus 2.3. „Lineáris” szövegfájltípusok

4  99.03.04.Programozásmódszertan -- Szövegfeldolgozás3 0.0. Bevezetés (specifikációk) 0. A téma fontossága: emberrel történő kommunikáció Tipikus feladatok, problémák: Konverzió - szöveg és a belső ábrázolás között (Típusspecifikáció: a „szöveg” ábrázolása + be- menet/kimenet… műveletei; pl. felsorolási típus, összetett típus, formázott input - ürlap, 3D input…) Szűrés - jelek elhagyása Tömörítés - „invertálható” szűrés Formázás - igazítások, tördelések,...

5  99.03.04.Programozásmódszertan -- Szövegfeldolgozás4 0.0. Bevezetés (folytatás) 0. A problémák forrása, hogy az EMBER * speciális berendezésen keresztül kommunikál a géppel, amely jelenként teszi elérhetővé, beírhatóvá az információt; * az információt egy sajátos hierarchiában fogja föl, amelynek csak legalacsonyabb szintjén építőelem a jel (karakter); s efölött –domináns elemként– hasz- nálja a szó, a mondat... építőelemeket; * a megjelenő információval szemben támaszt pusztán esztétikai kívánalmakat is, amely információt nem hordozó „töltelékjelek” bonyolult elhelyezésével oldható meg;

6  99.03.04.Programozásmódszertan -- Szövegfeldolgozás5 0.0. Bevezetés (folytatás) 0. és a BERENDEZÉS * rákényszerít a szövegre további hierarchikusan rendezhető fogalmakat, mint a sor, a lap és a puffer (s ezek nem „harmonizálnak” az ember alkotta fogalmakkal). * megkívánhatja a szöveg lehető legtömörebb ábrázo- lását is.

7  99.03.04.Programozásmódszertan -- Szövegfeldolgozás6 0.0. Bevezetés (folytatás) 0. Szövegek = speciális típusba tartozó objektumok Szövegféleségek típuscsalád-specifikációi = modulok Típuskategóriák:„Feldolgozási szint”: karakter,  szűkebb értelembenkarakter,  szűkebb értelemben szöveg,  tágabb értelembenszöveg,  tágabb értelemben szövegfile.szövegfile.

8  99.03.04.Programozásmódszertan -- Szövegfeldolgozás7 1.1. A szövegtípusok szűkebb értelmezése 1.1. A karaktertípus 1. ExportModul Karakter: FüggvénySorszám(Konstans c:Karakter): Byte Karakter(Konstans c:Byte): Karakter Következő(Konstans c:Karakter): Karakter Előző(Konstans c:Karakter): Karakter FüggvénySorszám(Konstans c:Karakter): Byte Karakter(Konstans c:Byte): Karakter Következő(Konstans c:Karakter): Karakter Előző(Konstans c:Karakter): Karakter EljárásOlvas(Változó f:InpSzövegFile, Változó c:Karakter) Ír(Változó f:OutSzövegFile, Konstans c:Karakter) EljárásOlvas(Változó f:InpSzövegFile, Változó c:Karakter) Ír(Változó f:OutSzövegFile, Konstans c:Karakter) Operátor:=(Változó c1:Karakter, Konstans c2:Karakter) =(Konstans c1,c2:Karakter): Logikai <(Konstans c1,c2:Karakter): Logikai Operátor:=(Változó c1:Karakter, Konstans c2:Karakter) =(Konstans c1,c2:Karakter): Logikai <(Konstans c1,c2:Karakter): Logikai Modul vége. A modul fogalmát l. itt: http://digo.inf.elte.hu/~szlavi/PrM2felev/ Pdf/PrMea2_2.pdfhttp://digo.inf.elte.hu/~szlavi/PrM2felev/ Pdf/PrMea2_2.pdf 1.3. fejezetében http://digo.inf.elte.hu/~szlavi/PrM2felev/ Pdf/PrMea2_2.pdf

9  99.03.04.Programozásmódszertan -- Szövegfeldolgozás8 1.1. A karaktertípus (folytatás) Megvalósítási lehetőségek: fixhosszúságú kód (pl. 5-bites Telexkódban betű-, számváltó jelek; UNICODE; egyéb érdekességekről: http://homepages.cwi.nl/~dik/english/codes/stand.html#ccitt )fixhosszúságú kód (pl. 5-bites Telexkódban betű-, számváltó jelek; UNICODE; egyéb érdekességekről: http://homepages.cwi.nl/~dik/english/codes/stand.html#ccitt ) UNICODE http://homepages.cwi.nl/~dik/english/codes/stand.html#ccitt UNICODE http://homepages.cwi.nl/~dik/english/codes/stand.html#ccitt változó bitszámú kód (pl. Morse-kód; „dinamikus” kód: Huffman-kód; problémák a Sorszám és az „inverz” függvénye, a rendezés körül).változó bitszámú kód (pl. Morse-kód; „dinamikus” kód: Huffman-kód; problémák a Sorszám és az „inverz” függvénye, a rendezés körül).Morse-kódHuffman-kódMorse-kódHuffman-kód

10  99.03.04.Programozásmódszertan -- Szövegfeldolgozás9 1.1. A szövegtípusok szűkebb értelmezése 1.2. A szövegtípus 1. ExportModul Szöveg: KonstansMaxSzövegHossz : PozEgész(???) KonstansMaxSzövegHossz : PozEgész(???) [ csak bizonyos ábrázolás esetén, sőt generic-paraméter is lehet ] FüggvényHossz(Konstans s:Szöveg): Egész FüggvényHossz(Konstans s:Szöveg): Egész Része?(Konstans mi,minek: Szöveg): Logikai Változatok a szövegtípus szelekciós műveleteire: A.Első(Konstans s: Szöveg): Karakter Elsőutániak(Konstans s: Szöveg): Szöveg B.Eleje(Konstans s: Szöveg, ig: Egész): Szöveg Vége(Konstans s: Szöveg, tól: Egész): Szöveg Része(Konstans s: Szöveg, tól,ig: Egész): Szöveg C.Jele(Konstans s: Szöveg, dik: Egész): Karakter Hol(Konstans mi, minek:Szöveg):Egész

11  99.03.04.Programozásmódszertan -- Szövegfeldolgozás10 1.2. A szövegtípus Operátor+(Konstans s1,s2: Szöveg): Szöveg +(Konstans s1: Szöveg, c: Karakter): Szöveg +(Konstans c: Karakter, s1: Szöveg): Szöveg :=(Változó s1: Szöveg, Konstans s2: Szöveg) :=(Változó s: Szöveg, Konstans c: Karakter) =(Konstans s1,s2: Szöveg): Logikai <(Konstans s1,s2: Szöveg): Logikai Operátor+(Konstans s1,s2: Szöveg): Szöveg +(Konstans s1: Szöveg, c: Karakter): Szöveg +(Konstans c: Karakter, s1: Szöveg): Szöveg :=(Változó s1: Szöveg, Konstans s2: Szöveg) :=(Változó s: Szöveg, Konstans c: Karakter) =(Konstans s1,s2: Szöveg): Logikai <(Konstans s1,s2: Szöveg): Logikai EljárásOlvas(Változó f: InpSzövegFile, Változó s: Szöveg) Ír(Változó f: OutSzövegFile, Konstans s: Szöveg) SorÍr(Változó f: OutSzövegFile, Konstans s: Szöveg) EljárásOlvas(Változó f: InpSzövegFile, Változó s: Szöveg) Ír(Változó f: OutSzövegFile, Konstans s: Szöveg) SorÍr(Változó f: OutSzövegFile, Konstans s: Szöveg) Modul vége. probléma: hol a beolvasás vége? Inkább: SorOlvas! SorOlvas

12  99.03.04.Programozásmódszertan -- Szövegfeldolgozás11 1.2. A szövegtípus (folytatás) Megvalósítási lehetőségek: Típus Szöveg = Lista(Karakter)Típus Szöveg = Lista(Karakter) Konstans MaxSzövegHossz : PozEgész(???) Típus Szöveg = Rekord(hossz: 0..MaxSzövegHossz, jel:Tömb(1..MaxSzövegHossz: Karakter))Konstans MaxSzövegHossz : PozEgész(???) Típus Szöveg = Rekord(hossz: 0..MaxSzövegHossz, jel:Tömb(1..MaxSzövegHossz: Karakter)) Konstans MaxSzövegHossz : PozEgész(???) TípusSzöveg = Rekord(hossz: 0..MaxSzövegHossz, tart : MunkaCím) MunkaCím = Jelek'Mutató Jelek = valamilyen karaktersorozat-ábrázolásKonstans MaxSzövegHossz : PozEgész(???) TípusSzöveg = Rekord(hossz: 0..MaxSzövegHossz, tart : MunkaCím) MunkaCím = Jelek'Mutató Jelek = valamilyen karaktersorozat-ábrázolás A Lista fogalmát l. itt: http://digo.inf.elte.hu/~szlavi/PrM2felev/ Lista.ppt http://digo.inf.elte.hu/~szlavi/PrM2felev/ Lista.ppt

13  99.03.04.Programozásmódszertan -- Szövegfeldolgozás12 1.1. A szövegtípusok szűkebb értelmezése 1.3. A szövegfájltípusok 1. ExportModul InpSzövegFile: EljárásMegnyit(Változó f: InpSzövegFile, Konstans fnév: Szöveg) Lezár(Változó f: InpSzövegFile) Olvas(Változó f: InpSzövegFile, c: Karakter) SorOlvas(Változó f: InpSzövegFile, s: Szöveg) EljárásMegnyit(Változó f: InpSzövegFile, Konstans fnév: Szöveg) Lezár(Változó f: InpSzövegFile) Olvas(Változó f: InpSzövegFile, c: Karakter) SorOlvas(Változó f: InpSzövegFile, s: Szöveg) FüggvényVége?(Változó f: InpSzövegFile): Logikai Hibás?(Változó f: InpSzövegFile): Logikai FüggvényVége?(Változó f: InpSzövegFile): Logikai Hibás?(Változó f: InpSzövegFile): Logikai Modul vége.

14  99.03.04.Programozásmódszertan -- Szövegfeldolgozás13 1.3. A szövegfájltípusok (folytatás) ExportModul OutSzövegFile: EljárásMegnyit(Változó f: OutSzövegFile, Konstans fnév: Szöveg) Lezár(Változó f: OutSzövegFile) Ír(Változó f: OutSzövegFile, Konstans c: Karakter) Ír(Változó f: OutSzövegFile, Konstans s: Szöveg) SorÍr(Változó f: OutSzövegFile, Konstans s: Szöveg) EljárásMegnyit(Változó f: OutSzövegFile, Konstans fnév: Szöveg) Lezár(Változó f: OutSzövegFile) Ír(Változó f: OutSzövegFile, Konstans c: Karakter) Ír(Változó f: OutSzövegFile, Konstans s: Szöveg) SorÍr(Változó f: OutSzövegFile, Konstans s: Szöveg) FüggvényHibás?(Változó f: OutSzövegFile): Logikai FüggvényHibás?(Változó f: OutSzövegFile): Logikai Modul vége.

15  99.03.04.Programozásmódszertan -- Szövegfeldolgozás14 1.3. A szövegfájltípus (folytatás) Megvalósítási lehetőségek: KonstansMaxSzövegHossz : PozEgész(???) Típus ??? SzövegFile=Rekord (hossz:0..MaxSzövegHossz, adat: ??? SzekvenciálisFile(Karakter))KonstansMaxSzövegHossz : PozEgész(???) Típus ??? SzövegFile=Rekord (hossz:0..MaxSzövegHossz, adat: ??? SzekvenciálisFile(Karakter)) Típus ??? SzövegFile= ??? SzekvenciálisFile(Karakter) [Típusinvariáns: f: ??? SzövegFile: f.adat f.hossz = speciális fájlvégjel ]Típus ??? SzövegFile= ??? SzekvenciálisFile(Karakter) [Típusinvariáns: f: ??? SzövegFile: f.adat f.hossz = speciális fájlvégjel ] További fogalmak: Sor = karakterek SorVégjellel lezárt sorozata SorVégjel = Cr+Lf [Probléma: karakteres Olvasás!] Lf = Karakter(10) Cr = Karakter(13) A SzekvenciálisFile fogalmát l. itt: http://digo.inf.elte.hu/~szlavi/PrM2felev/ FILEEA.PPT http://digo.inf.elte.hu/~szlavi/PrM2felev/ FILEEA.PPT

16  99.03.04.Programozásmódszertan -- Szövegfeldolgozás15 2.2. A szövegtípusok tágabb értelmezése 2.1. A karaktertípus 2. Általánosítási lehetőségek, okok: nemzeti jelkészleteknemzeti jelkészletek * új jel beillesztése, de hova? * alfabetikus rendezés és kódkompatibilitás Változó rKód: Tömb(Karakter: Byte) InfixOperátor <(Konstans c1,c2: Karakter): Logikai Másként Kisebb Kisebb:=rKód(c1)<rKód(c2) Operátor vége. Így rKód['A']<rKód['Á']<rKód['B'] lehet, bár 'B'< szűkebb 'Á'!

17  99.03.04.Programozásmódszertan -- Szövegfeldolgozás16 2.1. A karaktertípus (folytatás) * kettős- és többes jelek esete anomália: „áltöbbes” betűk esete anomália: „áltöbbes” betűk esete (pl. ‘szárazság’  ‘sz’+‘á’+‘r’+‘a’+‘zs’+‘á’+‘g’) rendezés: ahogy korábban -- rendezővektorral (pl. ‘szárazság’  ‘sz’+‘á’+‘r’+‘a’+‘zs’+‘á’+‘g’) rendezés: ahogy korábban -- rendezővektorral Be: Sz  Szöveg Ki: C  Karakter, Sz’  Szöveg Ef: - Uf: C+Sz’ = Sz (C többjeles betű) Pl. ‘SZLÁVI’  belsőKód(‘SZ’) + ‘LÁVI’ Változó ABC: Tömb(Karakter: Szöveg) [¬ABC-sorrend! Pl. ‘SZ’ előbb, mint az ‘S’] Eljárás ABCTranszformáció(Változó Sz:Szöveg,C:Karakter): C:=min'Karakter; UjJel:=Eleje(Sz,Hossz(ABC(C))) Ciklus amíg UjJel  ABC(C) [első jel kiválasztása] C:=Következő(C); UjJel:=Eleje(Sz,Hossz(ABC(C))) Ciklus vége Sz:=Vége(Sz,Hossz(ABC(C))+1) Eljárás vége.

18  99.03.04.Programozásmódszertan -- Szövegfeldolgozás17 2.1. A karaktertípus (folytatás) * a rendezés majdnem „mindenható” módszere: két byte-os;két byte-os; az „eredeti” kódpárok közé további 255 újaz „eredeti” kódpárok közé további 255 új (valós szám fixpontos alakja) ‘A’  65 0| ‘O’  79 0 ‘Á’  65 128| ‘Ó’  79 128 ‘B’  66 0| ‘Ö’  79 160 ‘C’  67 0| ‘Ő’  79 192 …|... ÁLMOS = 143, 76, 77, 79, 83  65, 128, 76, 0, 77, 0, 79, 0, 83, 0 Függvény Első(Konstans Sz:Szöveg):Duplakód Ha Hossz(Sz)>1 és Sorszám(Jele(Sz,2))>127 akkor Első:=Eleje(Sz,2) különben Első:=Eleje(Sz,1)+Karakter(0) Függvény vége. Függvény ElejérőlElhagy(Konstans Sz:Szöveg):Duplakód Ha Hossz(Sz)>1 és Sorszám(Jele(Sz,2))>127 akkor ElejérőlElhagy:=Vége(Sz,3) különben ElejérőlElhagy:=Vége(Sz,2) Függvény vége. Be: Sz  Szöveg Ki: Első  Duplakód Ef:  c  Sz: spec(c)   k 1  [0..127],  k 2  [128..255]: c=Karakter(k 1 )+ Karakter(k 2 ) Uf: Első = dupla- byte-os kód „Fél-dupla” kódról  „Teljesen dupla” kódra konverzió

19  99.03.04.Programozásmódszertan -- Szövegfeldolgozás18 2.2. A szövegtípusok tágabb értelmezése 2.2. A szövegtípus 2. A szövegtípus „humán” fogalmai: Szó: szóelválasztójelekkel határolt jelsorozat;Szó: szóelválasztójelekkel határolt jelsorozat; Szóelválasztójelek: {' ', Tab}  Központozás  Végjelek Központozás: {',', ';', '.', '?', '!', ':'} Végjelek: {SorVégjel, LapVégjel, SzövegVégjel} SorVégjel: Cr + Lf  Cr Lf: Karakter(10);Cr: Karakter(13); LapVégjel: Ff=Karakter(12){CTRL+L} SzövegVégjel: Karakter(26){CTRL+Z}

20  99.03.04.Programozásmódszertan -- Szövegfeldolgozás19 2.2. A szövegtípus (folytatás) Sor: tetszőleges hosszúságú, végjeleket nem tartal- mazó jelek sorozata, amelyet SorVégjel zár le;Sor: tetszőleges hosszúságú, végjeleket nem tartal- mazó jelek sorozata, amelyet SorVégjel zár le; Lap: tetszőleges számú sorok sorozata, amelyet LapVégjel zár le;Lap: tetszőleges számú sorok sorozata, amelyet LapVégjel zár le; Típus Sor = Szöveg [Típusinvariáns: s:Sor:  i  [1..Hossz(s)-1]: Jele(s,i)  SorVégjel és Jele(s,Hossz(s))=SorVégjel] Típus Lap = Szöveg [Típusinvariáns: l:Lap:  i  [1..Hossz(l)-1]: Jele(l,i)  LapVégjel és Jele(l,Hossz(l))=LapVégjel]

21  99.03.04.Programozásmódszertan -- Szövegfeldolgozás20 2.2. A szövegtípus (folytatás) Dokumentum: tetszőleges számú lapok sorozata, amelyet SzövegVégjel zár le.Dokumentum: tetszőleges számú lapok sorozata, amelyet SzövegVégjel zár le. Általában feltételezzük, hogy bármely sort (legalább) egy SorVégjel, egy lap (legalább) egy LapVégjel … követ. Típus Dokumentum = Szöveg [Típusinvariáns: d:Dokumentum:  i  [1..Hossz(d)-1]: Jele(d,i)  SzövegVégjel és Jele(d,Hossz(d))=SzövegVégjel]

22  99.03.04.Programozásmódszertan -- Szövegfeldolgozás21 2.2. A szövegtípus (folytatás) Dokumentumhoz kapcsolódó operációk:Dokumentumhoz kapcsolódó operációk: Típus Elválasztók=(' ', Tab, ',', '.', '?', '!', ':', ';', SorVégjel, LapVégjel, SzövegVégjel) Konstans SzóElválasztóJelek: Halmaz(Elválasztók)(' '..SorVégjel) Eljárás ElsőSzó(Változó teljes: Sor, eszó,elválasztás: Szöveg): [A teljes sorból, leválasztja az első szót és az első elválasztójel-sorozatot.] eszó:=''; Köv:=Eleje(teljes,1) Ciklus amíg Köv  SzóElválasztóJelek eszó:+Köv; teljes:=Vége(teljes,2); Köv:=Eleje(teljes,1) Ciklus vége elválasztás:='' Ciklus amíg Hossz(teljes)>0 és Köv  SzóElválasztóJelek elválasztás:+Köv; teljes:=Vége(teljes,2) Ha Hossz(teljes)>0 akkor Köv:=Eleje(teljes,1) Ciklus vége Eljárás vége.

23  99.03.04.Programozásmódszertan -- Szövegfeldolgozás22 2.2. A szövegtípus (folytatás) Eljárás SorVégére(Változó teljes: Sor, Konstans szó,elválasztás: Szöveg): [A teljes sor végéhez hozzáteszi a szót és az elválasztást; Ef: elválasztás nem üres] teljes:=Eleje(teljes,Hossz(teljes)-1)+ +szó+elválasztás+SorVégjel Eljárás vége. Eljárás ElsőSor(Változó teljes: Lap, esor: Sor): [Leválasztja a teljes lap első sorát: vagyis annyi szót –a követő elválasz- tójeleivel együtt– átmásol az esorba, amennyi az első sorvégjelig tart] esor:=''; Köv:=Eleje(teljes,1) Ha Köv  LapVégjel akkor [nem üres a lap] Ciklus amíg Köv  SorVégjel esor:+Köv; teljes:=Vége(teljes,2); Köv:=Eleje(teljes,1) Ciklus vége esor:+Köv [Sorvégjellel lezárja]; teljes:=Vége(teljes,2) Elágazás vége Eljárás vége.

24  99.03.04.Programozásmódszertan -- Szövegfeldolgozás23 2.2. A szövegtípus (folytatás) Eljárás LapVégére(Változó teljes: Lap, Konstans usor: Sor): [A teljes lap végéhez hozzáilleszti az usor sort] teljes:=Eleje(teljes,Hossz(teljes)-1)+usor+LapVégjel Eljárás vége. Eljárás ElsőLap(Változó teljes: Dokumentum, elap: Lap): [Leválasztja a teljes dokumentum első lapját: vagyis annyi sort –a követő SorVégjellel együtt– átmásol az elapba, amennyi az első lapvégjelig tart] elap:=''; Köv:=Eleje(teljes,1) Ha köv  SzövegVégjel akkor [nem üres dokumentum] Ciklus amíg Köv  LapVégjel elap:+Köv; teljes:=Vége(teljes,2); Köv:=Eleje(teljes,1) Ciklus vége elap:+Köv; teljes:=Vége(teljes,2) Elágazás vége Eljárás vége. Eljárás DokumentumVégére(…): hf.

25  99.03.04.Programozásmódszertan -- Szövegfeldolgozás24 2.2. A szövegtípus (folytatás) Képernyősorhoz kapcsolódó operációkKépernyősorhoz kapcsolódó operációk Típus KépSor(Konstans db:Egész)=Szöveg [Típusinvariáns: ks:KépSor: Hossz(ks)  db és  i  [1..Hossz(ks)]: Jele(ks,i)  Végjelek] * Előkészítő műveletek Eljárás ElsőKépsor(Változó s: Sor, ks:KépSor(db)): [Levágja a tetszőleges hosszúságú s Sor első, maximum db hosszúságú részét úgy, hogy a szavai teljes egészükben beleférjenek a ks KépSorba.] hf. Eljárás BalrólLevág(Változó ks:KépSor(db)): [Az ks KépSort átalakítja: balról a szóközöket elhagyja.] hf. Eljárás JobbrólLevág(Változó ks:KépSor(db)): [Az ks KépSort átalakítja: jobbról a szóközöket elhagyja] hf.

26  99.03.04.Programozásmódszertan -- Szövegfeldolgozás25 2.2. A szövegtípus (folytatás) * Igazítások Feltételezések: már nincsenek a sor „szélein” fölösleges szóközökmár nincsenek a sor „szélein” fölösleges szóközök Eljárás JobbraIgazít(Változó ks:KépSor(szél)): [Az ks KépSort átalakítja: balról annyi szóközzel egészíti ki, hogy a sor utolsó karaktere a szél szélességű tartomány jobboldalán legyen.] hf. Eljárás KözépreIgazít(Változó ks:KépSor(szél)): [Az ks KépSort átalakítja: balról és jobbról annyi szóközzel egészíti ki, hogy az a szél szélességű tartományban középre essék.] hf. Eljárás MargóhozIgazít(Változó ks:KépSor(szél)): [Az ks KépSort a bal és a jobb margóhoz igazítja: a szavak között többlet („puha”) szóközöket helyez el egyenletesen.] hf.

27  99.03.04.Programozásmódszertan -- Szövegfeldolgozás26 2.2. A szövegtípusok tágabb értelmezése 2.3. A „lineáris” szövegfájltípusok 2. SzövegFile=dokumentum szekvenciális fájlban. InpSzövegFile:InpSzövegFile: Típus Elválasztók=(' ', Tab, ',', '.', '?', '!', ':', ';', SorVégjel..SzövegVégjel) Konstans SzóElválasztójelek: Halmaz(Elválasztók)(' '..SzövegVégjel) Változó c: Karakter [előreolvasott jel] Eljárás Nyitás [Olvasásra] (Változó f: InpSzövegFile;Konstans név:Szöveg): Megnyit(f,név); Olvas(f,c) [előreolvas; teheti a típusinvariáns miatt!] Eljárás vége.Megnyit(f,név); Olvas(f,c)típusinvariáns Eljárás Zárás [Olvasásra] (Változó f: InpSzövegFile): Lezár(f) Eljárás vége. Függvény Vége?(Változó f: InpSzövegFile):Logikai Vége?:=c=SzövegVégjel Függvény vége.

28  99.03.04.Programozásmódszertan -- Szövegfeldolgozás27 Eljárás SzóOlvasás(Változó f: InpSzövegFile, szó,elválasztás: Szöveg): [Az elválasztójelek átlépésével olvassa a fájl első szavát; Ef: nem Vége?(f)] szó:=''; elválasztás:='' Ciklus amíg [elválasztójel garantáltan van!] c  SzóElválasztójelek szó:+c; Olvas(f,c) Ciklus vége Ciklus amíg nem Vége?(f) és c  SzóElválasztójelek elválasztás:+c; Olvas(f,c) Ciklus vége Eljárás vége.Vége?(f) 2.3. A „lineáris” szövegfájltípusok (folytatás)

29  99.03.04.Programozásmódszertan -- Szövegfeldolgozás28 Eljárás SorOlvasás(Változó f: InpSzövegFile, sor: Sor): [SorVégjelig olvassa a sor karaktereit; Ef: nem Vége?(f)] sor:='' Ciklus amíg [SorVégjel garantáltan van!] c  SorVégjel sor:+c; Olvas(f,c) Ciklus vége sor:+c [Ha nem Vége?(f) akkor] Olvas(f,c) [előreolvasás] Eljárás vége. Eljárás LapOlvasás(Változó f: InpSzövegFile, l: Lap): [LapVégjelig olvassa a lap karaktereit; Ef: nem Vége?(f)] l:='' Ciklus amíg [LapVégjel garantáltan van!] c  LapVégjel l:+c; Olvas(f,c) Ciklus vége l:+c [Ha nem Vége?(f) akkor] Olvas(f,c)[előreolvasás] Eljárás vége. 2.3. A „lineáris” szövegfájltípusok (folytatás)

30  99.03.04.Programozásmódszertan -- Szövegfeldolgozás29 2.3. A „lineáris” szövegfájltípusok (folytatás) OutSzövegFile: KépSzövegFile=a képernyőn v. nyomtatólapon megjelenő fájl.OutSzövegFile: KépSzövegFile=a képernyőn v. nyomtatólapon megjelenő fájl.Szerkezete: Konstans SorHossz :Egész(80) LapHossz :Egész(64) FejlécHossz :Egész(4) LáblécHossz:Egész(4) Típus LapLeírás = Tömb(1..4: Egész) Sor = Tömb(1..SorHossz: Karakter)

31  99.03.04.Programozásmódszertan -- Szövegfeldolgozás30 2.3. A „lineáris” szövegfájltípusok (folytatás) Változós:Sor [sorpuffer] sorszám,lapszám: Egész fejléc:Tömb(1..FejlécHossz: Sor) lábléc:Tömb(1..LáblécHossz: Sor) l:LapLeírás Eljárás Nyitás [Írásra] (Változó f: KépSzövegFile, Konstans fnév: Szöveg…): Megnyit(f,fnév); s:=''; sorszám:=0; lapszám:=0; …Megnyit(f,fnév) Eljárás vége. Eljárás SzóÍrás(Változó f: KépSzövegFile, Konstans szó,elválasztó: Szöveg): Ha Hossz(s+szó+elválasztó)>SorHossz akkor SorÍrás(f,s); [tedd ki!] s:=szó+elválasztó különben s:+szó+elválasztó [tedd hozzá!] Elágazás vége Eljárás vége. a KépSzövegFile reprezentációja

32  99.03.04.Programozásmódszertan -- Szövegfeldolgozás31 2.3. A „lineáris” szövegfájltípusok (folytatás) Eljárás SorÍrás(Változó f: KépSzövegFile, Konstans s: Sor): Ha sorszám=0akkorlapszám:+1 ÜresSorok(f,l(1)) Ciklus i=1-től FejlécHossz-ig SorÍr(f,fejléc(i)) [a szűkebb értelmezésű!] Ciklus vége ÜresSorok(f,l(2)) Elágazás vége SorÍr(f,s); s:=''; sorszám:+1 Ha sorszám=LapHosszakkorÜresSorok(f,l(3)) Ciklus i=1-től LáblécHossz-ig SorÍr(f,lábléc(i)) Ciklus vége ÜresSorok(f,l(4)) sorszám:=0 Elágazás vége Eljárás vége.SorÍr(f,fejléc(i))

33  99.03.04.Programozásmódszertan -- Szövegfeldolgozás32 2.3. A „lineáris” szövegfájltípusok (folytatás) Eljárás Lapdobás(Változó f: KépSzövegFile): Ha sorszám=0akkor [egy teljesen üres lap készítése: fejlécekkel] lapszám:+1 ÜresSorok(f,l(1)) Ciklus i=1-től FejlécHossz-ig SorÍr(f,fejléc(i)) [a szűkebb értelmezésű!] Ciklus vége ÜresSorok(f,l(2)) Elágazás vége ÜresSorok(f,LapHossz-sorszám) [a maradék sorok üresek] ÜresSorok(f,l(3)) Ciklus i=1-től LáblécHossz-ig SorÍr(f,lábléc(i)) Ciklus vége ÜresSorok(f,l(4)) sorszám:=0 [hogy a következő kiírás a következő lapon kezdődjön] Eljárás vége.

34  99.03.04.Programozásmódszertan -- Szövegfeldolgozás33 2.3. A „lineáris” szövegfájltípusok (folytatás) Eljárás Zárás(Változó f: KépSzövegFile): Ha s  '' akkor SorÍrás(f,s) Ha 0<sorszám akkor ÜresSorok(LapHossz-sorszám) ÜresSorok(l(3)) Ciklus i=1-től LáblécHossz-ig SorÍr(f,lábléc(i)) Ciklus vége ÜresSorok(l(4)) Elágazás vége Zár(f) Eljárás vége. Eljárás ÜresSorok(Változó f:KépSzövegFile, Konstans db:Egész): hf.

35  99.03.04.Programozásmódszertan -- Szövegfeldolgozás34 2.3. A „lineáris” szövegfájltípusok (folytatás) Tovább-általánosítás Műveletek: hozzáfűz,  tartalomjegyzék-készítés,hozzáfűz,  tartalomjegyzék-készítés, indexkészítés,  formázott másolás.indexkészítés,  formázott másolás.Tartalomjegyzék-készítés fölismerhető a szöveg struktúrája,fölismerhető a szöveg struktúrája, címekre korlátozódó lista.címekre korlátozódó lista.Indexkészítés egy különálló szövegben felsorolt kulcs-szavak előfordulási helyei.egy különálló szövegben felsorolt kulcs-szavak előfordulási helyei. Formázott másolás fájl egy, ún. stílusleírásnak megfelelő átmásolása.fájl egy, ún. stílusleírásnak megfelelő átmásolása.

36  99.03.04.Programozásmódszertan -- Szövegfeldolgozás35 2.3. A „lineáris” szövegfájltípusok (folytatás) Adalékok a fentiek megvalósításához: 1.A kiinduló fájl maga a nyers, formázatlan szöveg. 2.Ebben lehetnek fejezetek, alfejezetek,..., amelyek címzésére, fejlécére stb.-re vonatkozhatnak formai elvárások (betűtípus, igazítás). 3.Ezeket az elvárásokat kell megadni a stílusleírásban, ami lehet akár egy szövegben tárolva. Ebben rögzített szintaxisú stílusutasításokban sorolhatók föl az egyes globális, formai jellemzők.

37  99.03.04.Programozásmódszertan -- Szövegfeldolgozás36 Folytatás: Szövegfeldolgozás 2. Szövegfeldolgozás 2.Szövegfeldolgozás 2.

38  99.03.04.Programozásmódszertan -- Szövegfeldolgozás37 Megjegyzés: A Morze-abc egy részlete

39 l1l1 l2l2 fejléc fejléc FejlécHossz l3l3 l4l4 lábléc lábléc LáblécHossz SorHossz LapHossz


Letölteni ppt "Copyright, 1999 © Szlávi Péter Szövegfeldolgozás 1."

Hasonló előadás


Google Hirdetések