Skip to content

Instantly share code, notes, and snippets.

@felialois
Created November 15, 2012 03:16
Show Gist options
  • Save felialois/4076436 to your computer and use it in GitHub Desktop.
Save felialois/4076436 to your computer and use it in GitHub Desktop.
Tarea #7
15@jose@saramago@@isabel@allende@jrr@tolkien@@@@william@shakesp
//
// 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