Un fişier poate fi şters apelând funcţia unlink. Aceasta are prototipul:
int unlink (const char *cale);
unde:
- cale este un pointer spre un şir de caractere identic cu cel utilizat la crearea fişierului în funcţia creat sau fopen.
Funcţia unlink returnează valoarea zero la o ştergere reuşită, respectiv -1 în caz de eroare.
11. Funcţii standard
Vom descrie câteva clase de funcţii, numite clase de funcţii standard aflate în bibliotecile mediului BORLAND C. Funcţiile şi macrourile utilizate frecvent în majoritatea aplicaţiilor se pot grupa în următoarele clase:
-
funcţii de prelucrare a fişierelor;
-
funcţii de alocare dinamică a memoriei;
-
macrouri de clasificare;
-
macrouri de transformare a simbolurilor;
-
funcţii care realizează conversii;
-
funcţii de prelucrare a şirurilor de caractere;
-
funcţii de calcul;
-
funcţii pentru controlul proceselor;
-
funcţii de gestiune a datei şi a orei;
-
funcţii de gestiune a ecranului.
Funcţiile de la punctele a) şi b) au fost descrise în lecţii anterioare.
11.1. Macrouri de clasificare
În această clasă distingem un număr de macrouri simple care au o utilizare largă în prelucrarea simbolurilor. Definiţiile acestor macrouri se află în fişierul ctype.h
Unul dintre macrouri este denumit isascii şi are prototipul:
int isascii (int c);
Macroul returnează o valoare diferită de zero dacă valoarea lui c aparţine intervalului de numere întregi [0,127] şi zero în caz contrar. Acest macrou permite să se testeze dacă valoarea parametrului său reprezintă un cod ASCII sau nu.
Celelalte macrouri au prototipul următor:
int nume (int c);
unde nume este unul din următoarele:
isalpha dacă c este codul unei litere;
isalnum dacă c este codul unei litere sau cifre;
isdigit dacă c este codul unei cifre;
isgraph dacă c este codul unui caracter imprimabil inclusiv spaţiul;
islower dacă c este codul unei litere mici;
isprint dacă c este codul unui caracter imprimabil inclusiv spaţiu;
isspace dacă c reprezintă spaţiu, tabulator, retur de car, rând nou,
tabulator vertical, salt la început de pagină de imprimantă.
isupper dacă c este codul unei litere mari;
isxdigit dacă c este codul unei cifre hexazecimale.
Exemplu:
Programul următor citeşte un fişier şi îl rescrie schimbând literele mari cu litere mici. Căile spre cele două fişiere (sursă şi destinaţie) sunt argumente în linia de comandă:
argv[1] este un pointer spre fişierul sursă;
argv[2] este un pointer spre fişierul destinaţie.
#include
#include
void main ( int argc, char *argv[ ] )
{ FILE *pf1, *pf2;
int c;
if (argc != 3)
{ printf (“linia de comanda eronata\n”);
exit(1);
}
if (( pf1 = fopen (argv[1],”r”) ) = = NULL
{ printf (“nu se poate deschide fisierul”%s\n”, argv[1]);
exit(1);
}
if (( pf2 = fopen (argv[2],”w”) ) = = NULL
{ printf (“nu se poate deschide fisierul”%s\n”, argv[2]);
exit(1);
}
while (( c = getc (pf1)) != EOF)
if (isascii(c) && isupper (c))
putc (c - ‘A’ + ‘a’, pf2); // c este codul unei litere mari
else
putc(c, pf2); // c este codul unei litere mici
fclose (pf1);
fclose (pf2);
// afisarea fisierului destinatie
if (( pf2 = fopen (argv[2], “r”) = = NULL)
{ printf (“nu se poate deschide in citire:%s\n”, argv[2]);
exit(1);
}
while ((c = getc(pf2)) != EOF) putchar (c);
fclose (pf2);
}
11.2. Macrouri de transformare a simbolurilor
În această clasă distingem macrouri definite tot în fişierul ctype.h. Prototipurile acestor macrouri sunt:
int toascii (int c); returnează ultimii 7 biţi ai lui c (care reprezintă un
cod ASCII);
int tolower (int c); transformă pe c din literă mare în literă mică;
int toupper (int c); transformă pe c din literă mică în literă mare.
11.3. Conversii
O dată are un format extern şi un format intern. Prin conversie înţelegem o transformare a unei date dintr-un format al ei în celălalt. Conversiile se pot face sub controlul unui format sau fără format. Dintre funcţiile care realizează conversii sub controlul formatelor amintim:
printf;
fprintf;
scanf;
fscanf;
Aceste funcţii au fost descrise în lecţiile anterioare. Vom da în continuare câteva funcţii care realizează conversii fără format şi care sunt utilizate mai frecvent. Aceste funcţii au prototipurile în fişierul stdlib.h.
Funcţia atoi are prototipul:
int atoi (const char *ptr);
unde:
-
ptr este un pointer spre o zonă de tip caracter ce conţine cifre zecimale care
sunt, eventual, precedate de semnul minus;
Efectul:
-
şirul de cifre spre care pointează ptr este convertit din întreg zecimal în întreg binar de tip int.
Observaţie:
1o. Funcţia returnează rezultatul acestei conversii.
Funcţia atol are prototipul:
long atol (const char *ptr);
unde:
-
ptr este un pointer spre o zonă de tip caracter ce conţine cifre zecimale care
sunt, eventual, precedate de semnul minus;
Efectul:
-
şirul de cifre spre care pointează ptr este convertit din întreg zecimal în întreg binar de tip long.
Observaţie:
1o. Funcţia returnează rezultatul acestei conversii.
Funcţia atof are prototipul:
double atof (const char *ptr);
unde:
-
ptr este un pointer spre o zonă de tip caracter ce conţine cifre zecimale care
sunt, eventual, precedate de semnul minus (poate conţine marca zecimală);
Efectul:
-
şirul de cifre spre care pointează ptr este convertit în virgulă flotantă dublă precizie.
Observaţie:
1o. Funcţia returnează rezultatul acestei conversii.
Funcţia itoa are prototipul:
char *itoa (int val, char *sir, int baza)
Efectul:
-
valoarea parametrului val se converteşte din întreg binar de tip int în baza de numeraţie definită de parametrul baza şi se păstrează în zona spre care pointează sir.
Observaţie:
1o. Funcţia returnează pointerul sir.
Funcţia ltoa are prototipul:
char *ltoa (long val, char *sir, int baza)
Efectul:
-
valoarea parametrului val se converteşte din întreg binar de tip long în baza de numeraţie definită de parametrul baza şi se păstrează în zona spre care pointează sir.
Observaţie:
1o. Funcţia returnează pointerul sir.
Dostları ilə paylaş: |