Hola Javier!
Pq no haces uso de un archivo binario en vez que uno de texto..?
Lo que deseas lo puedes hacer facilmente con uno binario, ya que podrías acceder a cada uno de los campos que nombraste anteriormente independientemente.
Con uno de texto, como te toma cada registro como una linea es dificil (no se si imposible) acceder a cada campo.
Te muestro como seria con un archivo binario:
1. Creas una estructura, que sera la que escribieras en el archivo:
Código:
typedef struct
{
char nombre[50];
date fecha;
float costo;
} REG;
2. Al leer de la estuctura debes:
Código:
FILE *ap_b=NULL;
ap_b=fopen("tuarchivo.dat","rb");
if (ap_b!=NULL)
{
REG tmp;
int posicion, num_reg, cont;
////ubicar el puntero al final del archivo,
fseek(ap_b,0,SEEK_END);
//// regresa la posicion en bytes del arhcivo, ya que nos posicionamos al final
posicion=ftell(ap_b);
//// calcular el numero de registros que hay en el archivo
num_reg=posicion/(sizeof(REG));
//// recorrer el archivo
for (cont=0;cont<=num_reg;cont++)
{
/////// ubicarnos en el archivo
fseek(ap_b,cont*sizeof(REG),SEEK_SET);
/////// leer un registro
fread(&tmp,sizeof(REG),1,ap_b);
//////puedes manipular la estructura, por ejemplo, sumar todos los costos o tambien imprmir la informacoin que deseas
acum += tmp.costo;
} // fin del for
} //fin del if
Bueno, a groso modo es asi como podrias maniular cada campo, claro tendrias tambien que hacer el de escribir en el archivo y eso.
Te recomiendo que uses entonces un archivo binario, claro espero que usar archivo de texto no sea un requermimiento obligatorio