Referate Meniu
Astronomie
Biologie
Chimie
Desen
Diverse
Drept
Economie
Engleza
Filozofie
Fizica
Franceza
Geografie
Germana
Informatica
Istorie
Italiana
Marketing
Matematica
Medicina
Muzica
Psihologie
Romana
Romana1
Spaniola


 


referat, proiect, rezumat, caracterizare, lucrare de nota 10 despre:

Procesare de date PERL

Procesare de date.

 

Exemplu: Tabel cu rezultatele studentilor.

Programul produce un raport cu rezultatele studentilor la examene, combinand date din doua fisiere ce contin informatii despre studenti respectiv notele obtinute de fiecare la examene.

Fisierul de intrare studenti are campurile delimitate prin : si contine pe fiecare linie numarul matricol, numele si anul in care este studentul. 12751flm92nku8d

28602:Muresan Robert:2

38601:Pop Ioan:3

48000:Pop Vasile:1

Fisierul de intrare note are campurile delimitate prin spatii si contine pe fiecare linie numarul matricol, examenul, si numarul de credite obtinute. lk751f2192nkku

28602 1 4

38601 1 2

48000 1 1

28602 2 5

38601 2 3

Se observa ca Pop Vasile a lipsit la al 3-lea examen.

Raportul afisat de program arata in felul urmator:

Nr. Mat Nume 1 2 Total

28602 Muresan Robert 4 5 9

38601 Pop Ioan 2 3 5

48000 Pop Vasile 1 1

Total: 7 8

Programul care a generat acest raport este urmatorul:

#! usr/bin/perl

# Catalog de Note - pentru demonstrarea lucrului cu sistemul I/O, liste asociative # sortare si formatarea unui raport

# Programul accepta orice numar de studenti si examene, respectiv trateaza si # cazurile cand anumite informatii lipsesc.

$studfile = 'studenti';

$notfile = 'note';

# Daca fisierele se pot deschide, atunci perl nu mai evalueaza si restul expresiei ce # urmeaza dupa ||

open (NUME,"<studfile") || die "Nu pot deschide fisierul $studfile! \n";

open(NOTE,"<notfile") || die "Nu pot deschide fisierul $notfile! \n";

# Construieste o lista asociativa cu informatiile despre studenti folosind ca si # cheie, numarul matricol

while(<NUME>){

($nrmat,$nume,$an) = split(':',$_);

$nume{$nrmat} = $nume;

if (length($nume) > $maxlengthnume){

$maxlengthnume = length($nume);

}

}

close NUME;

# Construieste un tabel cu notele de la exemene

while(<NOTE>){

{$nrmat,$nrexam,$nota} = split;

$nota{$nrmat,$nrexam} = $nota;

if ($nrexam > $maxnrexam){$maxnrexam = $nrexam;}

}

close NOTE;

# Tipareste raportul cu datele citite

printf "%6s %-${maxlengthnume}s ",'Nr. Mat','Nume';

foreach $nrexam(1..$maxnrexam){

printf "%4d",$nrexam;

}

printf "%10s\n\n",'Total:';

# Subrutina dupanume este folosita pentru sortarea sirului %nume

# Functia "sort" transmite variabilele $a si $b subrutinelor pe care le apeleaza

# Functia " x cmp y " returneaza -1 daca x < y , 0 daca x=y si 1 daca x > y.

sub dupanume {$nume{$a} cmp $nume{$b}}

# Ordoneaza numerele matricole astfel incat numele studentilor sa apara in # ordine alfabetica

foreach $nrmat(sort dupanume keys(%nume)){

# Tipareste creditele obtinute si totalul pentru fiecare student

printf "%6d %-${maxlengthnume}s ", $nrmat,$nume{$nrmat};

$total = 0;

foreach $nrexam(1..$maxnrexam){

printf "%4s",$nota{$nrmat,$nrexam};

$total += $nota($nrmat,$nrexam);

$examtot($nrexam) += $nota($nrmat,$nrexam);

}

printf "%10d\n",$total;

}

printf "\n%6s %${maxlengthnume}s ",' ',"Total: ";

foreach $nrexam(1..$maxnrexam){

printf "%4d",$examtot{$nrexam};

}

printf "\n";

exit(0).