/*fusione di
due file di testo
in un terzo file
ordinato
*/
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string.h>
#include <stddef.h>
#define L 150
using namespace std;
typedef char stringa[L];
//M:dichiarazione prototipi
void stampa_file(stringa);
int fusione_file(stringa,stringa,stringa);
int main(int argc, char *argv[])
{ stringa nome_file1,nome_file2,nome_file3;
char up,risp;
cout << "Inserisci nome del primo file\n";
cin.getline(nome_file1,L-1,'$');
cout << "Inserisci nome del secondo file\n";
cin.getline(nome_file2,L-1,'$');
cout << "Inserisci nome del terzo file\n";
cin.getline(nome_file3,L-1,'$');
cout<<endl;
switch(fusione_file(nome_file1,nome_file2,nome_file3)){
case 1:cout<<"errore apertura di "<<nome_file1;
break;
case 2:cout<<"errore apertura di "<<nome_file2;
break;
case 3:cout<<"errore apertura di "<<nome_file3;
break;
default:cout<<endl<<endl;
cout<<"Vuoi la stampa di controllo? s n \n";
cin.get(risp);
if(risp=='s'){
stampa_file(nome_file1);
stampa_file(nome_file2);
stampa_file(nome_file3);
}
}
system("pause");
return EXIT_SUCCESS;
}
int fusione_file(stringa nf1,stringa nf2,stringa nf3){
fstream ,f2,f3;
char buf1,buf2;
.open(nf1,ios::in);
if(f1==NULL)
return 1;
f2.open(nf2,ios::in);
if(f2==NULL)
return 2;
.open(nf3,ios::out);
if(f3==NULL)
return 3;
/* A:i due file sorgente non sono vuoti
*/
/*M:eseguo tanti confronti finchè non
scorro uno dei due file per intero */
while((!f1.eof())&&(!f2.eof())){
/*M prendo il file più piccolo e lo
scrivo nel terzo file*/
if(buf1<buf2){
<<buf1;
>>buf1;
}
else{
<<buf2;
f2>>buf2;
}
}
/*fine del ciclo while
soltanto uno dei due file è
stato copiato nell'altro*/
/*M:travaso il secondo file*/
while(!f1.eof()){
>>buf1;
<<buf1;
}
.close();
while(!f2.eof()){
f2>>buf2;
<<buf2;
}
f2.close();
.close();
}
/*funzione per la stampa del file*/
void stampa_file(stringa nf){
fstream f;
char buf;
cout<<"\n stampa contenuto del file "<<nf<<endl;
f.open(nf,ios::in);
if(!f){
cout<<"errore\n";
exit(1);
}
f.get(buf);
while(!f.eof()){
cout.put(buf);
f.get(buf);
}
f.close();
system("pause");
return;
}