Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Tururu_ru en 24 Octubre 2011, 18:02 PM

Título: Problema al abrir ficheros
Publicado por: Tururu_ru en 24 Octubre 2011, 18:02 PM
Hola, quiero abrir un archivo de texto en c++, pero el nombre de ese archivo puede ser desde 1.txt hasta 5.txt. Es decir, tengo 5 archivos de texto, 1.txt...5.txt, y quiero abrir el archivo que le corresponda a la variable "mod". Si mod vale 1, abriré el archivo 1.txt, si mod vale 2, el archivo 2.txt, y así sucesivamente. He intentado abrirlo así: f.open("'mod'.txt", ios::out);, también así: f.open("mod.txt", ios::out); Pero no lo consigo, alguien me podría ayudar?
Gracias!
Título: Re: Problema al abrir ficheros
Publicado por: Riki_89D en 24 Octubre 2011, 18:10 PM
Pues haz un "switch - case" y listo

Código (cpp) [Seleccionar]

switch(mod)
{
case 1:

// abre el archivo 1....

break;
case 2:
.....


y asin sucesivamente


y lo de "f.open()" esta bien,con ios::out) abres el archivo para realizar operaciones de escritura,si tu intencion es leer los archivos usa ios::in
saludos
Título: Re: Problema al abrir ficheros
Publicado por: Tururu_ru en 24 Octubre 2011, 18:24 PM
Sí, eso ya lo había pensado, pero tengo que abrir esos ficheros muchas veces en un mismo programa, por lo que no quiero llenar muchas lineas de código con tantos switch. Pienso que tiene que haber alguna otra manera usando las comillas o las tildes en el nombre del fichero. Alguien sabe como?
Aun así gracias por contestar.
Título: Re: Problema al abrir ficheros
Publicado por: Riki_89D en 24 Octubre 2011, 18:33 PM
A ya entiendo....lo que quieres es concatenar la variable mod con el nombre del archivo para que quede "txt1.txt"....y ese 1 varia segun lo que pongas en mod.....bien xD


si lo que quieres hacer es eso,usa la funcion strcat();


Código (cpp) [Seleccionar]

#include "iostream"

char File[30] = "texto";
char Mod[2];
char Ext[5] = ".txt";

char *Final = NULL;
char *U = NULL;

int main(void)
{

std::cin >> Mod;  //Leemos Mod
fflush(stdin);
Final = strcat(File,Mod);  // Juntamos File+Mod = texto1
U = strcat(Final,Ext);  // Y Juntamos "texto1" con la extension ".txt" = texto1.txt

std::cout << U;
getchar();
return 0;
}
// Eso imprime texto1.txt




en vez del "cout" deberias de poner "f.open(U,ios::out);

Lo acabo de probar y funciona,ya solo tendrias que con "cin" o gets()" recojer el numero en mod

apartir de alli yo lo que aria seria crear mi propia funcion para que el code nos ea tan grande


saludos
Título: Re: Problema al abrir ficheros
Publicado por: do-while en 24 Octubre 2011, 22:05 PM
¡Buenas!

Como veo que andas un poco perdido, te recomiendo que uses la clase stringstream que se encuentra definida en <sstream>. Sobre esta clase puedes realizar operaciones de "entrada" y "salida" como si lo hicieses sobre objetos del tipo iostream (utilizando por ejemplo los operadores << y >>).

Aqui te dejo un enlace a la referencia de la clase:
http://www.cplusplus.com/reference/iostream/stringstream/ (http://www.cplusplus.com/reference/iostream/stringstream/)

Investiga un poco sobre ella y si aun asi no consigues lo que quieres, vuelve por aqui.

¡Saludos!
Título: Re: Problema al abrir ficheros
Publicado por: rir3760 en 25 Octubre 2011, 03:50 AM
Siguiendo la recomendacion de do-while
un ejemplo sencillo del uso de stringstream y string para crear el nombre en la forma "Nombre_N.txt" es:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <sstream>
using std::stringstream;

#include <string>
using std::string;

int main()
{
for (int i = 0; i != 5; ++i){
stringstream ss;
ss << i;
string nombre = "Nombre_" + ss.str() + ".txt";
cout << nombre.c_str() << endl;
}

return 0;
}


Un saludo