Documente Academic
Documente Profesional
Documente Cultură
Obiectiv
Sistemul permite rularea unor comenzi ce vor efectua prelucrri asupra unor fiiere de date. Algoritmii utilizai trebuie s permit prelucrarea eficient a fiierelor de date de mari dimensiuni (pna la 2GB).
2. Descriere general
Program
Programul citete instruciunile din fiierul de comenzi primit ca parametru i execut operaiile corespunztoare asupra fiierelor de date.
Programul va prelua comenzile dintr-un fiier de comenzi specificat ca parametru din linia de comand sau direct din linia de comand. Fiierul surs este n format text i conine comenzi de prelucrare a datelor n limbajul specificat n seciunea 3. Programul va executa secvenial comenzile primite opernd modificrile sau regsirile asupra datelor n regim de tranzacii. Tranzacia se consider complet dac toate operaiile au fost executate cu succes. Secvena de prelucrri din tranzacie se gestioneaz folosind structuri de date de tip FIFO. Tranzacia se execut dup ncrcarea ei n memoria intern, conform schemei prezentate n figura 2.
3. Limbajul de prelucrare
3.1 Noiuni generale
Limbajul conine o secven de comenzi care trebuie executate n ordinea n care apar n fiier. Exist trei tipuri de instruciuni: instruciuni pentru manipularea fiierelor: CREATE, OPEN, CLOSE, INDEX instruciuni pentru modificarea datelor: INSERT, UPDATE, DELETE instruciunea SELECT pentru regsirea informaiilor dintr-un fiier instruciunea GET pentru afiarea datelor stocate n tabela de dispersie Programul va opera cu un singur fiier de date deschis (numit fiier curent) asupra cruia sunt operate comenzile. Schimbarea fiierului curent se poate face prin deschiderea unui alt fiier de date prin comanda OPEN sau prin crearea unui fiier nou prin comanda CREATE. Structura fiierului (numrul, tipul i denumirea cmpurilor) este precizat la crearea i ncrcat la deschiderea unui fiier. Prin convenie, primul cmp din structur este cheie primar pentru fiier.
3.3 Instruciuni
CREATE nume_fisier nume_camp tip [,nume_camp tip];
Creeaz un fiier de date nou cu numele specificat ca parametru, fr nici o nregistrare (un fiier text care conine doar structura). Comanda schimb fiierul curent (fiierul anterior, dac exist, va fi nchis). Header-ul fiierului conine descrierea structurii datelor (numrul, denumirea i tipul cmpurilor). Comanda permite numr nelimitat de cmpuri.
Exemplu: CREATE studenti.csv Cod NUMERIC, Nume CHAR(120), Grupa NUMERIC; Comanda va crea un fiier gol cu numele studenti.csv n directorul curent. Fiierul va avea trei cmpuri: Cod, Nume i Grupa.
OPEN nume_fisier;
Deschide un fiier existent. La deschiderea fiierului trebuie executate urmtoarele operaii: o dac exist un fiier curent, trebuie nchis o seteaz fiierul primit ca parametru ca fiier curent o deschide toate fiierele index asociate (create de utilizator folosind comanda INDEX)
Exemplu: OPEN c:\teste\studenti.csv; Deschide fiierul studenti.csv din directorul c:\teste (n cazul n care se specifica doar numele fiierului, acesta trebuie deschis din directorul curent).
INDEX nume_camp;
Construiete un fiier index pentru cmpul specificat i indexeaz toate datele existente din fiierul curent. Fiierele index vor fi create n acelai director cu fiierul de date. Toate operaiile executate pe fiiere care au fiiere index asociate trebuie s actualizeze i fiierele index.
INDEX Cod; Programul va deschide fiierul studenti.csv din directorul curent i va crea un fiier index pentru cmpul Cod care va include codurile existente n fiier.
3,Ionescu Valentina,1756
DELETE valoare_camp;
terge o nregistrare din fiierul curent (actualiznd i fiierele index n cazul n care exist). Valoarea specificat este valoarea pentru cheia primar (primul cmp) corespunztoare rndului de ters. Exemplu: Fiier iniial (studeni.csv): 1,Popescu Marian,1756 7,Petrescu Cosmin, 1752 3,Ionescu Valentina,1756 2,Enescu Mariana,1752 OPEN studenti.csv Cod NUMERIC, Nume CHAR(120), Grupa NUMERIC; DELETE 7 Fiier rezultat (studeni.csv): 1,Popescu Marian,1756 3,Ionescu Valentina,1756 2,Enescu Mariana,1752
CLOSE;
Observaie: comanda nchide fiierele utilizate; comanda dezaloc structurile interne aferente fiierului; comanda actualizeaz fiierul index.
SELECT salariu, nume TO HASH //se dezaloca tabela de dispersie anterioara; //se incarca o tabela de dispersie ce indexeaza valorile dupa salariu GET 2000 //afiseaza salariu, nume pentru prima inregistrare din tabela cu salariul 2000 GET 3000 TO 2000 //afiseaza salariu, nume pentru toate inregistrarile care au salariul cuprins intre 2000 si 3000, inclusiv
Fiierele de intrare / ieire sunt fiiere text cu urmtoarele caracteristici: fiecare linie a fiierului conine o nregistrare i se termin cu CRLF (0x0D 0x0A) cmpurile sunt separate prin virgul spaiile sunt semnificative ( Maria este diferit de Maria) virgula nu este caracter admisibil n cadrul unui cmp
6. Observaii generale
1. Toate fiierele program furnizate la intrare se presupun a fi corecte. Nu este necesar verificarea corectitudinii sintactice / semantice a intrrilor; 2. Toate fiierele temporare utilizate de ctre program vor fi create n directorul curent; 3. Programele vor fi compuse dintr-un singur fiier surs C sau C++. Nu este permis utilizarea altor biblioteci n afara celor specificate n standardul ANSI. 4. Funcia HASH folosit pentru implementarea tabelei de dispersie este diferit de formele prezentate la curs; 5. Formulele funciilor HASH i modalitatea de stocare a datelor din fiier nu se fac publice ntre echipe.