Foros ZackYFileS

Foros ZackYFileS (http://foros.zackyfiles.com/index.php)
-   PROGRAMACIÓN Lenguajes: Visual Basic, C++, etc (http://foros.zackyfiles.com/forumdisplay.php?f=370)
-   -   Sustituir cadena de caracteres en c++ (http://foros.zackyfiles.com/showthread.php?t=576039)

zairilla 01/06/2008 23:44

Sustituir cadena de caracteres en c++
 
Hola,
Estoy haciendo una práctica que me han mandado para la facultad y necesito sustituir una palabra que busco en un fichero por otra que pido por pantalla, pero lo que me pasa es que a la hora de modificarlo, si la palabra que está en el fichero tiene cuatro letras por ejemplo, y la que quiero introducir tiene 6, me sobreescribe en la siguiente línea también.Os pongo un ejemplo:
En mi fichero tengo:
R2D2
Satelite
hola

y quiero sustituir R2D2 por camiones, pues me quedaría de la siguiente forma:

camionestelite
hola

Me ha sustitudo la palabra que quería, pero además, parte de la siguiente...
Como tengo que leer y escribir, el fichero lo abro en modo lectura y escritura(r+), y para retroceder en el fichero una vez encontrada la palabra que quiero leer uso la función fseek(puntero,distancia,SEEK_CUR).
Espero que me haya explicado bien, y que me podáis solucionar esto, porque llevo 3 días dándole vueltas y no consigo hacerlo bien...
Muchas gracias de antemano.

SetFlag 02/06/2008 10:04

fseek lo único que hace es posicionarte en el archivo, salta x posiciones relativas a un punto especificado. Es lógico que si la palabra que quieres escribir es más grande te sobrescriba la siguiente.

Una posible solución es que trabajes sobre memoria intermedia y que escribas las modificaciones después de introducir por teclado la palabra a sustituir.

zairilla 02/06/2008 15:23

Muchas gracias!
Pero el problema es que me piden que lo haga directamente en el fichero, que busque en él, y que lo sustituya en él mismo de nuevo...
Alguna otra sugerencia??
Gracias.

SetFlag 02/06/2008 16:35

No conozco ninguna función que haga algo así, y en caso de haberla puedes dar por hecho que internamente trabajaría con un buffer intermedio.

Así que a no ser que a alguien se le ocurra algo mejor:

-Comprueba si la cadena a reemplazar tiene el mismo tamaño que la nueva
-Si tiene el mismo tamaño reemplaza
-Si la nueva cadena es mayor tendrás que desplazar a la derecha los caracteres que tenga de más el resto del archivo, y después escribir la nueva cadena.
-Si es menor tendrás que escribir la nueva cadena y desplazar a la izquierda los caracteres que tenga de menos el resto del archivo y acortar el archivo (para ello tendrás que situar EOF el numero de caracteres de diferencia más a la izquierda).

zairilla 03/06/2008 11:15

Lo comprobaré, a ver si me lo solucionas...
Muchas gracias!
Un saludo.


La franja horaria es GMT +2. Ahora son las 04:55.

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate