Ejemplo n.º 1
0
int Servicios::procesarLibro(int indice)
{
	int error = 0;
	SinIndice *listas = SinIndice().getInstancia();

	list<unsigned int> *lista;

	switch(indice)
	{
		case INDICE_AUTORES :lista = listas->getPendientesAutores();break;
		case INDICE_EDITORIALES:lista = listas->getPendientesEditoriales();break;
		case INDICE_TITULOS:lista = listas->getPendientesTitulos();break;
		case INDICE_PALABRAS:lista = listas->getPendientesPalabras();break;
	}

	for (list<unsigned int>::iterator it = lista->begin(); it != lista->end(); it++)
	{
		Libro *libro = 0;
		int error = recuperarLibro((*it), &libro);
		cout <<"Autor: "<< libro->getAutor() <<endl;
		cout <<"Editorial: "<< libro->getEditorial() <<endl;
		cout <<"Titulo: "<< libro->getTitulo() <<endl;
		cout <<"Id: "<< libro->getId() <<endl;
		cout <<"Cant.palabras: " << libro->getCantPalabras() << endl;
		//cout << "Presione ENTER para continuar...." << endl;
		//cin.get();

		switch(indice)
		{
			case INDICE_AUTORES :error = agregarIndiceAutores(libro);break;
			case INDICE_EDITORIALES:error = agregarIndiceEditoriales(libro);break;
			case INDICE_TITULOS:error = agregarIndiceTitulos(libro);break;
			case INDICE_PALABRAS:error = agregarIndicePalabras(libro);break;
		}

		delete libro;
	}

//limpia la lista de ids pendientes de procesar
	switch(indice)
	{
		case INDICE_AUTORES :error = listas->limpiarListaAutores();break;
		case INDICE_EDITORIALES:error = listas->limpiarListaEditoriales();break;
		case INDICE_TITULOS:error = listas->limpiarListaTitulos();break;
		case INDICE_PALABRAS:error = listas->limpiarListaPalabras();break;
	}

	return error;
}
Ejemplo n.º 2
0
int main(int argc, char const *argv[]){
	//Editorial editoriales[30];
	int seleccionMenu;
	bool headerExists = false;
	bool repeat = true;
	bool headerDirty = false;
	bool dirtyHeader = false;
	bool indexExists = false;
	Header header(-1, sizeof(Libro),0,false);
	bool noWrite = false;
	//editorialID nombre Direccion

	//creating index, attempt 2
	ifstream infileLibros("libros.bin",ios::binary);
	ifstream infileIndex("index.bin",ios::binary);
	ifstream infileEditorial("editoriales.bin", ios::binary | ios::in);
	Header jader;
	int aHierro = 0;
	char nombreEditoriales[21][25] = {"Alfaguara", "Algaida", "Almadraba", "Algar", "Almuzara",
	 "Anaya", "Apila","Buen Paso","Bambu","Berenice",
	 "Barcanova","Brosquil","Casals","Bromera",
	 "Coco Books","ComaNegra","Creagem","Edebe","Edelvives","Destino"};
	char direccionEditoriales[21][25] = {"La Canoa","Puerto Rico","Las Hadas","Las Uvas","Villa Olimpica",
	"Kennedy","Kansas","California","Romania","Grecia",
	"Francia","Alemania","Los Tostones","Mexico","Canada",
	"China","Portugal","Chile","Colombia","Venezuela"};

	if(!infileEditorial.good()){
		infileEditorial.close();
		ofstream edit("editoriales.bin", ios::binary| ios::out | ios::trunc);
		Editorial* editor;
		for (int i = 1; i < 21; ++i){
				editor = new Editorial(i,nombreEditoriales[i],direccionEditoriales[i]);
				edit.write(reinterpret_cast<char*>(&editor), sizeof(Editorial));
				delete editor;
		}
		edit.close();
	}else{
		infileEditorial.close();
	}










	if (infileLibros.good()){
		infileLibros.seekg(0);
		infileLibros.read(reinterpret_cast<char*>(&jader), sizeof(Header));
		dirtyHeader = jader.getDirty();
		if (dirtyHeader == true){
			aHierro = 1;
		}
	}

	infileLibros.close();
	infileIndex.close();

	if (aHierro == 1){
		cout<<"Creando Index..."<<endl;
		ifstream Registry("libros.bin", ios::binary);
		Registry.seekg(sizeof(Header));
		Libro bookTemp;
		vector<char*> keys;
		vector<long int> offsets;
		int contadorRegistros= 0;

		while(!Registry.eof()){
			Registry.read(reinterpret_cast<char*>(&bookTemp),sizeof(Libro));
			if(!Registry.eof()){
				if(!bookTemp.getDeleted()){
					keys.push_back(new char[14]);
					char finalKey[14] ;
					for (int i = 0; i < 13; ++i){
						finalKey[i] = bookTemp.getISBN()[i+9];
					}
					finalKey[14] = '\0';
					strcpy(keys.at(keys.size()-1),finalKey);
					offsets.push_back(contadorRegistros*sizeof(Libro) + sizeof(header));
					contadorRegistros++;

					}else{
						contadorRegistros++;
					}
				}
					
		}
	

		vector<indexFile*> newRegistros;

		for (int i = 0; i < keys.size(); ++i){
			newRegistros.push_back(new indexFile(keys.at(i),offsets.at(i)));
		}

		//ORDENANDO LA LISTA DE newRegistros
		long int key1;
		long int key2;
		char keyTemp[14];
		long int offsetTemp;
		bool isI;
		bool isJ;
		indexFile indexTemp;
		vector<int> erasedPos;
		if(newRegistros.size()>1){
			for (int i = 0; i < newRegistros.size()-1; ++i){
				for (int j = 1; j < newRegistros.size(); ++j){
						
					key1 = atol(newRegistros.at(i)->getLlave());
					key2 = atol(newRegistros.at(j)->getLlave());

					if(key2<key1){
						//indexTemp = *newRegistros.at(i);
						//newRegistros.at(i) = newRegistros.at(j);
						//&newRegistros.at(j) = indexTemp;
						strcpy(keyTemp,newRegistros.at(i)->getLlave());
						//cout<<"Este es el KeyTemp: "<<keyTemp<<endl;
						offsetTemp = newRegistros.at(i)->getOffset();
						//cout<<"Este es su offset: "<<offsetTemp<<endl;
						delete newRegistros.at(i);
						newRegistros.at(i) = new indexFile(newRegistros.at(j)->getLlave(),newRegistros.at(j)->getOffset());
						delete newRegistros.at(j);
						newRegistros.at(j) = new indexFile(keyTemp,offsetTemp);






						/*
						isI = false;
						isJ = false;
						for (int k = 0; k < erasedPos.size(); ++k){
							if(i == erasedPos.at(k)){
								isI = true;
								break;
							}
						}
						for (int k = 0; k < erasedPos.size(); ++k){
							if(j == erasedPos.at(k)){
								isJ = true;
								break;
							}
						}

						if(!isI){
							erasedPos.push_back(i);
						}
						if(!isJ){
							erasedPos.push_back(j);
						}
						*/
					}
				}	
			}
		}


		ofstream indice("index.bin",ios::binary| ios::trunc | ios::out);
		for (int i = 0; i < newRegistros.size(); ++i){
			indice.write(reinterpret_cast<char*>(newRegistros.at(i)),sizeof(indexFile));
		}
		indice.close();

		for (int i = 0; i < keys.size(); ++i){
			delete keys.at(i);
		}
		//bool deleteR;
		//for (int i = 0; i < newRegistros.size(); ++i){
			/*deleteR = true;
			for (int j = 0; j < erasedPos.size(); ++j){
				if(i == erasedPos.at(j)){
					deleteR = false;
					break;
				}
			}
			if(deleteR){
				delete newRegistros.at(i);
			}
			*/
		//	delete newRegistros.at(i);
		//}
			for (int i = 0; i < newRegistros.size(); ++i){
				delete newRegistros.at(i);
			}




	}

	bool RealDirty = false;
	int contadorAle = 0;

	do {

		ifstream ifstreamer("libros.bin", ios::binary | ios::in);
		Header temptemptemp;
		ifstreamer.seekg(0);
		ifstreamer.read(reinterpret_cast<char*>(&temptemptemp), sizeof(Header));
		ifstreamer.close();
		cout<<"Avail List = "<<temptemptemp.getAvailList()<<endl;

		seleccionMenu = menu();
		cout<<seleccionMenu<<endl;
		ifstream infile("libros.bin",ios::binary);
		if (!headerExists){
			if(!infile.good()){
				infile.close();
				ofstream fileWrite("libros.bin",ios::binary| ios::trunc | ios::out);
				//int availList,int sizeOfCampo,int RecordCount,bool DirtyBit
				//fileWrite.write(reinterpret_cast<char*>(&header,sizeof(Header)));
				fileWrite.write(reinterpret_cast<char*>(&header),sizeof(Header));
				fileWrite.close();
				headerExists = true;
				
			}else{
				ifstream infile("libros.bin",ios::binary);			
				infile.read(reinterpret_cast<char*>(&header),sizeof(Header));
				infile.close();
				headerExists = true;
			}
		}

		if(seleccionMenu==1){
			contadorAle++;
			char defaultAvail[] = "0000000-1";
			char ISBN [23];
			char ISBNTemp[14];
			char Nombre[76];
			char Autor[76];
			unsigned int editorialID;
			cin.ignore();
			cout<<"Porfavor ingrese el ISBN del libro: ";
			cin.getline(ISBNTemp,14);
			strcpy(ISBN,defaultAvail);
			strcat(ISBN,ISBNTemp);
			cout<<endl;
			cout<<"Porfavor ingrese el nombre del libro: ";
			cin.getline(Nombre,76);
			cout<<endl;
			cout<<"Porfavor ingrese el nombre del autor del libro: ";
			cin.getline(Autor,76);
			cout<<endl;
			cout<<"porfavor ingrese un ID (1 - 20) : ";
			cin>>editorialID;
			Libro libroTemp(ISBN,Nombre,Autor,editorialID);
			Header Heather;

			ifstream heath("libros.bin", ios::binary | ios::in);
			heath.seekg(0);
			heath.read(reinterpret_cast<char*>(&Heather), sizeof(Header));
			heath.close();




			if (Heather.getAvailList()==-1){
				ofstream outfile("libros.bin",ios::binary | ios::app | ios::ate);
				outfile.write(reinterpret_cast<char*>(&libroTemp),sizeof(Libro));
				outfile.close();
				header.setRecordCount(header.getRecordCount()+1);
				headerDirty = true;
				RealDirty = true;

			}else{
				long int offset = Heather.getAvailList();
				long int nextOffset;
				ifstream readFile("libros.bin", ios::binary | ios::in);
				Libro Book;
				readFile.seekg(offset);
				readFile.read(reinterpret_cast<char*>(&Book), sizeof(Libro));
				readFile.close();
				nextOffset = Book.getAvail();


				fstream outfile("libros.bin", ios::binary | ios::in | ios::out);
				outfile.seekp(offset);
				outfile.write(reinterpret_cast<char*>(&libroTemp), sizeof(Libro));

				Heather.setAvailList(nextOffset);
				outfile.seekp(0);
				outfile.write(reinterpret_cast<char*>(&Heather), sizeof(Header));
				outfile.close();


				header.setRecordCount(header.getRecordCount()+1);
				headerDirty = true;
				RealDirty = true;






				/*
				long int offset = (header.getAvailList()*sizeof(Libro)) + sizeof(Header);
				streampos pos = offset;
				ifstream infile("libros.bin", ios::binary);
				infile.seekg(pos);
				Libro temp;
				infile.read(reinterpret_cast<char*>(&temp),sizeof(Libro));
				char deletedISBN[23];
				strcpy(deletedISBN,temp.getISBN());
				char newposition[7];

				int contador = 0;
				int contadorAsterisco = 0;
				int debug;
				while(contadorAsterisco<2){
					if(deletedISBN[contador]=='*'){
						contadorAsterisco++;
					}else{
						if(contador==1){
							newposition[0] = deletedISBN[contador+1];
						}else{
							newposition[contador+1] = deletedISBN[contador];
						}
					}
				}
				//long int nuevoElementoAvail = static_cast<long int>(&newposition);
				long int nuevoElementoAvail = (long int) newposition;
				header.setAvailList(nuevoElementoAvail);

				fstream outfile("libros.bin", ios::binary | ios::out | ios::in);
				outfile.seekp(pos);
				outfile.write(reinterpret_cast<char*>(&libroTemp), sizeof(Libro));
				outfile.close();
				headerDirty = true;
				header.setRecordCount(header.getRecordCount()+1);
				RealDirty = true;
				*/

				
			}

				
		
		}else if(seleccionMenu==2){
			ifstream infile("libros.bin",ios::binary);
			Libro libro;
			infile.seekg(sizeof(Header));
			int contador = 0;
			while(!infile.eof()){
				char actualISBN[23];
				char ISBNfinal[14];
				int contadorFinal=0;
				int contadorAsterisco=0;
				

				infile.read(reinterpret_cast<char*>(&libro),sizeof(Libro));	
				strcpy(actualISBN,libro.getISBN());

				/*if (actualISBN[0] == '*'){
					for (int i = 0; i < strlen(actualISBN); ++i){
						if(actualISBN[i] == '*'){
							contadorAsterisco++;
						}
						if(contadorAsterisco == 2){
							ISBNfinal[contadorFinal] = actualISBN[i];
							contadorFinal++;
						}
					}
				}
				*/
				char ISBNToShow[14];
				int contadorToShow=0;
				if(ISBNfinal[7] == '-'){
					for (int i = 0; i < 14; ++i){
						ISBNToShow[i] = libro.getISBN()[i+9];
					}
					ISBNToShow[14] = '\0';
					
					
					if (!infile.eof() && libro.getMark() != '*'){
						contador++;
						cout<<endl;
						cout<<contador<<": ";
						cout<< "ISBN: "<<ISBNToShow<<endl;
						cout<<"Nombre del Libro: "<<libro.getNombre()<<endl;
						cout<<"Autor: "<<libro.getAutor()<<endl;
						cout<<"Nombre de la Editorial: "<<nombreEditoriales[libro.getEditorialID()]<<endl;
						cout<<"Direccion de la Editorial: "<<direccionEditoriales[libro.getEditorialID()]<<endl<<endl;

					}

				}else{
					char ISBNToShow[14];
					int contadorshow = 0;
					/*
					for (int i = 0; i < strlen(libro.getISBN()); ++i){
						if (i>8){
							ISBNToShow[contadorshow] = libro.getISBN()[i];
							contadorshow++;
						}
					}
					*/
					for (int i = 0; i < 14; ++i){
						ISBNToShow[i] = libro.getISBN()[i+9];
					}
					ISBNToShow[14] = '\0';
					if (!infile.eof() && libro.getMark() != '*'){
						contador++;
						cout<<contador<<"= ";
						cout<< "ISBN: "<<ISBNToShow<<endl;
						cout<<"Nombre del Libro: "<<libro.getNombre()<<endl;
						cout<<"Autor: "<<libro.getAutor()<<endl;
						cout<<"Nombre de la Editorial: "<<nombreEditoriales[libro.getEditorialID()]<<endl;
						cout<<"Direccion de la Editorial: "<<direccionEditoriales[libro.getEditorialID()]<<endl<<endl;
					}

				}

					
			}
			infile.close();
			
			

		}/*else if (seleccionMenu==3){

			//Modificar
			char busquedaLibro[14];
			cout<<endl<<"Porfavor ingrese el ISBN del libro que desea modificar: ";
			cin.ignore();
			cin.getline(busquedaLibro,14);
			cout<<endl;
			ifstream index("index.bin",ios::binary|ios::in);
			indexFile indexTemp;
			long int offset;
			bool found = false;
			while(!index.eof()){
				index.read(reinterpret_cast<char*>(&indexTemp),sizeof(indexFile));
				if(!index.eof()){
					if(strcmp(busquedaLibro,indexTemp.getLlave()) == 0){
						cout<<"Se encontro el Libro: "<<endl;
						offset = indexTemp.getOffset();
						found = true;
						break;
					}
				}
			}
			index.close();

			if(found){
				Libro actual;
				ifstream libroFile("libros.bin", ios::binary | ios::in);
				libroFile.seekg(offset);
				libroFile.read(reinterpret_cast<char*>(&actual), sizeof(Libro));
				char toShow[14];
				int eleccionMod;
				for (int i = 0; i < 14; ++i){
					toShow[i] = actual.getISBN()[i+9];
				}
				toShow[14] = '\0';

				cout<< "ISBN: "<<toShow<<endl;
				cout<<"Nombre del Libro: "<<actual.getNombre()<<endl;
				cout<<"Autor: "<<actual.getAutor()<<endl;
				cout<<"ID Editorial: "<<actual.getEditorialID()<<endl<<endl;

				cout<<"Desea cambiar el ISBN junto a los otros datos? "<<endl;
				cout<<"1) Si"<<endl;
				cout<<"2) No"<<endl;
				cin>>eleccionMod;
				if(eleccionMod == 1){
					char ISBNTemp[14];
					char TempNombre[76];
					char TempAutor[76];
					unsigned int TempEditorial;
					cin.ignore();
					cout<<"Porfavor ingrese el ISBN del libro: ";
					cin.getline(ISBNTemp,14);
					char temptemp[23];
					strcpy(temptemp, actual.getISBN());
					for (int i = 0; i < 14; ++i){
						temptemp[i+9] = ISBNTemp[i];
					}
					actual.setISBN(temptemp);
					cout<<endl;
					cout<<"Porfavor ingrese el nombre del libro: ";
					cin.getline(TempNombre,76);
					cout<<endl;
					cout<<"Porfavor ingrese el nombre del autor del libro: ";
					cin.getline(TempAutor,76);
					cout<<endl;
					cout<<"porfavor ingrese un ID: ";
					cin>>TempEditorial;
					actual.setNombre(TempNombre);
					actual.setAutor(TempAutor);
					actual.setEditorialID(TempEditorial);

					fstream bookMod("libros.bin", ios::binary | ios::in | ios::out);
					bookMod.seekp(offset);
					bookMod.write(reinterpret_cast<char*>(&actual), sizeof(Libro));
					bookMod.close();
					headerDirty = true;
				}else{
					char TempNombre[76];
					char TempAutor[76];
					unsigned int TempEditorial;
					cin.ignore();
					cout<<endl;
					cout<<"Porfavor ingrese el nombre del libro: ";
					cin.getline(TempNombre,76);
					cout<<endl;
					cout<<"Porfavor ingrese el nombre del autor del libro: ";
					cin.getline(TempAutor,76);
					cout<<endl;
					cout<<"porfavor ingrese un ID: ";
					cin>>TempEditorial;
					actual.setNombre(TempNombre);
					actual.setAutor(TempAutor);
					actual.setEditorialID(TempEditorial);
					cout<<"temp editorial: "<<actual.getEditorialID()<<endl;

					fstream bookMod("libros.bin", ios::binary | ios::in | ios::out);
					bookMod.seekp(offset);
					bookMod.write(reinterpret_cast<char*>(&actual), sizeof(Libro));
					bookMod.close();
				}
			}else{
				cout<<"Lo siento no pude encontrar ese libro :( "<<endl;
			}

		}*/else if (seleccionMenu==3){
			crearIndice();
			

			char busquedaLibro[14];
			cout<<endl<<"Porfavor ingrese el ISBN del libro que desea eliminar: ";
			cin.ignore();
			cin.getline(busquedaLibro,14);
			long int offset;
			bool found = false;
			cout<<endl;
			indexFile indexTemp1;
			ifstream indexito("index.bin", ios::binary | ios::in);
			
		
			while(!indexito.eof()){
				indexito.read(reinterpret_cast<char*>(&indexTemp1),sizeof(indexFile));
				if(!indexito.eof()){
					if(strcmp(busquedaLibro,indexTemp1.getLlave()) == 0){
						cout<<"Se encontro el Libro: "<<endl;
						offset = indexTemp1.getOffset();
						found = true;
						break;
					}
				}
			}
			indexito.close();
			if (found){
				int erase;
				Libro actual;
				ifstream libroFile("libros.bin", ios::binary | ios::in);
				libroFile.seekg(offset);
				libroFile.read(reinterpret_cast<char*>(&actual), sizeof(Libro));
				libroFile.close();
				char toShow[14];
				int eleccionMod;
				for (int i = 0; i < 14; ++i){
					toShow[i] = actual.getISBN()[i+9];
				}
				toShow[14] = '\0';

				cout<< "ISBN: "<<toShow<<endl;
				cout<<"Nombre del Libro: "<<actual.getNombre()<<endl;
				cout<<"Autor: "<<actual.getAutor()<<endl;
				cout<<"ID Editorial: "<<actual.getEditorialID()<<endl<<endl;

				cout<<endl<<"De verdad quiere borrar este libro?"<<endl;
				cout<<"1) SI"<<endl;
				cout<<"2) NO"<<endl;
				cin >> erase;
				cin.ignore();

				if(erase == 1){
					

					Header headercito;
					ifstream MaxHeader("libros.bin" , ios::binary | ios::in);
					MaxHeader.read(reinterpret_cast<char*>(&headercito), sizeof(Header));
					if (headercito.getAvailList() == -1){

						headercito.setAvailList(offset);
						actual.setAvail(-1);
					}else{
						actual.setAvail(headercito.getAvailList());
						headercito.setAvailList(offset);
					}
					MaxHeader.close();

					fstream borrar("libros.bin", ios::binary| ios::in | ios::out);
					borrar.seekg(0);
					borrar.write(reinterpret_cast<char*>(&headercito), sizeof(Header));
					borrar.seekg(offset);
					actual.setDeleted(true);
					actual.setMark('*');
					borrar.write(reinterpret_cast<char*>(&actual), sizeof(Libro));
					borrar.flush();
					borrar.close();
					headerDirty = true;
				}


			}
			noWrite = true;

	

		}else if (seleccionMenu == 4){
Ejemplo n.º 3
0
int Servicios::quitarArchivo(string unId)
{
	unsigned int id = atoi(unId.c_str());
	unsigned int offset = 0;

	cout<<"Eliminando libro "<<id<<"..."<<endl;

	//recuperar el offset del primario

	string pathArbolPrimario = Parametros().getParametro(CARPETA_DATOS);
	pathArbolPrimario += NOMBRE_BMAS_PRIMARIO;

	if (pathArbolPrimario == "") return ERROR_RUTA_BMAS_PRIMARIO;

	ArbolBMasNumerico *arbolP = new ArbolBMasNumerico(pathArbolPrimario, TAMANIO_BLOQUE_BMAS_NUMERICO);

	resultadoOperacion resultado(OK);

	Registro* registro = arbolP->buscarRegistroNumerico(id, &resultado);

	//TODO ver si esta recuperando bien el offset
	if (registro && resultado.getDescripcion() == "ENCONTRADO")
		offset = registro->getReferencias()->front();
	else
		return ERROR_LIBRO_INEXISTENTE;


//quitar de el archivo de registros variables

	string arcLibros = Parametros().getParametro(ARCHIVO_LIBROS);
	ArchivoLibros *archivo = new ArchivoLibros(arcLibros);
	Libro *libro = archivo->recuperarLibro(offset);
//	cout <<"Autor: "<< libro->getAutor() <<endl;
//	cout <<"Editorial: "<< libro->getEditorial() <<endl;
//	cout <<"Titulo: "<< libro->getTitulo() <<endl;
//	cout <<"Id: "<< libro->getId() <<endl;
//	cout <<"Cant.palabras: " << libro->getCantPalabras() << endl;
//	cout << "Presione ENTER para continuar...." << endl;
//	cin.get();

//	cout << "SACO EL LIBRO DEL ARCHIVO DE REGISTROS VARIABLES" << endl;
	archivo->suprimirLibro(offset);


//quitar del primario

	//cout << "QUITO DEL PRIMARIO EL ID" << endl;

	arbolP->eliminarNumerico(libro->getId());

	delete arbolP;

//quitar de los indices

	//cout << "SACO DE LOS INDICES" << endl;

	//cout << "SACO DE AUTORES" << endl;
	sacarDelArbol(NOMBRE_BMAS_AUTORES,libro->getAutor(),libro->getId());
	//cout << "Presione ENTER para continuar...." << endl;
	//cin.get();

	//cout << "SACO DE EDITORIALES" << endl;
	sacarDelArbol(NOMBRE_BMAS_EDITORIALES,libro->getEditorial(),libro->getId());
	///cout << "Presione ENTER para continuar...." << endl;
	//cin.get();

	//cout << "SACO DE TITULOS" << endl;
	sacarDelHash(NOMBRE_HASH_TITULOS,libro->getTitulo(),libro->getId());
	//cout << "Presione ENTER para continuar...." << endl;
	//cin.get();

	//cout << "SACO PALABRAS" << endl;
	//cout << "Procesando la quita del indice..." << endl;
	set<string> *palabras = libro->getListaPalabras();

	for (set<string>::iterator it = palabras->begin(); it != palabras->end(); it++)
	{
		sacarDelHash(NOMBRE_HASH_PALABRAS, *it ,libro->getId());
	}


//quitar de la lista de libros sin procesar
	//cout << "SACO DE LOS INDICES SIN PROCESAR" <<endl;
	SinIndice *listas  = SinIndice().getInstancia();
	listas->sacarLibroDeTodasLasListas(id);

	delete archivo;

	/*******************AGREGADO ENTREGA II*************************/


	string pathArbolPalabras = Parametros().getParametro(CARPETA_DATOS);
	pathArbolPalabras += NOMBRE_BMAS_PALABRAS;
	pathArbolPalabras += "_" + Util().UIntToString(id);

	resultadoOperacion resultadoOp(OK);


	ArbolBMasAlfabetico *arbolPal = new ArbolBMasAlfabetico(pathArbolPalabras, TAMANIO_BLOQUE_BMAS_PALABRAS);



	//recorrer el arbol de palabras
	Registro *reg = arbolPal->buscarRegistro("a",&resultadoOp);
	unsigned int lista;

	while (reg != NULL)
	{
		lista = reg->getReferenciai(1);
		ListasIds().eliminarLista(lista);
		reg = arbolPal->siguiente();
	}

	arbolPal->~ArbolBMasAlfabetico();

	Util().eliminarArchivo(pathArbolPalabras);

	/*******************AGREGADO ENTREGA II*************************/


	return 0;


}
Ejemplo n.º 4
0
int Servicios::obtenerLibro(string unId)
{
	unsigned int id = atoi(unId.c_str());
	fstream libro;
	string rutaSalida = Parametros().getParametro(CARPETA_SALIDA);
	string arcLibros = Parametros().getParametro(ARCHIVO_LIBROS);

	if (arcLibros == "") return ERROR_RUTA_ARCHIVO_LIBROS;

 	ArchivoLibros *archivo = new ArchivoLibros(arcLibros);
	Libro *unLibro = NULL;
	//intento recuperar el libro
	int resultadoRecuperacion = 0;
	resultadoRecuperacion = recuperarLibro(id,&unLibro);
	if( resultadoRecuperacion == ERROR_LIBRO_INEXISTENTE){
		return resultadoRecuperacion;
	};
// BORRAR
//	Parser *unParser = new Parser();
//	unParser->parsear("./archivos/libros/Justin Somper - Vampiratas 3 - Emboscada en el Océano.txt");
//	Libro *unLibro = unParser->getLibro();
//BORRAR

	string nombreArchivo = rutaSalida + unLibro->getTitulo();
	nombreArchivo += ".txt";

	libro.open(nombreArchivo.c_str(), ios::binary | ios::out);

	unsigned int tamanio;
	char* buff;
	string linea;

//autor
	linea = "Autor: ";
	linea += unLibro->getAutor();
	linea += "\n";
//editorial
	linea += "Editorial: ";
	linea += unLibro->getEditorial();
	linea += "\n";
//titulo
	linea += "Titulo: ";
	linea += unLibro->getTitulo();
	linea += "\n";
//texto
	linea += "\n\n...\n";
	linea += unLibro->getTexto();
	linea += "\n";

	tamanio = linea.size();
	buff= new char[tamanio];
	memcpy(buff,linea.c_str(),tamanio);
	libro.write(buff,tamanio);
	delete [] buff;

	libro.close();

	archivo->~ArchivoLibros();
	unLibro->~Libro();

	return 0;
}