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

Lectura de TXT en C o C++

Estas en el tema de Lectura de TXT en C o C++ en el foro de C/C++ en Foros del Web. Hola, estoy creandome un programa, y bueno me encuentro con el problema que necesito una "base de datos" para ingresar texto, use un txt como ...
  #1 (permalink)  
Antiguo 12/05/2009, 18:57
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 1
Lectura de TXT en C o C++

Hola, estoy creandome un programa, y bueno me encuentro con el problema que necesito una "base de datos" para ingresar texto, use un txt como base de datos ahi guardo lo que necesito y estan separados por saltos de linea, lo que yo quiero es poder leer una de todas las lineas que estan en el txt ¿Como lo hago? uso fscanf

para los que no me entendieron digamos que en el text tengo:

hola
como
estas

desde el programa quiero que se muestre solo la palabra de la segunda linea osea "como", entonces como podria seleccionar la segunda linea??
  #2 (permalink)  
Antiguo 13/05/2009, 09:20
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: Lectura de TXT en C o C++

Recuerdo que tuve el mismo problema, te digo como lo solucione:

x=1; //linea que quieres leer (0 = hola)
c=0;//contador de lineas
while(c!=x)
{
caracter = fgetc(pf);
if(caracter=='\n')
c++;
}

En este momento ya estaras ubicado en la linea que deseas leer, yo lo hice con comas "," al final de cada palabra/frase, no creo que tengas problema con los \n.
  #3 (permalink)  
Antiguo 13/05/2009, 17:59
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Lectura de TXT en C o C++

Cita:
Iniciado por Annoying Ver Mensaje
Recuerdo que tuve el mismo problema, te digo como lo solucione:

x=1; //linea que quieres leer (0 = hola)
c=0;//contador de lineas
while(c!=x)
{
caracter = fgetc(pf);
if(caracter=='\n')
c++;
}

En este momento ya estaras ubicado en la linea que deseas leer, yo lo hice con comas "," al final de cada palabra/frase, no creo que tengas problema con los \n.
ya lo probe, pero me queda una duda no muestro la linea, como se supone que deberia mostrarla? con

printf (caracter);

??

Última edición por linkgl; 13/05/2009 a las 19:08
  #4 (permalink)  
Antiguo 13/05/2009, 19:13
 
Fecha de Ingreso: febrero-2009
Mensajes: 5
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Lectura de TXT en C o C++

la base de datos, digamos el archivo, es una estructura o una clase.. no entiendo mucho que queres hacer pero supongamos que te entendi.. podrias usar un fread(<parametros>), ir leyendo registro por registro y mostrando. hasta que fread retorne null indicando que el archivo termino,
  #5 (permalink)  
Antiguo 13/05/2009, 20:25
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Lectura de TXT en C o C++

Cita:
Iniciado por lafuente_pablo Ver Mensaje
la base de datos, digamos el archivo, es una estructura o una clase.. no entiendo mucho que queres hacer pero supongamos que te entendi.. podrias usar un fread(<parametros>), ir leyendo registro por registro y mostrando. hasta que fread retorne null indicando que el archivo termino,
lo mismo que pone nuestro compañero Annoying, leer la segunda linea de un archivo *.TXT el problema esque su codigo me funciona, me lee la linea numero 2 pero no puedo hacer que me muestre el contenido de la linea 2 en pantalla
  #6 (permalink)  
Antiguo 14/05/2009, 09:00
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: Lectura de TXT en C o C++

Cita:
Iniciado por lafuente_pablo Ver Mensaje
la base de datos, digamos el archivo, es una estructura o una clase.. no entiendo mucho que queres hacer pero supongamos que te entendi.. podrias usar un fread(<parametros>), ir leyendo registro por registro y mostrando. hasta que fread retorne null indicando que el archivo termino,
es un TXT, no un .dat (es decir, no es binario) por lo cual, no se mueve por registros, sino por caracteres.

Código:
if(opcion>0) //si opcion es igual a 0 significa que la palabra esta en la
	{			//primera linea del fichero
		do
		{
			caracter=fgetc(pf);
			if(caracter=='\n')  //esto es para ubicarme en una determinada linea
			{					//del fichero, dada por la opcion
				z=z+1;
			}
		}while(z!=opcion);
	}
	
	caracter=fgetc(pf);
	while(caracter!=',')
	{							//relleno la palabra con la linea del fichero
		palabra[i]=caracter;	//antes ubicada, hasta que consiga una "coma" (',')
		i=i+1;
		caracter=fgetc(pf);
	}
Eso lo hice comparando con una coma, ya que al rellenar el fichero lo hice poniendole una ',' para ayudarme a solucionar esto, pero sin problema podrias compararlo con el '\n'
  #7 (permalink)  
Antiguo 14/05/2009, 09:16
 
Fecha de Ingreso: abril-2008
Mensajes: 141
Antigüedad: 16 años
Puntos: 0
Respuesta: Lectura de TXT en C o C++

Ahora no recuerdo cual era el comando en C, pero es mucho mas facil si lees palabra por palabra o linea por linea...
  #8 (permalink)  
Antiguo 14/05/2009, 11:22
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Lectura de TXT en C o C++

Cita:
Iniciado por Annoying Ver Mensaje
es un TXT, no un .dat (es decir, no es binario) por lo cual, no se mueve por registros, sino por caracteres.

Código:
if(opcion>0) //si opcion es igual a 0 significa que la palabra esta en la
	{			//primera linea del fichero
		do
		{
			caracter=fgetc(pf);
			if(caracter=='\n')  //esto es para ubicarme en una determinada linea
			{					//del fichero, dada por la opcion
				z=z+1;
			}
		}while(z!=opcion);
	}
	
	caracter=fgetc(pf);
	while(caracter!=',')
	{							//relleno la palabra con la linea del fichero
		palabra[i]=caracter;	//antes ubicada, hasta que consiga una "coma" (',')
		i=i+1;
		caracter=fgetc(pf);
	}
Eso lo hice comparando con una coma, ya que al rellenar el fichero lo hice poniendole una ',' para ayudarme a solucionar esto, pero sin problema podrias compararlo con el '\n'
xD creo que no estoy entendiendo, soy nuevo leyendo .TXT desde C, cree un archivo aparte solamente para pegar tu codigo eh intentar mostrar en pantalla la segunda linea de mi TXT entonces puse:

Código:
#include <iostream>
#include <windows.h>
#include <stdio.h>

using namespace std;

int main()
{
    
FILE *pf = fopen("productos.txt","r");
int opcion,z,caracter,i;
char palabra[100];

if(opcion>0) //si opcion es igual a 0 significa que la palabra esta en la
	{			//primera linea del fichero
		do
		{
			caracter=fgetc(pf);
			if(caracter=='\n')  //esto es para ubicarme en una determinada linea
			{					//del fichero, dada por la opcion
				z=z+1;
				
			}
		}while(z!=opcion);
	}
	
	caracter=fgetc(pf);
	while(caracter!=',')
	{							//relleno la palabra con la linea del fichero
		palabra[i]=caracter;	//antes ubicada, hasta que consiga una "coma" (',')
		i=i+1;
		caracter=fgetc(pf);
		
	}
printf(caracter);
}

Pero no me muestra nada en pantalla, intente ponerle comas en vez de \n para probar lo que me dices, pero nada bro, incluso si intento imprimir la linea en la que estoy ubicado si me sale 1 osea que me lo lee bien, pero no me muestra el contenido de esa linea, algun otro ejemplo un pelin mas completo?? gracias men te lo agradezco mucho xD

incluso intente añadiendo:

fscanf (fp, "%[a-z]\n", producto);

lo puse cuando te ubica en la linea 1, para intentar almacenar en un char, el contennido de la linea pero nada
  #9 (permalink)  
Antiguo 14/05/2009, 12:36
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: Lectura de TXT en C o C++

"Opcion" tiene que indicar la linea que deseas leer, no contener la basura que puede haber ahi :P, y tienes que imprimir "palabra" no "caracter"
printf("%s",palabra);

Creeme que funciona, ya que eso lo use en un proyecto sobre el tipico Ahorcado leyendo de un TXT las palabras, y para ubicarme en la linea de la palabra (aleatoria) usaba ese codigo, que realmente lo invente, no se si habra otro metodo.

PD. Al usar contadores, hay que inicializar las variables.
PD2. "caracter" es un char, no un int.
  #10 (permalink)  
Antiguo 14/05/2009, 12:50
 
Fecha de Ingreso: abril-2008
Mensajes: 141
Antigüedad: 16 años
Puntos: 0
Respuesta: Lectura de TXT en C o C++

Te estas liando amigo. Ya mire como se hace para leer una linea entera (incluido \n)...

char palabra[100];
FILE* f;

...

fgets (palabra, 100, f);
fgets (palabra, 100, f); //aqui tienes tu segunda palabra...
  #11 (permalink)  
Antiguo 14/05/2009, 20:00
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Lectura de TXT en C o C++

Cita:
Iniciado por Annoying Ver Mensaje
"Opcion" tiene que indicar la linea que deseas leer, no contener la basura que puede haber ahi :P, y tienes que imprimir "palabra" no "caracter"
printf("%s",palabra);

Creeme que funciona, ya que eso lo use en un proyecto sobre el tipico Ahorcado leyendo de un TXT las palabras, y para ubicarme en la linea de la palabra (aleatoria) usaba ese codigo, que realmente lo invente, no se si habra otro metodo.

PD. Al usar contadores, hay que inicializar las variables.
PD2. "caracter" es un char, no un int.
si, intente ponerlo char, pero me da error al intentar compilar =S

Cita:
Te estas liando amigo. Ya mire como se hace para leer una linea entera (incluido \n)...

char palabra[100];
FILE* f;

...

fgets (palabra, 100, f);
fgets (palabra, 100, f); //aqui tienes tu segunda palabra...

FUNCIONO... xD no puedo creerlo... jamas se me habría ocurrido... gracias por tu ayuda.

Annoying aun estoy interesado en tu codigo, xDD no dormire si no lo hago funcionar, intentare varias cosas con tu code aver que ondaz..., y gracias a ambos ya me sirvio xD


PD. tambien hize ese tipico juego de ahorcado, pero no necesite de txt, almacene en arrays varias palabras xDD
  #12 (permalink)  
Antiguo 15/05/2009, 09:59
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: Lectura de TXT en C o C++

Cita:
Iniciado por linkgl Ver Mensaje
si, intente ponerlo char, pero me da error al intentar compilar =S
Si te da error en esa linea del caracter=fgetc(pf) pues lo unico que puedo pensar es que estas declarando caracter como un array.

Y respecto al fgets, pues si funciona pero no se hasta que punto, ya que tengo entendido si mal no recuerdo, que al crear ficheros (partiendo de C), se debe, o al menos se deberia usar la pareja de lectura/escritura, me refiero a:

fgetc -> fputc
fgets -> fputs
fscanf -> fprintf
fread -> fwrite (binarios)

Asi que alomejor al usar fgets cuando creastes el fichero con fputc puede que de algun fallo (o no), y no lo se realmente ya que nunca lo probe.
  #13 (permalink)  
Antiguo 15/05/2009, 14:07
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Lectura de TXT en C o C++

Cita:
Iniciado por Annoying Ver Mensaje
Si te da error en esa linea del caracter=fgetc(pf) pues lo unico que puedo pensar es que estas declarando caracter como un array.

Y respecto al fgets, pues si funciona pero no se hasta que punto, ya que tengo entendido si mal no recuerdo, que al crear ficheros (partiendo de C), se debe, o al menos se deberia usar la pareja de lectura/escritura, me refiero a:

fgetc -> fputc
fgets -> fputs
fscanf -> fprintf
fread -> fwrite (binarios)

Asi que alomejor al usar fgets cuando creastes el fichero con fputc puede que de algun fallo (o no), y no lo se realmente ya que nunca lo probe.
si, yo tambien sabia que el fgetc era para obtener y escribir, por eso jamas se me habria ocurrido, pero lo dudo porque el fichero no lo cree con fputc ni con fwrite lo cree manualmente...

sobre lo de caracter... lo decare asi:

char caracter[80];
  #14 (permalink)  
Antiguo 16/05/2009, 09:35
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 4 meses
Puntos: 12
Respuesta: Lectura de TXT en C o C++

Cita:
Iniciado por linkgl Ver Mensaje
sobre lo de caracter... lo decare asi:

char caracter[80];
Por eso te daba error, no puedes igualar un array de caracteres a un caracter, sin tan siquiera señalar en que posicion poner el caracter en el array.
Tiene que estar declarado:
char caracter;

o usar:
caracter[0]=fgetc(pf);
  #15 (permalink)  
Antiguo 16/05/2009, 12:34
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Lectura de TXT en C o C++

Cita:
Iniciado por Annoying Ver Mensaje
Por eso te daba error, no puedes igualar un array de caracteres a un caracter, sin tan siquiera señalar en que posicion poner el caracter en el array.
Tiene que estar declarado:
char caracter;

o usar:
caracter[0]=fgetc(pf);
PUF eso hera lo que me daba error, ya funcionan ambos codigos, gracias por su ayuda, xD soy nuevo leyendo txt
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 06:40.