sábado, 13 de julio de 2013

El dolor de cabeza para leer archivos de texto desde un programa C

Aquí, un trozo de código que lee registros desde un archivo de texto y lo guarda en un estructura de tipo Cliente (definida con anterioridad) a través de un apuntador

cliente *ptrCLIENTE= NULL;
char buffer[80];
FILE *ptrCliente2;

// Hay que abrir el archivo de clientes
    ptrCliente2=fopen("clientes.txt","r");

// Si se puede abrir el archivo de clientes...
    if(ptrCliente2!=NULL)
        {
            //Ubicarse al principio del archivo
            rewind(ptrCliente2);
            // Reservamos memoria para el registro que se va leer del archivo
            ptrCLIENTE=(struct Cliente *) malloc(sizeof(struct Cliente));

                while ((fscanf(ptrCliente2, "%s",buffer)) != EOF)
                {

                    // Dividir el buffer en tokkens y alamacenarlos en la estructura
                    //IMPORTANTE: la función atoi() convierte cadena a entero. Definida en stdlib
                    ptrCLIENTE->Cedula=atoi(strtok(buffer,";"));
                    strcpy(ptrCLIENTE->razon,strtok(NULL,";"));
                    strcpy(ptrCLIENTE->telefono,strtok(NULL,";"));
                    ptrCLIENTE->saldo_voz=atoi(strtok(NULL,";"));
                    ptrCLIENTE->saldo_sms=atoi(strtok(NULL,";"));
                    ptrCLIENTE->saldo_datos=atoi(strtok(NULL,";"));