[C con Clase] añadir registros en archivos acceso directo

Joan Valls joan.vallsv en gmail.com
Sab Mar 24 13:58:18 CET 2007


Hola, tengo un problema la funcion void insertarr_directo(venedors v)
deberia insertar un registro en una posicion concreta sacada de un hash,
alguien podria ayudarme y decirme como podria insertar registros.
El programa va de la siguiente forma: insertas los datos del cliente, al
insertar el dni la funcion void l_dni(char &l,int &dni), calcula su letra  y
la guarda en el campo dni de la estructura, despues se guarda en el fichero
de la siguiente forma

De la posicion 0 a la 9 del fichero: aqui van los dni con letra A.
De la posicion 10 a la 19 del fichero: aqui van los dni con letra B.
De la posicion 20 a la 29 del fichero: aqui van los dni con letra C.
y asi hasta el final.

Pongo el codigo por si acaso....

typedef struct
{
    int dni;
    char letra_dni;
    char nombre[50];
    float vendas_acumuladas;
    int activo;
}vendedor;



void insertar_directo(vendedor v)
{
    int pos=0;
    bool insertado=false;
    int pos_arxiu=0;
    vendedor v2;
    FILE *f;
    f=fopen("vendocasa.txt","r+");
    pos=hash_letra(v.lletra_dni);
    pos_archivo=pos+10;
    fseek(f,pos*sizeof(v),SEEK_SET);
    fread(&v2,sizeof(v2),1,f);
    while(pos!=pos_archivo && insertado==false)
    {
        if(v2.activo==0)
        {   pos=pos-1;
            fseek(f,pos*sizeof(v),0);
            fwrite(&v,sizeof(v),1,f);
            insertado=true;
        }
        fread(&v2,sizeof(v2),1,f);
        pos=pos+1;
    }
    fclose(f);
}



int hash_letra(char l)
{
    char letras[] = "ABCDEFGHJKLMNPQRSTVWXYZ";
    int pos=0;
    int i;
    for(i=0;i<23;i++)
    {
        if(l==letras[i])
        {
            pos=i*10;
        }
    }
    return(pos);
}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070324/25a9ff87/attachment.html>


Más información sobre la lista de distribución Cconclase