Differences

This shows you the differences between two versions of the page.

Link to this comparison view

programare-cc:laboratoare:11 [2021/01/12 20:04]
viorel.mocanu [Problema 3A]
programare-cc:laboratoare:11 [2023/12/20 14:41] (current)
mihai.nan [Problema 1 (Rezolvata)]
Line 1: Line 1:
 ===== Laboratorul 11. Fişiere text. Argumente în linia de comandă ===== ===== Laboratorul 11. Fişiere text. Argumente în linia de comandă =====
 +
  
 În acest laborator veţi învăţa să: În acest laborator veţi învăţa să:
   * Citiţi şi scrieţi date din fişiere text.   * Citiţi şi scrieţi date din fişiere text.
   * Trimiteţi şi folosiţi argumente în linia de comandă.   * Trimiteţi şi folosiţi argumente în linia de comandă.
 +
 +====Fişiere text====
 +Pentru a realiza operaţii cu fişiere text se folosesc funcţii şi structuri definite în stdio.h:
 +
 +**FILE** este o structură ce conţine informaţiile necesare controlării unui fişier.
 +
 +''​FILE * fopen ( const char * filename, const char * mode )''​ asociază fişierul cu o structură FILE şi întoarce un pointer la această
 +structură. Dacă fişierul nu există sau nu a putut fi deschis, se va întoarce NULL. mode reprezintă modul de access dorit:
 +  * **"​r"​** deschide fişierul pentru citire; fişierul trebuie să existe.
 +  * **"​w"​** creează un fişier gol pentru scriere; dacă există deja un fişier cu acelaşi nume, conţinutul lui este şters şi este tratat ca un fişier gol.
 +  * **"​a"​** adaugă datele la sfârşitul fişierului; fişierul este creat dacă nu există.
 +  * **"​r+"​** deschide un fişier atât pentru scriere, cât şi pentru citire; fişierul trebuie să existe.
 +  * **"​w+"​** creează un fişier gol atât pentru scriere, cât şi pentru citire; dacă există deja un fişier cu acelaşi nume, conţinutul lui este şters şi este tratat ca un fişier gol.
 +  * **"​a+"​** deschide un fişier pentru citire şi adăugare la sfârşit; se poate citi de la orice poziţie din fişier, însă scrierea se face doar la sfârşit; fişierul este creat dacă nu există
 +
 +''​int fclose ( FILE * file )''​ închide fişierul asociat cu structura file şi îl dezasociază.
 +
 +Funcţii de citire şi afişare pentru fişiere:
 +  * ''​int fgetc ( FILE * f );''​ întoarce următorul caracter din fişier convertit la int sau EOF dacă s­a întâlnit sfârşitul de fişier sau o eroare.
 +  * ''​char *fgets ( char *buf, int nmax, FILE * f )''​ citeşte caractere din fişier până cănd se întâlneşte '​\n'​ (este şi el adăugat la şir) sau până când s­au citit nmax ­ 1 caractere.
 +  * ''​int fputc ( int c, FILE * f )''​ scrie caracterul c în fişier; funcţia întoarce caracterul scris, în caz de success sau EOF altfel.
 +  * ''​int fputs ( char *buf, FILE *f )''​ scrie şirul buf în fişier; în caz de eroare se întoarce EOF, altfel se întoarce o valoare non­negativă.
 +  * ''​int fscanf ( FILE *f, const char * format, ... )''​
 +  * ''​int fprintf ( FILE *f, const char * format, ... )''​
 +
 +====Argumente în linia de comandă====
 +Pentru a specifica argumente în linia de comandă, antetul funcţiei main va trebui să fie de forma:
 +<code c>  int main ( int argc, char *argv[] ); </​code>​
 +**argc** reprezintă numărul de argumente, iar **argv** vectorul de pointeri la argumente (şiruri de caractere). Primul argument argv[ 0 ] este
 +întotdeauna **numele executabilului**.
 +Pentru a seta argumentele din CodeBlocks va trebui să adăugaţi fişierul sursă la un proiect şi apoi să selectaţi: Project ­> Set programs'​
 +arguments.
 +
 +
  
 ==== Problema 1 (Rezolvata) ==== ==== Problema 1 (Rezolvata) ====
Line 26: Line 61:
     ​     ​
     pFile = fopen("​myfile.txt"​ , "​r"​);​     pFile = fopen("​myfile.txt"​ , "​r"​);​
-    if (pFile == NULL)+    if (pFile == NULL) {
         printf("​Nu s-a putut deschide fisierul"​);​         printf("​Nu s-a putut deschide fisierul"​);​
 +        return 1;
 +    }
     ​     ​
     while (fgets(buffer,​ BUFMAX, pFile) != NULL) {     while (fgets(buffer,​ BUFMAX, pFile) != NULL) {
- printf("​%s",​ buffer);+        ​printf("​%s",​ buffer);
     }     }
- fclose(pFile);​+    ​fclose(pFile)
 +    return 0;
 } }
 </​code>​ </​code>​
 +
 +
 ==== Problema 2 (Rezolvata) ==== ==== Problema 2 (Rezolvata) ====
 Scrieţi un program pentru concatenarea mai multor fişiere text într­un fişier destinaţie. Programul va primi numele fişierelor ca Scrieţi un program pentru concatenarea mai multor fişiere text într­un fişier destinaţie. Programul va primi numele fişierelor ca
-argumente în linia de comandă, în următoarea ordine: destinatie ​sursa1 sursa2 ... sursan.+argumente în linia de comandă, în următoarea ordine: destinatie ​$sursa_1, sursa_2 \dots sursa_n$.
  
 ==Date de intrare== ==Date de intrare==
-Fişierele de intrare ​sursa1 sursa2 ... sursan.+Fişierele de intrare ​$sursa_1, sursa_2 \dots sursa_n$.
 ==Date de ieşire== ==Date de ieşire==
 Fişierele de intrare concatenate în fişierul destinaţie. Fişierele de intrare concatenate în fişierul destinaţie.
Line 89: Line 129:
 ==Exemplu== ==Exemplu==
 Pentru a căuta în fişierul input.txt stringul vacanta: Pentru a căuta în fişierul input.txt stringul vacanta:
-./​executabil input.txt vacanta+ 
 +**./​executabil input.txt vacanta**
  
 ^ input.txt ^ stdout ​   ^ ^ input.txt ^ stdout ​   ^
Line 116: Line 157:
 ==Exemplu== ==Exemplu==
 Dacă, căutăm în fişierul input.txt stringul vacanta: Dacă, căutăm în fişierul input.txt stringul vacanta:
-./​executabil ­c ­i ­n input.txt vacanta+ 
 +**./​executabil ­c ­i ­n input.txt vacanta**
  
 ^ input.txt ^ stdout ​   ^ ^ input.txt ^ stdout ​   ^
Line 138: Line 180:
 ==Exemplu== ==Exemplu==
 Aplicăm algoritmul de codare pe fişierul input.txt şi vom obţine un fişier output.txt. Aplicăm algoritmul de codare pe fişierul input.txt şi vom obţine un fişier output.txt.
-./​executabil tabela_de_codare.in input.txt output.txt+ 
 + 
 +**./​executabil tabela_de_codare.in input.txt output.txt**
  
 ^ Intrare (input.txt ) ^ Ieşire (output.txt) ^ ^ Intrare (input.txt ) ^ Ieşire (output.txt) ^
programare-cc/laboratoare/11.1610474695.txt.gz · Last modified: 2021/01/12 20:04 by viorel.mocanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0