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

[SOLUCIONADO] fstream variable

Estas en el tema de fstream variable en el foro de C/C++ en Foros del Web. Hola que tal, tengo un problema para guardar un archivo en base a una variable, usando la función ofstream. A mi me gustaría que el ...
  #1 (permalink)  
Antiguo 01/04/2014, 09:08
 
Fecha de Ingreso: abril-2014
Mensajes: 3
Antigüedad: 10 años
Puntos: 0
Pregunta fstream variable

Hola que tal, tengo un problema para guardar un archivo en base a una variable, usando la función ofstream.
A mi me gustaría que el nombre del archivo almacenado se cree, en base al contenido de la variable, actualmente la variable que estoy utilizando es un entero, pero se puede convertir de ser necesario.

Doy un ejemplo de como seria el codigo (idealmente):
Cita:
int var=0;
while(var!=1000){
ofstream fsalida1("Salida",var,".txt");
var++;
}
Es solo un ejemplo para entender, obviamente eso no funciona, lo que estoy buscando seria hacer algo similar a eso, donde la cantidad de veces no este definida.

Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 01/04/2014, 09:45
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: fstream variable

Crea un string con el nombre antes de usarlo en el nombre del archivo.
Sugiero usar stringstream (http://goo.gl/znH2ys), el metodo str() te permite obtener el string que se ha generado despues de usar el operador <<
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 01/04/2014, 10:21
 
Fecha de Ingreso: abril-2014
Mensajes: 3
Antigüedad: 10 años
Puntos: 0
Respuesta: fstream variable

Me genero dudas lo que me dijiste, en que me serviría utilizar en stringstream ?
y en que parte debería utilizar el str() ?
Por cierto cuando quiero usar un string en la salida del archivo me da error. Tanto con el string como con el stringstream, por eso supongo que lo estoy utilizando mal.

Gracias por la respuesta
  #4 (permalink)  
Antiguo 02/04/2014, 05:08
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: fstream variable

Cita:
Iniciado por Uriel_6 Ver Mensaje
Hola que tal, tengo un problema para guardar un archivo en base a una variable, usando la función ofstream.
A mi me gustaría que el nombre del archivo almacenado se cree, en base al contenido de la variable, actualmente la variable que estoy utilizando es un entero, pero se puede convertir de ser necesario.

Doy un ejemplo de como seria el codigo (idealmente):

Es solo un ejemplo para entender, obviamente eso no funciona, lo que estoy buscando seria hacer algo similar a eso, donde la cantidad de veces no este definida.

Desde ya muchas gracias.
¿¿Que quieres que se produzca?? 1000 ficheros de texto con diferente nombre????
  #5 (permalink)  
Antiguo 02/04/2014, 05:46
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: fstream variable

Código C++:
Ver original
  1. // swapping ostringstream objects
  2. #include <string>       // std::string
  3. #include <iostream>     // std::cout
  4. #include <sstream>      // std::stringstream
  5. #include <fstream>
  6. using namespace std;
  7.  
  8. //esto tiene que estar en una funcion para no tener que generar variables del tipo ofstream sino
  9. //deberias generar tambien fichero1( ss.str() )...fichero2( ss.str() )...fichero3( ss.str() )... XDDD
  10. void createfile( int num ){
  11.     stringstream ss;
  12.     ss << "Salida" << num << ".txt";
  13.     //ss.str() junta Salida+num+.txt de forma que queda asi: Salida0.txt. Después a la segunda
  14.     //vuelta Salida1.txt... así hasta el máximo que es el n_archivos.
  15.     ofstream fichero( ss.str() );
  16. }
  17.  
  18. int main () {
  19.     //números de archivos del 1 al 10 si quieres mil cambia tu pero no quiero 1000 archivos en mi pc XDD            
  20.     int num = 1;
  21.     int n_archivos = 11;
  22.     stringstream ss;
  23.    
  24.     while ( num != n_archivos ) {
  25.         createfile( num );
  26.         num++;
  27.     }
  28.   return 0;
  29. }
http://www.cplusplus.com/reference/s.../stringstream/
para el str() leer aquí:
http://www.cplusplus.com/reference/s...ingstream/str/

Fíjese que tuve que poner la parte que imprime en una variable. Eso es por que para editar un archivo de texto debemos crear una variable tipo ofstream. Esa variable ofstream se asocia al archivo que especificamos dentro de las ():

ofstream mifichero("archivo.txt");

no puedo crear otro archivo ofstream mifichero("archivo2.txt");
Podía asociarlo con otro txt creo haciendo así: mifichero("otrofichero.txt");
Lo que hacíamos antes era declarar varios ofstream llamado "mifichero" que apuntaba a diferentes ficheros. Ojo con eso :D.
Pero como en la función una variable se destruye cuando la función termina pues creaba una variable ofstream lo creaba el fichero y se destruya la variable cada vez que llamamos la función.


Esto:
ofstream mifichero("archivo.txt");
ofstream mifichero("archivo2.txt");
Es ilegal. Intentamos declarar 2 variables mifichero que apuntan a diferentes archivos, solo el primero seria correcto.

A cambio:
ofstream mifichero("archivo.txt");
mifichero("archivo2.txt");
Esto puede que funcione, no lo he probado por que no me interesa XDD te lo dejo a ti que investigue.

Última edición por vangodp; 02/04/2014 a las 06:02
  #6 (permalink)  
Antiguo 02/04/2014, 18:39
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: fstream variable

Ese programa que hiciste vangodp no funca en la linea 15, creo que es porque a ofstream no se le puede pasar una variable, aunque si usaras

Código C++:
Ver original
  1. ofstream fichero;
  2. fichero.open(ss.str());

se podria hacer aunque a open solo le podes pasar char :/
  #7 (permalink)  
Antiguo 02/04/2014, 19:03
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: fstream variable

Pues a mi no me tira ningún error y me genera todos los archivos.

sin ningún aviso ><.
Lo que hay de mas es un ss dentro de main >< pero paso de quitar.
¿Que error te da?Esta echo en codeblocks y XP como ves.

Última edición por vangodp; 02/04/2014 a las 19:10
  #8 (permalink)  
Antiguo 03/04/2014, 07:36
 
Fecha de Ingreso: abril-2014
Mensajes: 3
Antigüedad: 10 años
Puntos: 0
Respuesta: fstream variable

A mi tampoco me funciono tu ayuda, pero me dio una idea, aca te paso la que me funciono a mi.

Código C++:
Ver original
  1. // swapping ostringstream objects
  2. #include <string>       // std::string
  3. #include <iostream>     // std::cout
  4. #include <sstream>      // std::stringstream
  5. #include <fstream>
  6. using namespace std;
  7.  
  8. //esto tiene que estar en una funcion para no tener que generar variables del tipo ofstream sino
  9. //deberias generar tambien fichero1( ss.str() )...fichero2( ss.str() )...fichero3( ss.str() )... XDDD
  10. void createfile( int num ){
  11.     stringstream ss;
  12.     string ss2;
  13.     ss << "Salida" << num << ".txt"; ;
  14.     //ss.str() junta Salida+num+.txt de forma que queda asi: Salida0.txt. Después a la segunda
  15.     //vuelta Salida1.txt... así hasta el máximo que es el n_archivos.
  16.     ss2 = ss.str();
  17.     ofstream fichero(ss2.c_str());
  18. }
  19.  
  20. int main () {
  21.     //números de archivos del 1 al 10 si quieres mil cambia tu pero no quiero 1000 archivos en mi pc XDD            
  22.     int num = 1;
  23.     int n_archivos = 11;
  24.     stringstream ss;
  25.    
  26.    
  27.     while ( num != n_archivos ) {
  28.         createfile( num );
  29.         num++;
  30.     }
  31.   return 0;
  32. }

Ese error me da a mi, tanto en Dev c++ como en CodeBlocks con windows seven x64/x86
Si tenes idea de cual puede ser el problema, te agradeceria la ayuda.
  #9 (permalink)  
Antiguo 03/04/2014, 11:24
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: fstream variable

Pues ni idea :/ pero de compilador uso mingw 4.8.1 no el TDM
O sea que uso el de 32 bit, es la única diferencia que veo por lo demás... O.o
¿Pero funciona de la forma que has dicho?
Mira tienes activado lo de c11 en codeblocks?

ve a settings/compiler y marca la paloma que pone have g++ blablabla c++11 pues le marcas eso. Creo que hace parte de ese estandar.

y en dev aqui en fotos lo encontre http://www.cplusplus.com/doc/tutoria...uction/devcpp/

Sino debes poner en linker eso -std=c++11, o eso -std=gnu++11
Donde se pone SDL.....

Última edición por vangodp; 03/04/2014 a las 11:42
  #10 (permalink)  
Antiguo 03/04/2014, 13:27
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: fstream variable

Cita:
Iniciado por vangodp Ver Mensaje
Pues ni idea :/ pero de compilador uso mingw 4.8.1 no el TDM
O sea que uso el de 32 bit, es la única diferencia que veo por lo demás... O.o
¿Pero funciona de la forma que has dicho?
Mira tienes activado lo de c11 en codeblocks?

ve a settings/compiler y marca la paloma que pone have g++ blablabla c++11 pues le marcas eso. Creo que hace parte de ese estandar.

y en dev aqui en fotos lo encontre [url]http://www.cplusplus.com/doc/tutorial/introduction/devcpp/[/url]

Sino debes poner en linker eso -std=c++11, o eso -std=gnu++11
Donde se pone SDL.....

Sabes que hice eso, y ahora anda D: porque?

Última edición por Urban94; 03/04/2014 a las 13:37
  #11 (permalink)  
Antiguo 03/04/2014, 14:50
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: fstream variable

El constructor de ofstream no acepta el tipo string (en la version c++98), pero se agregó este constructor en la version c++11.

Ver aqui: http://www.cplusplus.com/reference/f...ream/ofstream/
Hay 2 tabs, uno para c++98 y otro para c++11, uno tiene el constructor sin el tipo string, el otro si
__________________
Visita mi perfil en LinkedIn

Etiquetas: c++, fstream
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 21:54.