void Ordinamento(FILE* Archivio, T_Nominativo Record)
{
// Vettore Da ordinare = contiene "LENGTH_ORDINAMENTO" record presi dall'archivio
T_Nominativo Ordinare[LENGTH_ORDINAMENTO];
T_Nominativo AppSottofile;
int Nrec = NumeroRecord(Archivio, Record);
int Sottoarchivi = (Nrec)/(LENGTH_ORDINAMENTO);
// Sottoarchivio aggiuntivo nel caso in cui il resto tra Nrec/LENGTH_ORDINAMENTO sia maggiore di 0
if((Nrec%LENGTH_ORDINAMENTO)>0) Sottoarchivi++;
int I=0; // Indice Crea Sottoarchivi
int J=0; // Indice copia nel vettore
int K=0; // Indice Scrittura Sottoarchivi
bool copiato = 0; // E' Stato copiato?
int IndicePosizioneLetturaSottofile = 0; // fseek
int RecordCopiati = 0; // Quanti ne copia
char NomeFisicoApp[9];
NomeFisicoApp[0] = 'T';
NomeFisicoApp[1] = 'E';
NomeFisicoApp[2] = 'M';
NomeFisicoApp[3] = 'P';
NomeFisicoApp[4] = '_';
NomeFisicoApp[5] = 'A';
NomeFisicoApp[6] = '.';
NomeFisicoApp[7] = 'd';
NomeFisicoApp[8] = 'a';
NomeFisicoApp[9] = 't';
while(I<Sottoarchivi)
{
FILE* App;
App = fopen(NomeFisicoApp,"w+");
Archivio = fopen(FILE_NAME,"r+");
if(!Archivio)
{
Gotoxy(q,y+10);
cout << "ERRORE ARCHIVIO PRINCIPALE";
}else if(!App)
{
Gotoxy(q,y+10);
cout << "ERRORE FILE D'APPOGGIO";
}else
{
/* Prelevo Record da "Archivio" */
J=0;
copiato = 0;
while(J<LENGTH_ORDINAMENTO)
{
/* Copio nel vettore */
fseek
(Archivio,
sizeof(Record
)*IndicePosizioneLetturaSottofile,0
); /* Ad ogni record letto passa a quello successivo, lo farebbe normalmente
la funzione fread però nel ciclo la posizione viene cambiata e quindi
ne tengo conto qui*/
fread
(&Record,
sizeof(Record
),1,Archivio
); Ordinare[J] = Record;
// Mette correttamente i record nel vettore
J++;
copiato = 1;
IndicePosizioneLetturaSottofile++;
}
/* Se il vettore è stato riempito */
if(copiato==1){
/* Ordino il vettore */
for(int A=0;A<LENGTH_ORDINAMENTO-1;A++)
{
for(int B=A+1;B<LENGTH_ORDINAMENTO;B++)
{
// strcmp ritorna un valore positivo se la prima è maggiore della seconda
if(strcmp(Ordinare[A].Cognome,Ordinare[B].Cognome) > 0)
{
AppSottofile = Ordinare[A];
Ordinare[A] = Ordinare[B];
Ordinare[B] = AppSottofile;
}
}
}
/* Scrivo il vettore ordinaro nel sottofile */
for(K=0;K<LENGTH_ORDINAMENTO;K++)
{
fwrite
(&Ordinare
[K
],
sizeof(Record
),1,App
); Gotoxy(q,y+10);
cout << "CREATI " << Sottoarchivi << " SOTTOARCHIVI";
}
}
}
fclose(Archivio);
fclose(App);
I++;
NomeFisicoApp[5]++;
}
}
/* QUI POI CI DOVREBBE ESSERE FUSIONE */