Foros del Web » Programación para mayores de 30 ;) » Programación General »

Leer / escribir ficheros

Estas en el tema de Leer / escribir ficheros en el foro de Programación General en Foros del Web. A ver. Con qué funciones puedo leer y escribir en ficheros? Lo que necesito es encontrar una palabra clave dentro de un fichero y poder ...
  #1 (permalink)  
Antiguo 10/06/2005, 03:30
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 19 años, 4 meses
Puntos: 0
Leer / escribir ficheros

A ver. Con qué funciones puedo leer y escribir en ficheros? Lo que necesito es encontrar una palabra clave dentro de un fichero y poder cambiar una pequeña cosa.
Gracias
  #2 (permalink)  
Antiguo 10/06/2005, 04:48
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 21 años, 8 meses
Puntos: 1
qué lenguaje de programación utilizas?

en vb podría ser algo así

Código:
intFichero = FreeFile()
intFichero2 = FreeFile()
Open fichero For input As #intFichero
Open fichero2 for output as #intFichero2
Line Input #intFichero, strLinea
While Not EOF(intFichero)
    'NuevaLinea=strLinea sin la palabra que quiero sustituir
    Write intFichero2, NuevaLinea
    Line Input #intFichero, strLinea
Wend
  #3 (permalink)  
Antiguo 10/06/2005, 08:12
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Hasta que no diga el lenguaje dejemos de postear códigos.
  #4 (permalink)  
Antiguo 10/06/2005, 09:22
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Jejeje se nota que no leen las reglas para preguntar, por eso tardan sus respuestas, porque vienen y como? y ya, no sabes ni de que te habla pero luego se enojan de que no les ayuda uno..

Saludos
  #5 (permalink)  
Antiguo 10/06/2005, 14:32
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Instru
Jejeje se nota que no leen las reglas para preguntar, por eso tardan sus respuestas, porque vienen y como? y ya, no sabes ni de que te habla pero luego se enojan de que no les ayuda uno..

Saludos
Totalmente cierto... Encima los "malos" de la película, los que contestamos :)
  #6 (permalink)  
Antiguo 10/06/2005, 14:56
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Beuno, cuando nos pongan en que lenguaje lo quiere, pues ya vendremos a ayudar, solo que pues dinos con que lo haces?
  #7 (permalink)  
Antiguo 14/06/2005, 19:17
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
... pués... en C???

Sé como se abre y escribe en archivos... pero tengo duda en cómo encontrar una palabra dentro del contenido del archivo, solo se me ocurre comparar carácter por carácter (con fgetc y palabra[X]) ... creo no tendría problemas para trabajar con ello pero... ¿no hay mejor manera?? alguna función que identifique la palabra directamente???...

Tengo en mente una especie de buscador... así que no quiero hacer cambios (como se planteó originalmente), solo iluminar dicha palabra al mostrar el contenido... ocuparia las funciones textcolor() y cprintf() para eso último...

Saludos y gracias de antemano

Edito: Mi compilador es Turbo C++ v3.0 y trabajo con Win$XP...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 14/06/2005, 20:09
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
pues podrias usar fscanf y strcmp simlutaneamente fscanf lee palabras y strcmp las compara con algo.

Saludos
  #9 (permalink)  
Antiguo 16/06/2005, 04:06
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
... pués lo intenté pero parace que no entendí el correcto uso de fscanf()... en los ejemplos que llegué a encontrar de dicha función (sigo investigando) el formato del archivo a leer es ya conocido...

.... sigo leyendo... pero si me aclarasen un poco las cosas os agradecería ...

Gracias por encaminarme...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #10 (permalink)  
Antiguo 16/06/2005, 06:30
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
fscanf es lo mismo que scanf salvo que "scanf" el parámetro donde indicas el fichero es stdin, se tiene por comodidad para no estar escribiendo siempre lo mismo.

Y para leer archivos, depende de qué tipo sean. Si lo que lees es un archivo de texto buscando palabras, pues simplemente: cargas el fichero en un buffer, haces un bucle que recorra todo el buffer caracter a caracter y llamas a strcmp pasando el puntero cada vez.

Código:
char * Buscar(char * string, char * substring)
{
	for(;;string++)
	{
		if(string=='\0') return NULL;
		if(strcmp(string,substring)==0) return string;
	}
}
Ese bucle te dejaría con un puntero a la primera ocurrencia de la palabra en el buffer o con un NULL si no la hubiese encontrado.

Pero eso ya está implementado perfectamente en la librería estándar en la función "strstr" mucho mejor y en ASM...
  #11 (permalink)  
Antiguo 17/06/2005, 02:49
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
... pués ahora veo que entonces ni siquiera sé el correcto manejo de scanf ... porque de verdad no le hayo... Con scanf uno sabe (limita se puede decir) lo que el usuario ha de ingresar por teclado... y es eso, ya tengo mi formato preestablecido... pero no sé cómo, con fscanf ir recojiendo las palabras... porque sí, son archivos de texto y solo quiero encontrar una palabra y buscarla... para colorearla...

Ahora se me ha ocurrido hacer algo así:
Código:
//obviamente abro el archivo con fopen()

      while(!feof(file)) {
	    c= fgetc(file);
	    i=0;
	    if(c==busc[i] && c!='\n') { // busc es mi palabra que busco
// si el primer carácter coincide con el carácter leido del archivo...
		  coin[i]=c; // lo "almaceno" en otro arreglo de nombre coin
 // y en ese mismo arreglo guardo los carácteres contiguos hasta que tenga la misma extención que mi palabra buscada
		  for(i=1; i<strlen(busc); i++) coin[i]=fgetc(file);
		  coin[i]='\0';
		  if((strcmp(coin, busc))==0) cprintf("%s", busc); // comparo y si son iguales imprimo con color
		  else printf("%s", coin); // si son diferentes imprimo lo almacenado
	    } else printf("%c", c); // si no hubo coincidencia inicial simplemente recorriendo el archivo
      }
pero se me hace algo engorroso... y así no compara palabras como tal, por ejemplo si busco "en" igual me lo identificaria en d"en"tro, di"en"te ... etc... No creo haya problemas en hacer otro par de validaciones para que solo haga la comparación inicial (la del carácter tomado con el primero de la palabra) después de un espacio ó salto de línea... ... ó hacer un ciclo para guardar palabras... ... creo eso sería más efectivo y apenas se me ocurrió... ¿es así como lo planteaste MaxExtreme??.. porque igual no entendí... mencionas que hay que recorrer carácter por carácter... pero en tu función manejas cadenas como tal ¿no?... palabras... pero entonces ¿cómo obtienes las palabras?.. que es mi pregunta en realidad...

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #12 (permalink)  
Antiguo 19/06/2005, 16:31
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Mira, si ya sabes usar scanf fscanf es exactamente lo mismo solo que con un argumento mas.
Este argumento que hasta donde yo recuerdo es el primero y es el puntero al archivo del que se va a leer.

Por lo demas es facil, un ejemplo:

char palabra[32];
FILE *archivo;
fopen.....
.
.
for(;;)
{
fscanf(archivo, "%s", palabra);
if(strcmp(palabra, "palabra_a_buscar")==0)
break;
}

Algo asi.

Espero y te sirva.

Saludos
  #13 (permalink)  
Antiguo 22/06/2005, 00:36
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Gracias.. me sirvió... ... pero en serio lo había probado así... sabrá Dios qué pasó (como estaría?? ) ...

Pués... perfecto, como un scanf. Seguiré probando... Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 10:56.