Hola saludos a todos, les comento, hize un programa en c++ el cual lee de un archivo el nombre apellido y matricula de varios alumnos, algo mas omenos asi...
JOSE|HERNANDEZ|203303035
CRISTINA|DIAZ|206303660
SERGIO|GONZALEZ|206201478
En el programa para leer cada campo hice lo siguiente...
for(i=0; i<k; i++)
{
fscanf(archivo,"%[^|]|%[^|]|%[^\n]\n",&nombre,&apellido,&matricula);
}
En un while anterior ya obtuve la cantidad de lineas que tiene el archivo y lo asigne a k para que leyera cada linea, mi duda es la siguiente. Como puedo leer otro campo para que este contenga la posicion inicial de cada registro, por ejemplo en la primera lectura obtendria un 0 ya que JOSE empieza en 0 y en el segundo campo obtendria un 25 que es donde empieza CRISTINA y asi consecutivamente.
La segunda pregunta es como puedo leer el apellido pero que solo quede en un registro de 6 posiciones, por ejemplo:HERNANDEZ se guardaria como HERNAN o DIAZ se guardaria como DIAZ**(* = espacios en blanco), intente hacer esto con substr pero me marca error.
Los campos los declare de la siguiente manera...
char nombre[17][15];
char apellido[17][17];
char matricula[17][10];
Mi programa lo que hace es ordenar los registros en forma ascendente por "la matricula -+- pocision de inicio de ese registro" y escribirlo en un archivo nuevo.
Luego volverlo a ordenar pero ahora por el apellido junto con su matricula y escribirlo en un archivo nuevo. Todo eso ya lo hize, lo que me falta es como obtener la posicion de inicio de cada registro y si se puede meter los apellidos en campos de 6 posiciones.
Espero puedan hecharme un cable...
PD. Mi codigo puede ser penoso pero funciona a tirones
, lo digo por si a alguno le arden los ojos al leerlo XD.