nikpez di nikpez
Ominide 738 punti

Esercizio C - File di Testo

Un file contiene un testo in cui possono apparire delle sequenze speciali composte da una lettera maiuscola racchiusa tra parentesi quadre (v. il file testo.txt come esempio). Un secondo file (può essere utile trasferirlo in memoria centrale, v. esempio tabella.txt) contiene la corrispondenza tra lettere maiuscole e numeri interi. Scrivere un programma C che produca sul file standard di output il testo del primo file sostituendo a ciascuna sequenza speciale il corrispondente valore numerico. Si supponga che non ci siano caratteri di una sequenza speciale non presenti nel file delle corrispondenze e che il testo non contenga i caratteri ‘[‘ e ‘]’ se non nelle sequenze speciali suddette.

Esempio
File testo.txt
Il treno delle [H] e [M] porta un ritardo di [R] minuti. Chissa’ se mi
rimborseranno i [E],[C] euro del biglietto? Il giorno [G]/[M]/2007 ci

sara’ un’altra riunione alle [A].
File tabella.txt
A 11
G 23
E 14
M 12
C 50
H 17
R 35
Output
Il treno delle 17 e 12 porta un ritardo di 35 minuti. Chissa’ se mi
rimborseranno i 14,50 euro del biglietto? Il giorno 22/12/2007 ci
sara’ un’altra riunione alle 11.
int main()
{
int tabella[26];
FILE *fpTesto;
FILE *fpTabella;
char car;
leggiTabella(tabella);
fpTesto=fopen("testo.txt","rt");
if (!fpTesto)
{
printf("Errore: il file contenente il testo da sostituire non
puo' venire aperto.\n");
exit(1);
}
while ((car=fgetc(fpTesto))!=EOF)
{
if (car == '[')
{
car=fgetc(fpTesto);
printf("%d",tabella[car-'A']);
car=fgetc(fpTesto); // leggo e ignoro la parentesi
//quadra chiusa
}
else printf("%c",car);
}
fclose(fpTesto);
getchar();
}
void leggiTabella (int tabella [])
{
FILE *fpTabella;
char lettera[2];
int num;
fpTabella=fopen("tabella.txt","rt");
if (!fpTabella)
{
printf("Errore: il file tabella non puo' venire aperto.\n");
exit(1);
}
while (fscanf(fpTabella,"%s%d",lettera,&num)!=EOF)
{
tabella[lettera[0]-'A'] = num;
}
fclose(fpTabella);
}

Registrati via email