Programozás | Programozás-elmélet » Gregorics Tibor - Elemenkénti feldolgozás szekvenciális fájlokra

Alapadatok

Év, oldalszám:2011, 4 oldal

Nyelv:magyar

Letöltések száma:27

Feltöltve:2017. július 23.

Méret:667 KB

Intézmény:
-

Megjegyzés:

Csatolmány:-

Letöltés PDF-ben:Kérlek jelentkezz be!



Értékelések

Nincs még értékelés. Legyél Te az első!


Tartalmi kivonat

ELEMI ALKALMAZÁSOK FEJLESZTÉSE I. Elemenkénti feldolgozás szekvenciális fájlokra Készítette: Gregorics Tibor Lektorálta: Bozsik József •1-n •1-n elemenkénti elemenkénti feldolgozás feldolgozás implementálása implementálása •Szöveges •Szöveges állomány állomány szekvenciális szekvenciális fájlként fájlként kezelése kezelése •Szekvenciális •Szekvenciális fájl fájl típusának típusának osztályként osztályként való való megvalósítása megvalósítása inp.txt Az Az „inp.txt” „inp.txt” szöveges szöveges állomány állomány egy egy könyvtár könyvtár nyilvántartását nyilvántartását tartalmazza. tartalmazza. Ennek Ennek minden minden sorában sorában egy-egy egy-egy könyv könyv adatait adatait szóközzel szóközzel (1 (1 pozíció) pozíció) elválasztva elválasztva helyeztünk helyeztünk el el :: azonosító azonosító (4), (4), szerző szerző (14), (14), cím cím (19), (19), kiadó kiadó (14),

(14), kiadás kiadás éve éve (4), (4), aktuális aktuális példányszám példányszám (3), (3), ISBN szám (14). ISBN szám (14). Válogassuk Válogassuk ki ki egyrészt egyrészt aa nulla nulla példányszámú, példányszámú, másrészt a Móra kiadónál másrészt a Móra kiadónál megjelent megjelent könyvek könyvek azonosítóját, azonosítóját, szerzőjét szerzőjét és és címét, címét, és és aa fenti fenti formában formában helyezzük helyezzük el el őket őket az az „out1.txt” „out1.txt” és és az az „out2.txt” szöveges állományban! „out2.txt” szöveges állományban! Specifikáció A=Infile(Könyv) × Outfile(Könyv2) × Outfile(Könyv2) x y1 y2 Könyv=rec(azon:N, szerző:char*, cím:char, kiadó:char, év:N, darab:N0, isbn:char*) Könyv2=rec(azon:N, szerző:char*, cím:char) B= Infile(Könyv) x’ x’.dom R=( y1 = ⊕ f1(xi’) i=1 Q=( x = x’ ) x’.dom ∧ y2 = ⊕ f2(xi’) ) i=1 ⎧< rec(dx.azon, dxszerző ,

dxcím) > ha dxdarab = 0 f1(dx) = ⎨ <> különben ⎩ ⎧< rec(dx.azon, dxszerző , dxcím) > ha dxkiadó =" Móra" f2(dx) = ⎨ <> különben ⎩ azon szerző 12 15 17 25 J. K Rowling A. A Milne Gárdonyi Géza Fekete István cím kiadó Harry Potter II. Micimackó A láthatatlan ember Zsellérek Animus Móra Szépirodalmi Nestor év 2000 1936 1973 1994 db isbn 0 10 0 12 963 8386 94 O 963 11 1547 X SZ 1823-D-7374 963 7523 3 4 O out1.txt azon szerző 12 J. K Rowling 17 Gárdonyi Géza cím Harry Potter II. A láthatatlan ember out2.txt azon szerző 15 A. A Milne cím Micimackó Absztrakt program y:=< > sx,dx,x:read sx=norm dx.darab = 0 y1:write(dx) SKIP dx.kiadó = „Móra” y2: write(dx) SKIP sx,dx,x:read 1 Felhasználói típusok Absztrakt program kódja Könyv= rec(azon:N, szerző:char*, cím:char, kiadó:char, év:N, darab:N0, isbn:char*) a.kiadó, Könyv2 ≈ Könyv ahol a: Könyv int main() { Torzs x (

”inp.txt” ); Eredm y1( ”out1.txt” ); Eredm y2( ”out2.txt” ); Konyv dx; Status sx; x.Read(dx,sx); while (sx==norm) { if (dx.darab==0) y1.Write(dx); if (dx.kiado==”Móra” ) y2Write(dx); x.Read(dx,sx); } return 0; } Törzs = Infile(Könyv) sx,dx,x:read vagy x.read(dx,sx) ahol x : seq(Könyv) dx: Könyv sx: Státusz Eredm = Outfile(Könyv2) y:write(dy) vagy y.write(dy) ahol y :seq(Könyv2) dy :Könyv Státusz = {norm, abnorm} Státusz típus Könyv típus Típusspecifikáció Típusértékek Reprezentáció Reprezentáció Status sx; sx = norm; Típus megvalósítás kiadó darab . struct Konyv Konyv dx; {. string kiado; dx.kiado int darab; dx.darab }; Implementáció enum Status {abnorm, norm}; Könyv Műveletek ={norm,abnorm} Implementáció Status Műveletek Típusértékek Típusspecifikáció Típus megvalósítás sx == norm seq(Könyv) x.Read(dx,sx) x:seq(Könyv) dx:Könyv sx:Status szöveges fájl szöveges fájlból való olvasás Típus

megvalósítás Implementáció Reprezentáció Törzs osztály Típusspecifikáció Műveletek Típusértékek Törzs típus ifstream x; Konyv dx; x >> dx; Az olyan felhasználói típust, amelynek műveleteit nem lehet egyetlen C++ utasítással implementálni osztály segítségével érdemes megvalósítani Torzs x(”inp.txt”); Konyv dx; Status sx; x.Read(dx,sx); class Torzs x.f >> dx; { public: Torzs(const string &fnev); ~Torzs(); void Read(Konyv& dx, Status& sx); private: ifstream f; }; 2 Konstruktor, destruktor x.Read(dx, sx) Torzs::Torzs(const string &fnev) { f.open(fnevc str()); if ( f.fail() ) { cout << ”Nincs törzs fájl” <<endl; char ch; cin>>ch; exit(1); } } Torzs::~Torzs() { f.close(); } kiadó Animus Móra Szépirodalmi Nestor év 2000 1936 1973 1994 db isbn 0 10 0 12 963 8386 94 O 963 11 1547 X SZ 1823-D-7374 963 7523 3 4 O Konverzió C karakterláncból int értékbe Eredm osztály

Típusspecifikáció seq(Könyv2) y.write(dy) y:seq(Könyv2) dy:Könyv szöveges fájl szöveges fájlba való írás Implementáció = atoi(sor.substr( 0, 4)c str( )); = sor.substr( 5,14); = sor.substr(20,19); = sor.substr(40,14); Rész sztring kivágása = sor.substr(55, 4); = atoi(sor.substr(60, 3)c str( )); = sor.substr(64,14); Eredm típus Típusértékek cím Harry Potter II. Micimackó A láthatatlan ember Zsellérek dx.azon dx.szerzo dx.cim dx.kiado dx.ev dx.darab dx.isbn = . = . } Reprezentáció J. K Rowling A. A Milne Gárdonyi Géza Fekete István dx.azon dx.szerzo . Műveletek 12 15 17 25 getline(f, sor, ’ ’ ); if (!f.eof()) { sx = norm; } else sx = abnorm; inp.txt azon szerző void Torzs::Read(Konyv &dx, Status &sx) { string sor; Típus megvalósítás Konstruktor, destruktor class Eredm { public: Eredm(const string &fnev); ~Eredm(); void Write(const Konyv &dy); private: ofstream f; Eredm y(”out.txt”); }; Konyv dy;

y.Write(dy); Eredm::Eredm(const string &fnev) { f.open(fnevc str()); if ( f.fail() ) { cout << ”Fájl létrehozási hiba” << endl; char ch; cin >> ch; exit(1); } } Eredm::~Eredm() { f.close(); } 3 y.Write(dx) Manipulátorok, formátumjelzők #include <iomanip> void Eredm::Write(const Konyv &dy) { f << setw(4) << dy.azon << ’ ’ << setw(14) << dy.szerzo << ’ ’ << setw(19) << dy.cim << endl; } f << setw(int w) f.width(int w) f << setprecision(int p) f.precision(int p) f << setfill(char c) f.fill(char c) f << endl f.setf(fmtflags fl) f.unsetf(fmtflags fl) manipulátorok #include <iomanip> scientific, fixed, right, left, dec, hex, oct, showpoint, showpos Formátumjelzők: fmtflags skipws ios:: Teljes program #include #include #include #include #include #include <fstream> <iostream> <iomanip> <string> ”torzs.h” ”eredm.h”

Teljes program using namespace std; struct Konyv { . }; enum Status { . }; main() int { . } 4