Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: raquelsg88 en 3 Junio 2013, 09:45 am



Título: leer fichero .txt
Publicado por: raquelsg88 en 3 Junio 2013, 09:45 am
Hola,

Tengo un fichero .txt y en su contenido una cadena de caracteres, por ejemplo: download_V12.mot.

¿Cómo puedo hacer para leer esa palabra y guardarla en una variable?

unsigned char FL_UPDATE_FILE_NAME; //variable final en la que quiero que esté la palabra del .txt
unsigned char version[30];

FILE *pFile;

pFile = fopen("versiones.txt","r"); /* Abre el archivo .txt para lectura de texto */

fgets(version,30,pFile);
while (feof(pFile) == 0)
{
FL_UPDATE_FILE_NAME = fgetc(pFile);
}   
fclose(pFile);

He probado con estas funciones pero no funciona.

Si alguien me ayuda se lo agradezco!


Título: Re: leer fichero .txt
Publicado por: amchacon en 3 Junio 2013, 11:11 am
¿Quieres guardar una palabra en una sola variable?

Elimina el while y hazlo exactamente igual que con la versión


Título: Re: leer fichero .txt
Publicado por: raquelsg88 en 3 Junio 2013, 11:26 am
En el fichero de texto tengo escrito: "download.mot"

Quiero guardar eso en una variable. No sé como hacer para que me coja cada caracter. Solo quiero que me guarde los 14 caracteres en este caso.

FILE *pFile;
unsigned char cadena[30];
unsigned char FL_UPDATE_FILE_NAME;
   
pFile=fopen("version.txt","r");

            fgets(cadena,30,pFile);
            FL_UPDATE_FILE_NAME=cadena;

fclose(pFile);

Esto no funciona, el problema creo que está con FL_UPDATE_FILE_NAME. Quiero que FL_UPDATE_FILE_NAME="download.mot", ya que voy a usar ese nombre de fichero para otra cosa.


Título: Re: leer fichero .txt
Publicado por: amchacon en 3 Junio 2013, 12:38 pm
No me has entendido:

Código
  1. FILE *pFile;
  2. unsigned char version[30];
  3. unsigned char FL_UPDATE_FILE_NAME[15];
  4.  
  5. pFile=fopen("version.txt","r");
  6.  
  7. fgets(version,30,pFile);
  8. fgets( FL_UPDATE_FILE_NAME,14,pFile);
  9.  
  10. fclose(pFile);


Título: Re: leer fichero .txt
Publicado por: raquelsg88 en 3 Junio 2013, 12:59 pm
sigue sin funcionar, pero gracias por ayuda


Título: Re: leer fichero .txt
Publicado por: amchacon en 3 Junio 2013, 13:04 pm
sigue sin funcionar, pero gracias por ayuda
Explicate más. ¿Que es lo que pasa cuando ejecutas el programa? ¿Que resultado obtienes?

¿Cual es el contenido del archivo que has usado de prueba?


Título: Re: leer fichero .txt
Publicado por: raquelsg88 en 3 Junio 2013, 13:21 pm
El programa en un principio era así:

#define    FL_UPDATE_FILE_NAME        "download.mot"

void R_Fl_Flash_Update(void)
{
    FRESULT  res;
    uint16_t fl_file_rw_cnt;

   
    /* **** Mount the file system **** */

   res = R_tfat_f_open(&fl_file, FL_UPDATE_FILE_NAME,
                                (TFAT_FA_OPEN_EXISTING | TFAT_FA_READ));   
        etc,
   etc...
}         

la funcion R_tfat_f_open es caracteristica del micro de renesas que estoy usando, pero es lo mismo que el fopen.

Lo que quiero hacer es que no busque solo el fichero llamado "download.mot", para ello de un fichero .txt leerá lo que hay escrito, que será por ejemplo "update.mot" y después buscará y leerá el fichero con ese nombre y extensión.


Título: Re: leer fichero .txt
Publicado por: amchacon en 3 Junio 2013, 13:25 pm
¡¡, para ello de un fichero .txt leerá lo que hay escrito, que será por ejemplo "update.mot" y después buscará y leerá el fichero con ese nombre y extensión.
En C estándar:
Código
  1. FILE *pFile;
  2. char Nombre[256];
  3.  
  4. pfile = fopen("archivo.txt");
  5. fgets(Nombre,255,pFile);
  6. fclose(pfile);
  7.  
  8. pfile = fopen(Nombre); // Abrimos el archivo en cuestión
  9.  

Doy por hecho de que el nombre está en la primera línea del archivo.


Título: Re: leer fichero .txt
Publicado por: raquelsg88 en 3 Junio 2013, 15:44 pm
Nombre no es igual a "download.mot" por lo que nunca se abre ese archivo.

Gracias aun asi


Título: Re: leer fichero .txt
Publicado por: bemone en 3 Junio 2013, 16:01 pm
Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.    ifstream archivo;
  10.    string contenido;
  11.  
  12.    archivo.open("nombre.txt");
  13.    archivo >> contenido;
  14.  
  15.    cout << contenido;
  16.    archivo.close();
  17.    return 0;
  18. }

Por lo que entendí en el archivo download.mot tenes otro nombre de un archivo y luego lo queres abrir?

Código
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5. #define NOMBRE_ARCHIVO "download.mot"
  6.  
  7. int main()
  8. {
  9.    ifstream archivo, archivo2;
  10.    char nomArchivo2[256];
  11.  
  12.    archivo.open(NOMBRE_ARCHIVO);
  13.    archivo >> nomArchivo2;
  14.    archivo.close();
  15.  
  16.    cout << nomArchivo2;
  17.    archivo2.open(nomArchivo2);
  18.    archivo2.close();
  19.  
  20.    return 0;
  21. }


Título: Re: leer fichero .txt
Publicado por: raquelsg88 en 3 Junio 2013, 16:10 pm
Es no es lo que he preguntado, pero gracias


Título: Re: leer fichero .txt
Publicado por: bemone en 3 Junio 2013, 16:13 pm
fijate que modifique el comentario anterior.


Título: Re: leer fichero .txt
Publicado por: raquelsg88 en 3 Junio 2013, 16:30 pm
estoy trabajando en C y no entiendo los comandos que has puesto.

Yo tengo dos ficheros,  uno es archivo.txt y dentro estará escrito el nombre de un fichero. Y el otro fichero es el escrito dentro del .txt.

Es decir, en el mismo directorio tengo:

- archivo.txt. En la primera linea esta escrito "download.mot", por ejemplo.
- download.mot

Quiero hacer esto porque no siempre se va a llamar igual el archivo que queremos abrir. Y una solución que se nos ha ocurrido es escribir en un .txt el nombre del fichero que queremos usar en ese momento.


Título: Re: leer fichero .txt
Publicado por: bemone en 3 Junio 2013, 16:38 pm
Eso es lo que hace el codigo anterior, abre un archivo (En este caso NOMBRE_ARCHIVO) y guarda en el char el nombre del otro archivo.
Luego abre el archivo (archivo2) el cual tiene el nombre que tenia dentro el txt anterior.
Busca la forma de pasarlo a C.


Título: Re: leer fichero .txt
Publicado por: amchacon en 3 Junio 2013, 16:55 pm
El problema esta en el guion/espacio.

Eliminalos y haz la prueba.


Título: Re: leer fichero .txt
Publicado por: leosansan en 3 Junio 2013, 21:50 pm

Yo tengo dos ficheros,  uno es archivo.txt y dentro estará escrito el nombre de otro fichero. Y ( corrijo yo) en ese otro fichero esta escrito "download.mot".

Es decir, en el mismo directorio tengo:

- archivo.txt. En la primera linea esta escrito (corrijo yo) el nombre del otro fichero .
- (corrijo yo) En el otro fichero está escrito "download.mot"

Quiero hacer esto porque no siempre se va a llamar igual el archivo que queremos abrir. Y una solución que se nos ha ocurrido es escribir en un .txt, (amplio yo) o sea archivo.txt,  (amplio yo) el nombre del otro fichero que queremos usar en ese momento.


Con las puntualizaciones que he puesto tengo esta salida:


Código
  1. Creando el primer fichero archivo.txt y escribiendo el nombre del otro fichero
  2.          que es: el_otro_fichero
  3.  
  4.  
  5. Leyendo del fichero archivo.txt el nombre del otro fichero
  6.  
  7. "el_otro_fichero"
  8.  
  9. Escribo en el_otro_fichero:
  10. "download.mot"
  11.  
  12.  
  13. Leyendo de el_otro_fichero
  14. "download.mot"
  15.  
  16.  

No sé si me he liado, si es así sorry. Pero la idea que capto es que tienes un fichero llamado archivo.txt en donde está escrito el nombre de otro fichero, que hay que leer mediante una variable, ya que lo iras cambiando, y a su vez en ese otro fichero tienes escrito algo, por ejemplo "download.mot". ¿No lo he entendido mal?.

Si es como he supuesto, una solución rapidita, sin comprobaciones de que los ficheros existen y esas cosas -¡faltaría más haciéndolo yo!  :laugh:- es la que te pongo a continuación y si es otra cosa ya me contaras con más detalles. Por cierto, en la realidad el fichero archivo.txt existe por lo que en lugar de abrirlo con la opción "w" se abriría con "r". Lo he hecho con "w" para comprobar que todo iba bien y que además pudieras ejecutar el código que te paso.


Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4.    FILE  *fichero1,*fichero2;
  5.    char linea[81],leo[81],linea_sin_nulo[81];
  6.  
  7.    puts ("Creando el primer fichero archivo.txt y escribiendo el nombre del otro fichero\n\
  8.          que es: el_otro_fichero\n\n");
  9.    fichero1 = fopen("archivo.txt", "wt");
  10.  
  11.    fputs("\"el_otro_fichero\"", fichero1);
  12.    fclose(fichero1);
  13.  
  14.    puts ("Leyendo del fichero archivo.txt el nombre del otro fichero\n\
  15.          ");
  16.    fopen("archivo.txt", "r");
  17.    fgets(linea, 80, fichero1);
  18.    printf("%s\n\n",linea);
  19.    fclose(fichero1);
  20.  
  21.    puts("Escribo en el_otro_fichero:");
  22.    puts("\"download.mot\"\n\n");
  23.    fichero2 = fopen("linea", "wt");
  24.  
  25.    fputs("\"download.mot\"\n\n", fichero2);
  26.    fclose(fichero2);
  27.  
  28.  
  29.    puts ("Leyendo de el_otro_fichero");
  30.    fopen("linea", "r");
  31.    fgets(leo, 80, fichero2);
  32.    printf("%s\n",leo);
  33.    fclose(fichero2);
  34.  
  35.    return 0;
  36. }
  37.  

Funcionar, funciona pero no es el tema de ficheros mi fuerte. Seguro que alguien más curtido en el tema podrá colgar un código mejor. Pero, en fin, para que veas que lo que pretendes tiene solución.

Saluditos! ... ..
(http://st.forocoches.com/foro/images/smilies/ciao.gif)