Foro de elhacker.net

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
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.  
  8. string nombre;
  9.  
  10. cout << "Introduzca el nombre del archivo: ";
  11. cin >> nombre;
  12.  
  13. if(nombre == "5"){
  14. char cadena[128];
  15.    // Creamos un fichero de salida
  16.    ofstream fs(nombre.".txt");
  17. }
  18. else{
  19. cout << "Nombre no valido." << endl;
  20. }
  21.  
  22.  
  23. cin.get();
  24. return 0;
  25. }

Todo funciona bien.

Pero me salta un error acá:

Código
  1. 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
  1. #include <fstream>
  2. #include <string>
  3. #include <iostream>
  4.  
  5. int main()
  6. {
  7.  std::string name_file;
  8.  std::cin >> name_file;
  9.  name_file += ".txt";
  10.  std::ofstream file(name_file.c_str());
  11.  file << "Hello world";
  12.  file.close();
  13. }
  14.  

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
  1.        string nombre;
  2. string texto;
  3.  
  4. cout << "Introduzca el nombre del archivo: ";
  5. cin >> nombre;
  6.  
  7. cout << "Texto: ";
  8. getline(cin, texto);
  9.  
  10. nombre += ".txt";
  11.  
  12. ofstream file(nombre.c_str());
  13.  
  14. file << texto << endl;
  15.  
  16. 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
  1. #include <iostream>
  2. #include <string>
  3. int main()
  4. {
  5.   std::string str;
  6.   getline(std::cin, str);
  7.  
  8.   std::cout << str << std::endl;
  9. }
  10.  


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
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.  
  9. string nombre;
  10. string str;
  11.  
  12. cout << "Introduzca el nombre del archivo: ";
  13. cin >> nombre;
  14.  
  15. cout << "Texto: ";
  16. getline(cin, str);
  17.  
  18. nombre += ".txt";
  19.  
  20. ofstream file(nombre.c_str());
  21.  
  22. file << str << endl;
  23.  
  24. file.close();
  25.  
  26. cin.get();
  27. return 0;
  28. }


Título: Re: [C++] Crear archivo .txt
Publicado por: Stakewinner00 en 14 Mayo 2015, 19:15 pm
Ya lo modifique un poco

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.  
  9. string nombre;
  10. string str;
  11.  
  12. cout << "Introduzca el nombre del archivo: ";
  13. cin >> nombre;
  14.  
  15.        cin.ignore(2, '\n'); //cin >> nombre guarda el salto de línea en el buffer
  16.                                    //y luego en getline directamente es como si presionaras enter
  17.  
  18. cout << "Texto: ";
  19. getline(cin, str);
  20.  
  21. nombre += ".txt";
  22.  
  23. ofstream file(nombre.c_str());
  24.  
  25. file.write(str.c_str(), str.size()); //Así también escribe los datos si tiene espacios y demás separadores
  26.  
  27. file.close();
  28.  
  29. cin.get();
  30. return 0;
  31. }


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
  1. string str;
  2. while( !file.eof())
  3. {
  4.   char c = file.get();
  5.   str += c;
  6.   if(c == '\n') {
  7.       std::cout << str;
  8.   str = "";
  9.   }
  10. }
  11.  


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

Código
  1. string str;
  2. while( !file.eof())
  3. {
  4.   char c = file.get();
  5.   str += c;
  6.   if(c == '\n') {
  7.       std::cout << str;
  8.   str = "";
  9.   }
  10. }
  11.  

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