Problema al abrir ficheros

Iniciado por Tururu_ru, 24 Octubre 2011, 18:02 PM

0 Miembros y 1 Visitante están viendo este tema.

Tururu_ru

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!

Riki_89D

#1
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

Tururu_ru

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.

Riki_89D

#3
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

do-while

¡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/

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

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language