Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: DeMoNcRaZy en 14 Mayo 2015, 17:33 PM

Título: [C++] Crear archivo .txt [SOLUCIONADO]
Publicado por: DeMoNcRaZy en 14 Mayo 2015, 17:33 PM
Buenas,

Estoy probando a crear archivos de textos, guardando datos, etc..

Tengo este código:

Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>

using namespace std;

int main(){

string nombre;

cout << "Introduzca el nombre del archivo: ";
cin >> nombre;

if(nombre == "5"){
char cadena[128];
   // Creamos un fichero de salida
   ofstream fs(nombre.".txt");
}
else{
cout << "Nombre no valido." << endl;
}


cin.get();
return 0;
}


Todo funciona bien.

Pero me salta un error acá:

Código (cpp) [Seleccionar]
ofstream fs(nombre.".txt");

Se que es por la variable "nombre.", pero estoy intentando buscar información y no doy con el resultado... y el if no se como ponerlo para que se ejecute si el campo no está en blanco u es un número.

Si me pudieran dar una ayudita u pista lo agradecería.

Un cordial saludo.
Título: Re: [C++] Crear archivo .txt
Publicado por: Stakewinner00 en 14 Mayo 2015, 17:37 PM
ejemplo básico hellow world en fichero
Código (cpp) [Seleccionar]

#include <fstream>
#include <string>
#include <iostream>

int main()
{
 std::string name_file;
 std::cin >> name_file;
 name_file += ".txt";
 std::ofstream file(name_file.c_str());
 file << "Hello world";
 file.close();
}


al ofstream se le ha de pasar un const char*
Título: Re: [C++] Crear archivo .txt
Publicado por: DeMoNcRaZy en 14 Mayo 2015, 18:03 PM
Gracias, ya solucioné el problema.

Ahora tengo otro problemilla al leer un string con espacios.

Tengo esto:

Código (cpp) [Seleccionar]
        string nombre;
string texto;

cout << "Introduzca el nombre del archivo: ";
cin >> nombre;

cout << "Texto: ";
getline(cin, texto);

nombre += ".txt";

ofstream file(nombre.c_str());

file << texto << endl;

file.close();


La variable texto no puedo leerla con "cin" ya que se para en el primer espacio, estoy probando con getline, pero no se guarda el texto.

Gracias.
Título: Re: [C++] Crear archivo .txt
Publicado por: Stakewinner00 en 14 Mayo 2015, 18:16 PM
No se que error tienes con el getline, en teoría es algo así
Código (cpp) [Seleccionar]

#include <iostream>
#include <string>
int main()
{
   std::string str;
   getline(std::cin, str);
   
   std::cout << str << std::endl;
}
Título: Re: [C++] Crear archivo .txt
Publicado por: DeMoNcRaZy en 14 Mayo 2015, 18:58 PM
Este es el resultado que me da:

(http://i.imgur.com/UfcUexP.png)

Y este el código:

Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(){

string nombre;
string str;

cout << "Introduzca el nombre del archivo: ";
cin >> nombre;

cout << "Texto: ";
getline(cin, str);

nombre += ".txt";

ofstream file(nombre.c_str());

file << str << endl;

file.close();

cin.get();
return 0;
}
Título: Re: [C++] Crear archivo .txt
Publicado por: Stakewinner00 en 14 Mayo 2015, 19:15 PM
Ya lo modifique un poco

Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(){

string nombre;
string str;

cout << "Introduzca el nombre del archivo: ";
cin >> nombre;

       cin.ignore(2, '\n'); //cin >> nombre guarda el salto de línea en el buffer
                                    //y luego en getline directamente es como si presionaras enter

cout << "Texto: ";
getline(cin, str);

nombre += ".txt";

ofstream file(nombre.c_str());

file.write(str.c_str(), str.size()); //Así también escribe los datos si tiene espacios y demás separadores

file.close();

cin.get();
return 0;
}
Título: Re: [C++] Crear archivo .txt
Publicado por: DeMoNcRaZy en 14 Mayo 2015, 20:20 PM
Gracias,

Ahora mi duda es la siguiente,

Leo el archivo y me aparece todo bien, pero no está bien ordenado.

Me aparece así:

(http://i.imgur.com/nfYpx0M.png)

Cuándo debería aparecerme así que es como la tengo guardada:

(http://i.imgur.com/VpAUM7R.png)


He probado saltos de líneas, endl, \n, pero se me salta cada palabra en vez de cada frase.

Gracias.
Título: Re: [C++] Crear archivo .txt
Publicado por: Stakewinner00 en 14 Mayo 2015, 20:27 PM
el operador >> de ifstream omite los separadores, lo más sencillo es hacer algo tipo

Código (cpp) [Seleccionar]

string str;
while( !file.eof())
{
   char c = file.get();
   str += c;
   if(c == '\n') {
       std::cout << str;
   str = "";
   }
}
Título: Re: [C++] Crear archivo .txt
Publicado por: DeMoNcRaZy en 14 Mayo 2015, 21:23 PM
Cita de: Stakewinner00 en 14 Mayo 2015, 20:27 PM
el operador >> de ifstream omite los separadores, lo más sencillo es hacer algo tipo

Código (cpp) [Seleccionar]

string str;
while( !file.eof())
{
   char c = file.get();
   str += c;
   if(c == '\n') {
       std::cout << str;
   str = "";
   }
}


Gracias por la ayuda, ya lo voy entendiendo todo poco a poco.