Created
November 15, 2012 03:16
-
-
Save felialois/4076436 to your computer and use it in GitHub Desktop.
Tarea #7
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15@jose@saramago@@isabel@allende@jrr@tolkien@@@@william@shakesp |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// main.cpp | |
// Tarea Corta 7 | |
// | |
// Created by Felipe Alfaro on 11/12/12. | |
// Copyright (c) 2012 Felipe Alfaro. All rights reserved. | |
// | |
#include<iostream> | |
#include<fstream> | |
using namespace std; | |
class VariableRegistersDelimitedFields{ | |
public: | |
VariableRegistersDelimitedFields(){} | |
void arreglar(char* array,string nombre,string apellido1){ //toma los strings y los convierte en un arreglo para ser guardadod | |
int cont=0; | |
int temp; | |
for(int i=cont;i<(nombre.size());i++){ | |
array[i]=nombre[i]; | |
cont++; | |
} | |
array[cont]='@'; | |
cont++; | |
temp=cont; | |
for(int i=0;i<apellido1.size();i++){ | |
array[i+temp]=apellido1[i]; | |
cont++; | |
} | |
} | |
void getValues(int regSize, char* array){ //pide los datos al usuario | |
string _nom,_ap1,_ap2; | |
cout<<"\n"<<"Digite el nombre \n"; | |
cin>>_nom; | |
cout<<"\n"<<"Digite el primer apellido \n"; | |
cin>>_ap1; | |
arreglar(array,_nom,_ap1); | |
} | |
int toInt(string num, int size){ //convierte el string en un int | |
int numero; | |
string temp; | |
temp=num.substr(0,size); | |
numero=atoi(temp.c_str()); | |
return numero; | |
} | |
string getString(char* array,int begin,int end){ //saca un string de un arreglo de caracteres | |
string st; | |
for (int i=begin;i<end;i++){ | |
st+=array[i]; | |
} | |
return st; | |
} | |
int getInt(char* arreglo, int size, int begin, int end){ //obtiene el entero de un arreglo de chars | |
string temp=getString(arreglo, begin, end); | |
int num; | |
num=toInt(temp,size); | |
return num; | |
} | |
void escribir(string fileName,int regSize){ //le pide el nombre del autor al usuario y lo escribe | |
ofstream file; | |
file.open(fileName, ios::app|ios::binary); | |
if (file.is_open()){ | |
cout<<"open \n"; | |
char aut[regSize]; | |
for (int i=0;i<regSize;i++){ | |
aut[i]='@'; | |
} | |
getValues(regSize,aut); | |
//cout<<"\n"<<aut<<"\n"; | |
file.write(aut,regSize); | |
file.close(); | |
} | |
} | |
void desplegar(char* arreglo,int cant){ | |
cout<<"\n"; | |
for (int j=0;j<cant;j++){ | |
if (arreglo[j]!='@') { | |
cout<<arreglo[j]; | |
} | |
else{ | |
cout<<" "; | |
} | |
} | |
cout<<"\n"; | |
} | |
void leer(string fileName){ | |
int regSize; | |
ifstream::pos_type size; | |
char marcador; | |
char* primera; | |
char* memblock; | |
string linea,sub; | |
ifstream file; | |
file.open(fileName, ios::binary); | |
if (file.is_open()){ | |
cout<<"open \n"; | |
file.seekg (0, ios::end);//pone el puntero al final | |
size = file.tellg(); //obtiene pos del puntero | |
file.seekg (0, ios::beg); //pone el puntero al principio | |
primera=new char[3]; //saca la primera fila | |
file.read(primera,3); | |
regSize=getInt(primera,2,0,3); //saca el numero de la primera fila | |
marcador=primera[2]; | |
memblock = new char [size]; // | |
file.seekg (0, ios::beg); | |
file.read (memblock, size); | |
//cout<<"\n"<<memblock<<"\n" | |
int contador=0; | |
char nombre[regSize]; | |
for (int i=0;i<regSize;i++){ | |
nombre[i]='@'; | |
} | |
file.seekg (0, ios::beg); | |
while(file.tellg()!=size){ | |
file.seekg (3+(regSize*contador), ios::beg); | |
file.read (nombre, regSize); | |
desplegar(nombre, regSize); | |
contador++; | |
} | |
cout<<"terminado"; | |
getchar(); | |
file.close(); | |
} | |
} | |
}; | |
int main(int argc, const char * argv[]) | |
{ | |
int regSize=15; | |
int opcion=0; | |
VariableRegistersDelimitedFields clase; | |
string fileName="dato1.bin"; | |
//leer(fileName); | |
//escribir(fileName, regSize); | |
while (opcion!=3){ //menu | |
cout<<"\n"<<"Digite la opcion que desea \n"; | |
cout<<"1.Insertar Nuevo Autor \n"; | |
cout<<"2.Mostrar Autores \n"; | |
cout<<"3.salir \n"; | |
cin>>opcion; | |
switch (opcion) { | |
case 1: | |
clase.escribir(fileName,regSize); | |
break; | |
case 2: | |
clase.leer(fileName); | |
default: | |
break; | |
} | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment