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. |
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. |
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. |
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). |
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