Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Leer Archivo txt (https://www.clubdelphi.com/foros/showthread.php?t=39096)

Yssik 10-01-2007 18:19:04

Leer Archivo txt
 
hola a todos, soy nueva en el foro y usando el programa c++builder6.:confused: nunca antes habia trabajado con archivos y ahora no sólo necesito abrir un archivo .txt, sino buscar cierta información dentro del mismo y leerla.
necesito saber como puedo abrir un archivo .txt y leer la información.
Gracias por adelantadas a quien me pueda ayudar..
:)

Bicho 10-01-2007 18:29:10

Hola Yssik (bonita manera de resumar Jessica o Jesica o Yesica o como sea, dios que nombre más difícil) :p

Bienvenida al club antetodo.
Procura leer la Gúia de estilo, usar el buscador de los foros y algún que otro buscador, (todos estos links los encontrarás en mi firma).

Bueno a lo que vamos.
Para leer un fichero de texto, puedes coger un objeto TMemo y hacer lo siguiente para cargarlo en él:

Código Delphi [-]
  Memo1->Lines->LoadFromFile('c:\fichero.txt');

Y para guardar el contenido de un memo en un fichero de texto:

Código Delphi [-]
  Memo1->Lines->SaveToFile('c:\fichero.txt');

Para buscar texto en él, ya puedes usar las funciones propias de la VCL para manejo de texto en strings, como por ejemplo Pos, Copy, etc... busca en la ayuda de C++ Builder sobre estas funciones,ya que son muy fáciles de usar.

Espero te sirva.

Saludos

Ñuño Martínez 10-01-2007 20:16:57

Cita:

Empezado por Yssik
hola a todos, soy nueva en el foro y usando el programa c++builder6.:confused: nunca antes habia trabajado con archivos y ahora no sólo necesito abrir un archivo .txt, sino buscar cierta información dentro del mismo y leerla.
necesito saber como puedo abrir un archivo .txt y leer la información.
Gracias por adelantadas a quien me pueda ayudar..
:)

Por "buscar cierta información" te refieres a procesar el archivo, ¿no es así? Si eso, puedes leer todo el archivo en un objeto std::string, utilizando un objeto std::istream, y buscar después dentro de él. No manejo C++ desde hace tiempo, pero creo que dentro de esta clase hay un método para buscar sub-cadenas. Si no, siempre puedes utilizar la clásica función stdstr del C (o la strchr si necesitas buscar sólo un carácter).

[P.S.]He buscado buscando enlaces con la descripción de las clases std::string y std::istream pero no los encuentro por ninguna parte.:(

Siento no ser más preciso con un ejemplo, pero no sabría hacerlo en C++ de memorieta y hacerlo en C implica el uso de punteros...

Ñuño Martínez 10-01-2007 20:36:20

Ahí va un ejemplo
 
¡Qué demonios!

Código:

/* Cómo leer y buscar una palabra en un archivo. */

#include <malloc.h> /* Memoria dinámica. */
#include <stdlib.h>
#include <stdio.h> /* Para acceder a disco y escribir en pantalla. */
#include <string.h> /* Para manejar cadenas de caracteres. */

#define NOMBRE_ARCHIVO "archivo.txt"
#define PALABRA_A_BUSCAR "Yesica"



/* El programa empieza aquí. */
int main (void)
{
  FILE *Archivo = NULL;
  long TamannoArchivo = 0;
  char *Datos = NULL, *Palabra = NULL;
  long PosicionPalabra = 0;

/* Abrimos el archivo. */
  Archivo = fopen (NOMBRE_ARCHIVO, "rb");
  if (Archivo == NULL) {
  /* Hubo un error. */
    printf ("No pude abrir el archivo '%s'\n", NOMBRE_ARCHIVO);
    return EXIT_FAILURE;
  }
  errno = 0; /* Ponemos el indicador de errores a "no hay error". */
/* Calcula el tamaño del archivo. */
  fseek (Archivo, 0, SEEK_END); /* Vamos al final del archivo. */
  TamannoArchivo = ftell (Archivo); /* Le preguntamos en qué octeto estamos. */
  rewind (Archivo); /* Regresamos al principio del archivo. */
/* Comprobamos los errores. */
  if (errno != 0) {
    printf ("[%d] Error al analizar el archivo '%s'\n", errno, NOMBRE_ARCHIVO);
    fclose (Archivo); /* No olvidar cerrarlo. */
    return EXIT_FAILURE;
  }
/* Reservamos espacio para almacenar los datos. */
  Datos = (char*)malloc (TamannoArchivo, sizeof (char));
  if (Datos = NULL) {
    printf ("No pude reservar espacio para poder leer el archivo '%s'\n", NOMBRE_ARCHIVO);
    fclose (Archivo); /* No olvidar cerrarlo. */
    return EXIT_FAILURE;
  }
/* Leemos el archivo. */
  if (fread ((void*)Datos, sizeof (char), TamannoArchivo) != TamannoArchivo || errno != 0) {
    printf ("[%d] Error al leer el archivo '%s'\n", errno, NOMBRE_ARCHIVO);
    free (Datos); /* Liberar la memoria. */
    fclose (Archivo); /* No olvidar cerrarlo. */
    return EXIT_FAILURE;
  }
/* Ahora ya podemos buscar la palabra. */
  Palabra = strstr (Datos, PALABRA);
  if (Palabra == NULL)
    printf ("La palabra '%s' no se encuentra en el archivo '%s'\n", PALABRA, NOMBRE_ARCHIVO);
  else {
  /* Operación con punteros para saber dónde se encuentra la palabra. */
    PosicionPalabra = (long)(Palabra - Datos);
    printf ("La palabra '%s' se encuentra en el carácter número %ld del archivo %s\n", PALABRA, PosicionPalabra, NOMBRE_ARCHIVO);
  }
/* Ahora, liberamos la memoria y cerramos el archivo. */
  free (Datos);
  fclose (Archivo);
/* Como no hubo errores, lo decimos. */
  return EXIT_SUCCESS;
}

Dos detallitos:
  • Es código C, no C++, pero debería funcionar en el compilador sin problemas. De todas formas, usando C++ no cambiaría mucho, salvo que te ahorras la gestión de memoria y todas las comprobaciones de error pueden resumirse en un único bloque try { ... } catch (...) { ... }
  • Lo he hecho de memoria, así que no he comprobado si está perfecto. Eso deberás verlo tu.

[edit]Creo que esta vez gané a Seoane, ¿no? :D :cool:

Yssik 11-01-2007 14:53:01

Gracias
 
Gracias por las respuestas lo voy a intentar y les comento.Disculpen por no ser tan explicita, es que ando muy preocupada por este proyecto....

Yssik 26-01-2007 16:12:15

Gracias
 
Hola. no habia ingresado antes por un proble con internet, pero quiero agradecerle por su ayuda. ya realie el programa y funciona muy bien, use el codigo de roman con ciertos arreglos... Gracias....:p


La franja horaria es GMT +2. Ahora son las 12:53:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi