Szekvenciális fájlok kezelése
Szekvenciális inputfájl
Egy olyan gyűjtemény, aminek elemeit csak sorban, egymás után lehet kinyerni (mind E halmazbeli).
Jelölés:
infile(E)
- Az ilyen gyűjteményre sorozatként tekintünk
- A reprezentációja többnyire valóban sorozat
- Egyetlen művelet engedélyezett: Az első elem "kiolvasása"
- Más néven leszakítás
- Az olvasást az
st, e, xszimbólumokkal jelöljük- ami értékadásra utal, ami a
readvisszatérési értéke
- ami értékadásra utal, ami a
Szekvenciális outputfájl
Olyan gyűjtemény, amelybe sorban egymás után helyezzük el egy adott E halmazhoz tartozó elemeket
- Az ilyen gyűjteményre sorozatként tekintünk
- A reprezentációja többnyire valóban sorozat
- Két megengedett művelet
- Kezdetben üres sorozat létrehozása
- A sorozat végéhez hozzáfűzés
- Az iniciálást az
x := <>értékadás végzi, aholx:outfile(E)és<>az üres sorozat - Az írást az
x: write(e)szimbólummal jelöljük, aholx:outfile(E), e:E- Fedi ezt a tevékenységet:
x:= x\(\oplus\)<e>
- Fedi ezt a tevékenységet:
Gyakorlatban előfordul gyakran, hogy több szekvenciális inputfájl alapján kell egy szekvenciális outputfájlt készíteni (az ismert programozási tételek használatával)
Ilyenkor az inputfájlt elemenként dolgozzuk fel (az olvasó műveletre támaszkodva) felsoroljuk, és a megoldást az összegzés algoritmus mintára vezetjük vissza.
Általános Szekvenciális felsorolás

E*- Inputparaméter típusa (jellemzően csakE)st- Státusze-E*típusú elemx:read- fájl
Létezik egy előreolvasási stratégia, ahol a ciklusmag végén próbáljuk meg beolvasni, ami ha nem sikerül, tudjuk, hogy a végőén vagyunk
Általános Összegzés fájlkezeléshez

- A
Hhalmaz megfelelője egy valamilyen Felsoroló - Az összeadást az összefűzés (\(\oplus\)) váltja fel
- A neutrális elem pedig az üres sorozat (
<>)
C# Nyelvi elemek
A beolvasáshoz használható a cringe TextFileStream.dll, vagy implementáljunk egy értelmes StreamReader-t
Az íráshoz a megszokott StreamWriter ajánlott
Feladat - Karakterek átalakítása


Rekordonkénti olvasás
A feladat célja inkább a több tétel egyszerre történő alkalmazása

A részfeladatokat megoldó programokat egy ciklusba kell összevonni, hiszen nem megismételhető felsorolásra épül
A megvalósításhoz szinkron elemeket kell használni

Itt be lett vezetve egy sírköves feladat (háromszögben plusz), ami két elem közüll a nagyobbal tér vissza
A sárga részek szerepe, hogy a lineáris keresés (ha módosítással is) megfeleljen az összegzéssel


Az előfeltétel miatt a státusz ellenőrzése elhanyagolható, és elég csak a pulzusra tett feltételt ellenőrizni
Kitérő feladat
Az előadásban itt történik egy kiegészítés a feladatra, hogy az első legalább 100-as pulzus előfordulását is fegyük figyelembe, amivel így módoslulna a specifikáció:
A = (\(x:\) infile(Mérés)), \(c:\mathbb{N}\), min \(: \mathbb{N}\) Mérés=rec(idő \(:\mathbb{S}\), pulzus \(:\mathbb{N}\))
Ef = (\(x = x_{0} \land \nearrow_{ido} \land \exist i \in [1 .. \red{|x|} ]:x_{i}.pluzus \geq 100\))
Uf = (\((c, (., \red{e'}, x'))= {\sum}_{e \in x_{0}}^{e.pulzus<100} \space 1 \land min = MIN_{e\in \red{<e'>\oplus x'}} (e.pulzus)\))
Soronkénti olvasás

Ha érdekes a téma, érdemes a diákat megnézni (nem ad új ismeretanyagot)