5 mai Programarea calculatoarelor. Curs 10

Documente similare
Fişiere 11 ianuarie 2004 Utilizarea şi programarea calculatoarelor. Curs 13 Marius Minea

Limbaje de Programare Curs 8 – Fisiere

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Limbaje de Programare Curs 5 – Siruri de caractere

Microsoft Word - CarteC.doc

SUBPROGRAME

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Microsoft Word - PCLP2_Curs_4_2019.doc

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

LUCRAREA NR

Top

L7

E_d_Informatica_sp_SN_2014_bar_10_LRO

Microsoft Word - CarteC.doc

Microsoft Word - c6.doc

PRELEGERE XIII PROGRAMAREA CALCULATOARELOR ŞI LIMBAJE DE PROGRAMARE Noţiunea de funcţie - continuare VI. Funcţii recursive O funcţie se poate activa n

Rezolvare model de subiect practic P2 Programarea Calculatoarelor sesiunea iunie 2017

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Slide 1

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

Analiză statică Analiza fluxului de date 23 octombrie 2014

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

E_d_Informatica_sp_MI_2015_bar_02_LRO

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Object Oriented Programming

Analiză de flux de date 29 octombrie 2012

Subiectul 1

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

PPSD

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

tehnologii web

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Slide 1

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Paradigme de programare

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Programarea şi utilizarea calculatoarelor

1

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

7. Alinierea robustă a densităţilor de puncte 3D Măsurarea distanţei dintre diferite forme geometrice 3D Estimarea rotaţiei şi a translaţiei optime în

Lab6LCD

Declararea variabilelor

Programarea şi utilizarea calculatoarelor

Microsoft PowerPoint - Curs_SDA_3_RO_2019_v2.pptx

Nr. 932 din Avizat ISJ Vâlcea, Inspector școlar informatică, Ciochină Luisa EXAMEN DE ATESTARE A COMPETENȚELOR PROFESIONALE A ABSOLVENȚILOR

Microsoft Word - 2 ES RO.doc

PowerPoint-Präsentation

Microsoft Word - unitati de invatare 11liceu-12 sam

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

Laborator 3

Microsoft Word - O problema cu bits.doc

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Microsoft Word - BD4_Curs11.doc

Laborator 04: Apeluri de funcții

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

Microsoft Word - CarteC.doc

Diapositive 1

PCLPII-C16(9)

Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu mo

PROGRAMARE ORIENTATA PE OBIECTE

PowerPoint-Präsentation

Mic ghid de folosire a Gmail

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

-

Programarea şi utilizarea calculatoarelor

Paradigme de Programare

Gestionarea I/E

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

C++ Probleme

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

PHP (II)

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

Slide 1

Slide 1

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Aggregating Data

Utilizare Internet

Microsoft Word - Ivan, Boja.doc

4. Detectarea cantelor Calculul gradientului într-o imagine Detectorul de cante Canny Transformata Hough În această lucrare vor fi studiate metode de

Microsoft Word - Cuprins_LP.doc

Cuprins

Raportarea serviciilor de dializă la nivel CNAS

Microsoft Word - Prezentare - A4 - cernavoda.doc

Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Intercl

Microsoft Word - Lab1a.doc

Laboratory for Computer Security Education 1 Vulnerabilitatea datorată concurenței Copyright Wenliang Du, Syracuse University. The developme

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XI 1.Fişierul text bac.in conţine cel mult 1000 de

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Introducere în limbajul JavaScript

ASDN

Transcriere:

Programarea calculatoarelor Fişiere 5 mai 2009

Fişiere 2 Lucrul cu fişiere La nivel de utilizator, ne referim la un fişier prin nume. La nivelul interfeţei de programare, bibliotecile limbajului C definesc un tip FILE cu elementele necesare accesului la fişier (poziţia curentǎ în fişier, tamponul de date, indicatori de eroare şi EOF) În programe se folosesc doar pointeri la acest tip: FILE *. Din punct de vedere logic, un fişier e un flux (stream) de octeţi Lucrul tipic cu fişiere: se deschide, se prelucreazǎ, se închide Fişiere standard predefinite (şi deschise automat la rulare) stdin: fişierul standard de intrare (normal: tastatura) stdout: fişierul standard de ieşire (normal: ecranul) stderr: fişierul standard de eroare (normal: ecranul) Obs: E bine ca mesajele de eroare sǎ fie scrise la stderr, pentru a putea fi separate (prin redirectare) de mesajele normale de ieşire

Fişiere 3 Deschiderea şi închiderea fişierelor FILE *fopen (const char *path, const char *mode); arg. 1 (şir): numele fişierului (absolut sau faţǎ de directorul curent) arg. 2 (şir): modul de deschidere; primul caracter semnificǎ: fopen returneazǎ NULL în caz de eroare (trebuie testat!!!) Altfel, valoarea returnatǎ (un FILE*) e folositǎ pt. lucrul în continuare r: deschidere pentru citire (fişierul trebuie sǎ existe) w, a: deschidere pt. scriere; dacǎ fişierul nu existǎ, e creat; dacǎ existǎ, e trunchiat la 0 (w) sau se adaugǎ la sfârşit (a, append) Şirul de caractere pt. modul de deschidere mai poate conţine apoi: + permite şi celǎlalt mod (r/w) în plus faţǎ de cel din primul caracter b deschide fişierul în mod binar (implicit: în mod text) int fclose(file *stream); Scrie orice a rǎmas în tampoanele de date, închide fişierul Returneazǎ 0 în caz de succes, EOF în caz de eroare

Fişiere 4 Deschiderea, închiderea şi lucrul cu fişierele Secvenţa tipicǎ de lucru cu un fişier (ex. pt. citire) FILE *fp; char *name = "f.txt"; // sau cu nume din argv[], sau citit if (!(fp = fopen(name, "r"))) { /* trateazǎ eroarea */ else { /* lucreazǎ cu fişierul */ if (fclose(fp)) /* eroare la ^ınchidere, trateaz-o */; La intrarea/ieşirea în mod text se pot petrece diverse conversii în funcţie de implementare (de exemplu traducere \n în \r\n pt. DOS) Datele citite corespund celor scrise doar dacǎ: toate caracterele sunt tipǎribile, \t sau \n; \n nu e precedat de spaţii; ultimul caracter e \n pentru orice alte situaţii, deschideţi fişierele în mod binar (asigurǎ corespondenţa exactǎ între conţinutul scris şi citit) Citirea şi scrierea într-un fişier folosesc acelaşi indicator de poziţie Pentru un fişier deschis în mod dual (cu +), nu se va citi direct dupǎ scriere fǎrǎ a goli tampoanele (fflush) sau a repoziţiona indicatorul; nu se scrie direct dupǎ citire fǎrǎ repoziţionarea indicatorului sau EOF

Fişiere 5 Citire/scriere (d)in fişiere Cu funcţii echivalente celor folosite pânǎ acum: int fputc(int c, FILE *stream); // scrie caracter ^ın fişier int fgetc(file *stream); // citeşte caracter din fişier // getc, putc: ca şi fgetc, fputc, dar sunt macrouri (\#define) int ungetc(int c, FILE *stream); // pune caracterul c ^ınapoi int fscanf (FILE *stream, const char *format,...); int fprintf(file *stream, const char *format,...); int fputs(const char *s, FILE *stream); // scrie un şir int puts(const char *s); // scrie şirul şi apoi \n la ieşire char *fgets(char *s, int size, FILE *stream); citeşte pânǎ la (inclusiv) linie nouǎ, sau max. size - 1 caractere, adaugǎ \0 la sfârşit citirea sigurǎ a unei linii, fǎrǎ depǎşire NU FOLOSIŢI niciodatǎ funcţia gets(), nu e protejatǎ la depǎsire!

Fişiere 6 Exemplu: afişarea unor fişiere #include <stdio.h> void cat(file *fi) // afişeazǎ un fişier { int c; while ((c = fgetc(fi))!= EOF) putchar(c); void main(int argc, char *argv[]) { FILE *fp; if (argc == 1) cat(stdin); // fǎrǎ arg, citeşte de la intrare else while (--argc > 0) { // pt. fiecare argument pe r^and if (!(fp = fopen(*++argv, "r"))) fprintf(stderr, "can t open %s", *argv); else { cat(fp); fclose(fp);

Fişiere 7 Funcţii de eroare void clearerr(file *stream); reseteazǎ indicatorii de sfârşit de fişier şi eroare pentru fişierul dat int feof(file *stream); //!= 0: ajuns la sf^arşit de fişier int ferror(file *stream); //!= 0 la eroare pt. acel fişier void exit(int status); terminǎ execuţia programului cu val. datǎ Coduri de eroare Dacǎ un apel de sistem a rezultat în eroare, se poate citi codul erorii din variabila globalǎ extern int errno; declaratǎ în errno.h Se poate folosi împreunǎ cu funcţia char *strerror(int errnum); din string.h care returneazǎ un şir de caractere cu descrierea erorii Se poate folosi direct funcţia void perror(const char *s); // stdio.h care tipǎreşte mesajul s dat de utilizator, un : şi apoi descrierea erorii

Fişiere 8 Citire şi scrierea în format binar Pânǎ acum: funcţii orientate pe caractere, linii, formatare (fişiere text) Pentru a citi/scrie direct un numǎr dat de octeţi, neinterpretaţi: size t fread(void *ptr, size t size, size t nmemb, FILE *stream); size t fwrite(void *ptr, size t size, size t nmemb, FILE *stream); citesc/scriu nmemb obiecte de câte size octeţi Funcţiile întorc numǎrul obiectelor complete citite/scrise corect. Dacǎ e mai mic decât cel dat, cauza se aflǎ din feof şi ferror În C, nu existǎ fişiere de anumite tipuri (file of din PASCAL); putem însǎ defini astfel de funcţii pentru fiecare tip în parte: size_t readint(int *pn, FILE *stream) // intreg ^ın format binar { return fread(pn, sizeof(int), 1, stream); size_t writedbl(double x, FILE *stream) // real ^ın format binar { return fwrite(&x, sizeof(double), 1, stream);

Fişiere 9 Exemplu: copierea a douǎ fişiere #include <errno.h> #include <stdio.h> #define MAX 512 int filecopy(file *fi, FILE *fo) { char buf[max]; int size; // nr. octeţi citiţi while (!feof(fi)) { size = fread(buf, 1, MAX, fi); fwrite(buf, 1, size, fo); // scrie doar size octeţi if (ferror(fi) ferror(fo)) return errno; return 0;

Fişiere 10 Exemplu: copierea a douǎ fişiere (cont.) void main(int argc, char *argv[]) { FILE *fi, *fo; if (argc!= 3) { fprintf(stderr, "usage: copy source destination\n"); exit(-1); else { if (!(fi = fopen(argv[1], "r"))) { fprintf(stderr, "%s: can t open %s: ", argv[0], argv[1]); perror(null); /* am scris deja mesajul */; exit(errno); if (!(fo = fopen(argv[2], "w"))) { fprintf(stderr, "%s: can t open %s: ", argv[0], argv[2]); perror(null); exit(errno); if (filecopy(fi, fo)) perror("eroare la copiere"); if (fclose(fi) fclose(fo)) perror("eroare la ^ınchidere");

Fişiere 11 Funcţii de poziţionare, etc. Pe lângǎ citire/scriere secvenţialǎ, e posibilǎ poziţionarea în fişier: long ftell(file *stream); // pozitia de la ^ınceputul fişierului int fseek(file *stream, long offset, int whence); // poziţionare Al treilea parametru: punctul de referinţǎ pt. poziţionarea cu offset: SEEK SET (început), SEEK CUR (punctul curent), SEEK END (sfârşit) void rewind(file *stream); /* repoziţioneazǎ indicatorul la început */ (echivalent cu (void)fseek(stream, 0L, SEEK SET), plus clearerr Repoziţionarea trebuie efectuatǎ: când dorim sa sǎrim peste o anumitǎ porţiune din fişier când fişierul a fost scris, şi apoi dorim sǎ revenim sǎ citim din el int fflush(file *stream); scrie în fişier tampoanele de date nescrise pt. fluxul de ieşire stream

Fişiere 12 Funcţii de citire/scriere formatatǎ în şiruri Funcţiile de tipul printf/scanf pot avea ca sursǎ/dest. şi şiruri de char. int sprintf(char *s, const char *format,...); int sscanf(const char *s, const char *format,...); Pentru sprintf, poate apǎrea problema depǎşirii tabloului în care se scrie, dacǎ acesta nu e dimensionat corect (suficient). Se recomandǎ: int snprintf(char *str, size_t size, const char *format,...); în care scrierea e limitatǎ la size caractere variantǎ sigurǎ Între funcţii similare, trebuie alese cele corespunzǎtoare situaţiei. Ex: int n, r; char *s, *end; n = atoi(s); // doar c^and s e bun; nu semnaleazǎ erori n = strtol(s, &end, 10); /* se pot testa erori (s == end) şi prelucra mai departe de la end */ r = sscanf(s, "%d", &n); /* se pot testa erori (r!= 1) dar punctul de oprire ^ın s nu e explicit (eventual cu %n) */