Copyright, 1999 © Szlávi Péter Szövegfeldolgozás 1.
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
Programozásmódszertan -- Szövegfeldolgozás 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,...
Programozásmódszertan -- Szövegfeldolgozás 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;
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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: Pdf/PrMea2_2.pdfhttp://digo.inf.elte.hu/~szlavi/PrM2felev/ Pdf/PrMea2_2.pdf 1.3. fejezetében Pdf/PrMea2_2.pdf
Programozásmódszertan -- Szövegfeldolgozás 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: )fixhosszúságú kód (pl. 5-bites Telexkódban betű-, számváltó jelek; UNICODE; egyéb érdekességekről: ) UNICODE UNICODE 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
Programozásmódszertan -- Szövegfeldolgozás 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
Programozásmódszertan -- Szövegfeldolgozás 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
Programozásmódszertan -- Szövegfeldolgozás 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: Lista.ppt Lista.ppt
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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: FILEEA.PPT FILEEA.PPT
Programozásmódszertan -- Szövegfeldolgozás 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 'Á'!
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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 ‘Á’ | ‘Ó’ ‘B’ 66 0| ‘Ö’ ‘C’ 67 0| ‘Ő’ …|... Á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 [ ]: 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ó
Programozásmódszertan -- Szövegfeldolgozás 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}
Programozásmódszertan -- Szövegfeldolgozás 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]
Programozásmódszertan -- Szövegfeldolgozás 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]
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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.
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)
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 A „lineáris” szövegfájltípusok (folytatás)
Programozásmódszertan -- Szövegfeldolgozás 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)
Programozásmódszertan -- Szövegfeldolgozás 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
Programozásmódszertan -- Szövegfeldolgozás 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))
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás 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.
Programozásmódszertan -- Szövegfeldolgozás36 Folytatás: Szövegfeldolgozás 2. Szövegfeldolgozás 2.Szövegfeldolgozás 2.
Programozásmódszertan -- Szövegfeldolgozás37 Megjegyzés: A Morze-abc egy részlete
l1l1 l2l2 fejléc fejléc FejlécHossz l3l3 l4l4 lábléc lábléc LáblécHossz SorHossz LapHossz