Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Modificar lista en archivo de texto

Estas en el tema de Modificar lista en archivo de texto en el foro de C/C++ en Foros del Web. Hola! Tengo un problema, he hecho un programa para que lea de un archivo de texto, el archivo de texto tendra dentro lineas que seran ...
  #1 (permalink)  
Antiguo 03/12/2012, 05:55
 
Fecha de Ingreso: diciembre-2012
Mensajes: 1
Antigüedad: 11 años, 5 meses
Puntos: 0
Modificar lista en archivo de texto

Hola! Tengo un problema, he hecho un programa para que lea de un archivo de texto, el archivo de texto tendra dentro lineas que seran usuario, salto de linea, y luego contraseña, y asi todo el rato.

El problema viene que ahora quiero que sea posible modificar la contraseña de un usuario en concreto, es decir que busque al usuario en la lista, y si esta en la posicion 3 pues que la siguiente linea que corresponderia con su contraseña se borraria y meteria yo lo que quisiera , me han dicho de usar tellg y seekp, pero

Código:
do{
       fstream archivo;
       archivo.open ("registro.txt", ios::out | ios::app);

	system("CLS");
	cout << "Bienvenido al menu del administrador" << endl;
	cout << "Que desea hacer?" << endl;
	cout << "1. Ver registros" << endl;
	cout << "2. Modificar contraseña" << endl;
	cout << "0. Salir" << endl;

        cin >> opcion;

	switch (opcion)
	{
	case '2':
	cout << "Por favor, introduce el apodo al que quieres cambiar la contraseña:"; 
	getline(cin,apodo);

	getline (archivo, usuario); // variables de fstream declaradas anteriormente
        getline (archivo, contrase?a);

	while ( !archivo.fail() )
	{

	   if(apodo == usuario)
		{
		encontrado = true;
		// aqui habria que poner algo para que recordara la posicion?
		}
		getline(archivo, usuario);
		getline(archivo, contrase?a);
		}//busqueda en la lista del apodo para comprobar que exista
					
		if (!encontrado)
	       {
			cout << "no existe ese apodo" << endl;
		}
		else
			{
			cout << "introduce nueva contraseña " << endl;
			getline( cin, nuevacontraseña);
						
// como se hara aqui para escribir la nueva contraseña? es donde tengo el problema
			}
			break;
		}			
		}while(!salir);
          archivo.close();
La parte de comprobar si existe archivo etc etc las he quitado para poner el codigo que me interesa
  #2 (permalink)  
Antiguo 03/12/2012, 11:47
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Modificar lista en archivo de texto

No puedes hacerlo de forma directa: la escritura solo añade datos cuando estas al final del fichero, en cualquier otra posicion sobreescribe; esto significa que si tienes este archivo:

Código:
carloscgc
1234
vosk
9876
y quieres cambiar la contraseña de carloscgc por 'qwert' sucedera que el ultimo caracter 't' sobreescribirá el salto de linea, pero esto no puedes solucionarlo añadiendo otro salto de linea porque ese nuevo sobreescribirá el primer caracter del segundo usuario ok?

Puedes duplicar la parte no afectada (es decir todo lo que hay entre el siguiente usuario hasta el final del archivo), añadir la nueva contraseña, el siguiente salto de linea y volver a añadir la parte duplicada.

O tambien puedes dejar un espacio estandar para las entradas, de forma que los caracteres no usados los dejas en nulo. Es decir, escribes 'qwerty' y hasta x bytes (los que definas como maxima longitud de contraseña) añades nulos, y al final el salto de linea. Para leer tienes que leer bloques de x bytes y no tendras problemas para mostrarlos porque la salida de texto finaliza con el caracter nulo. Y para cambiar la contraseña tampoco porque este metodo evita que sobreescribas la entrada siguiente. Ten en cuenta que en las bases de datos mas populares tienes que especificar el tamaño de los campos textuales, de forma que todo lo que entras se trunca al tamaño maximo del campo.

Saludos
vosk

Etiquetas: int, lista, modificar, programa, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:38.