Sunteți pe pagina 1din 7

Sistem programabil de prelucrare a datelor 1.

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

Structura sistemului este prezentat n figura urmtoare:


Fiier text care conine secvena de instruciuni de prelucrare ce trebuie executate de ctre program. Fiiere text care conin datele de prelucrat. Fiier comenzi Fiiere de date Comenzi Modificri date Citire date Fiiere create temporar de ctre program i utilizate de ctre acesta n vederea executrii comenzilor primite.

Program

Programul citete instruciunile din fiierul de comenzi primit ca parametru i execut operaiile corespunztoare asupra fiierelor de date.

Fiiere temporare (opional)

Figur 1 - Structura sistemului

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.

incarcare in memoria interna

parsare extragerea comenzilor

procesare executia comenzilor

Figur 2 - Ciclul unei tranzactii

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.2 Tipuri de date


Limbajul suport dou tipuri de date: numeric i ir de caractere. Datele numerice sunt numere ntregi (negative / pozitive) reprezentabile pe 32 de bii. Datele de tip ir de caractere sunt format din caractere ASCII i au o lungime maxim specificat. Caracterele admise sunt: litere mici / mari din alfabetul englez i cifre; spaii i caractere speciale din setul ASCII standard. Virgula este folosit pentru delimitarea valorilor i nu este caracter admisibil n cadrul irurilor de caractere.

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.

Exemplu: OPEN studenti.csv;

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.

INSERT valoare_camp [,valoare_camp];


Adaug o linie nou n fiierul de date (actualiznd i fiierele index n cazul n care exist). Comanda va primi obligatoriu valori pentru toate cmpurile din fiierul curent. Observaie: comanda INSERT genereaz eroare la introducerea unei chei existente; comanda este validat permind inserarea unei nregistrri complete ce respect structura datelor din fiier; Exemplu: CREATE c:\Teste\studenti.csv Cod NUMERIC, Nume CHAR(120), Grupa NUMERIC; INSERT 1,Popescu Marian,1756; INSERT 2,Enescu Maria,1752; INSERT 3,Ionescu Valentina,1756; Rezultatul va fi crearea fiierului text c:\Teste\studenti.csv cu urmtorul coninut: 1,Popescu Marian,1756 2,Enescu Maria,1752 3,Ionescu Valentina,1756

UPDATE valoare_camp [,valoare_camp];


Modific o linie din fiierul de date curent (actualiznd i fiierele index n cazul n care exist). Comanda va primi obligatoriu valori pentru toate cmpurile din fiierul curent. Comanda va efectua urmtoarele operaii: va cuta nregistrarea de modificat dup primul cmp (care e cheie primar prin convenie); va nlocui valorile existente cu valorile primite ca parametru; comanda UPDATE nu permite modificarea cmpului asociat cheii primare; comanda genereaz eroare. Exemplu: OPEN studenti.csv Cod NUMERIC, Nume CHAR(120), Grupa NUMERIC; UPDATE 2,Enescu Mariana,1752; Fiierul dup executarea programului va deveni: 1,Popescu Marian,1756 2,Enescu Mariana,1752

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 nume_camp operator valoare_camp [, nume_camp operator valoare_camp] TO destinaie;


Observaii: parametrul nume_camp este format numai din litere (fr spaii, cifre sau alte caractere); structurile de tip index sunt ncrcate n memoria intern n scopul prelucrrii; parametrul destinaie accept urmtoarele dou valori: o nume_fiier fiier stocat pe disc; o HASH tabela de dispersie (se utilizeaz o singur tabel de dispersie); cheia folosita de tabela de dispersie este primul cmp din comanda SELECT; ATENIE: poate fi oricare cmp din structura fiierului!!!;

GET valoare_cheie [TO valoare_cheie2]


Afieaz nregistrarea sau grupul de nregistrri din intervalul [valoare_cheie; valoare_chei2] din tabela de dispersie populat la SELECT; Exemplu: SELECT nume > Ionescu, prenume, salariu TO HASH //se dezaloca tabela de dispersie anterioara, daca exista; //se incarca o tabela de dispersie ce indexeaza valorile dupa nume GET Popescu //afiseaza nume, prenume, salariu pentru prima inregistrare cu numele Popescu; GET Popescu TO Titulescu //afiseaza nume, prenume, salariu pentru toate inregistrarile cuprinse intre Popescu si Titulescu, inclusiv;

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

4. Formatul fiierelor de intrare / ieire

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

5. Structuri de date necesare


1. Pentru structurile de tip index se folosesc arbori B sau binari de cutare echilibrai; 2. Pentru prelucrarea tranzaciilor se folosesc structuri de tip FIFO, implementare prin liste; 3. VIEW-ul returnat de SELECT (colecia de nregistrri) este gestionat printr-o tabel de dispersie; articolele din tabela de dispersie permit stocarea virtual a oricrui tip de nregistrare definit n fiierul de date.

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.

S-ar putea să vă placă și