Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/08/2011, 01:32
Avatar de gvite666
gvite666
 
Fecha de Ingreso: abril-2010
Mensajes: 65
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Modificar archivo binario

Pues mira, como yo lo haria de dos opciones:
una es poniendole un indicador a cada palabra...como es esto, bueno, mira si en tu archivo escribes asi:
pedro*juan*gera
Entonces puedes utilizar esta sentencia
Archivo.getline(palabra,128,'*');
cuales los parametros son
palabra: es el puntero a una cadena de tipo char
128: es el numero de bytes que quieres leer incluyendo caracter nullo (\0)
'*': es el delimitador de lectura, asea que va a leer hasta que encuentre este caracter

asi si kieres el segundo nombre pues pones solo pones un while hasta que lea esa palabra:
Código C++:
Ver original
  1. cout<<"Dame la posicion: ";
  2. cin>>ipos;
  3. while(ipos)
  4. {
  5.     fe.getline(cadena, 128,'*');
  6.     ipos--;
  7. }

Con esto solo debes resolver el problema de la longitud de cadenas, ejemplo si lees la cadena "juan" y la modificas por la de enrique

entonces tu archivo va a sermodificado de esta manera
pedro*enriquera

borrando parte de la tercer cadena, yo lo arreglaria poniendo una longitud predeterminada a las cadenas, por ejemplo que sean de 10, entonces tu archivo queda asi
pedro *juan *gera *
rellenando la longitud restante con espacios, ya solo al leer borras esos espacios y listo...

y la segunda es: Ya sabiendo esto de las cadenas con misma longitud, pues ya sabes sus posiciones de cada palabra, ejemplo:
la primer palabra esta desde la posicion 0 hasta la 10, la segunda desde la 11 a la 20 y la tercera desde la 21 hasta la 30, debes tener en cuenta el asterisco tambien, asi que por eso se ve disparejo, pero te lo explico mas sencillo

si quieres la primer palabra tienes que empezar de cero, para la segunda desde 11, para la tercera 21 y aki ya aumenta de diez en diez

asi si te pide cualquier posicion lo puedes hacer asi:
Código C++:
Ver original
  1. if(iPosDada==1)
  2.       iPosPalabra=0;
  3. else
  4.       iPosPalabra= (--iPosDada*10)+1;
  5. Archivo.seekg(ipos,ios::beg);
  6. Archivo.getline(cadena, 11,'*');

Espero te sirva
Saludos
P.D. Esto es como yo lo haria, si hay otra idea mas eficiente, estaria encantado de probarla, pues asi es como se aprende.
__________________
No pienses si no vas a actuar.