Autor
|
Tema: Duda al escribir ficheros (Leído 12,524 veces)
|
Feynmann
Desconectado
Mensajes: 21
|
Buenas tardes, Presentare mi codigo y a continuación las dudas , (He buscado en google y en este foro, lo he intentado pero no me acabo de aclarar)Lo primero de todo, estoy intentado hacer un programa que recoja datos de un fichero (hago modificaciones oportunas) y me los escribe en otro, para ello he empezado por algo facilito para entenderlo. #include <iostream> #include <fstream> #include <cstdio> using namespace std; int main(){ /*Leo fichero datos*/ ifstream fin("datos.txt"); // Situando un cursor al inicio del fichero string nombre; int numero; fin >> nombre >> numero; // los datos se obtienen del fichero txt /*Escribo fichero salida.txt*/ ofstream fout("salida.txt"); fout << nombre << " " << numero*2; getchar(); return 0; }
Preguntas: 1) No me reconoce el string, y me obliga a crear una variable tal que char nombre[10] por ejemplo. ¿Que le falta a mi codigo? 2) He conseguido hacer que me lea una linea del fichero .txt que es de la siguiente forma: Como puedo conseguir que me lea con saltos de linea, es decir que me lea un fichero de este tipo felipe 14 Marcos 15 Duna 0129
He estado mirando y no se que funcion o que usar! 3) Igual que la pregunta 2, pero para escribirlo en el fichero. A ver si me podeis decir por donde van los tiros y lo sigo intentando. Gracias!!
|
|
|
En línea
|
Novato curioso, me gustaria aprender a programar bien en C/C++ por eso estoy aqui. Pero puedo echar una mano a cualquiera que me lo pida en temas de electronica!
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
1º ¿No te reconoce el string? Pues sintácticamente está correcto Oo 2º Para leer líneas enteras se usa getline: getline(archivo,string);
También se puede leer directamente por read(): http://www.cplusplus.com/reference/istream/istream/read/Esa es una lectura literal. 3º Escribe las líneas que vas leyendo. Puedes los saltos de línea que creas necesario.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
No me reconoce el string, y me obliga a crear una variable tal que char nombre[10] por ejemplo. ¿Que le falta a mi codigo? Antes de utilizar la clase string debes incluir el encabezado correspondiente con: #include <string>
Un saludo
|
|
|
En línea
|
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
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
¿Seguro? A mi siempre me lo coge con iostream.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
¿Seguro? A mi siempre me lo coge con iostream. Revisando el tema lo usual, como bien indicas, es que funcione pero para estar completamente seguros mejor incluir el encabezado. Una discusión sobre ello en comp.lang.c++.moderated es Is the string header file required?. Un saludo
|
|
|
En línea
|
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
|
|
|
Feynmann
Desconectado
Mensajes: 21
|
Perfecto, muchas gracias.
Efectivamente, se necesita el encabezado. por otro lado, probare la funcion getline, y os digo si sigo teniendo problemas!
Un saludo!
|
|
|
En línea
|
Novato curioso, me gustaria aprender a programar bien en C/C++ por eso estoy aqui. Pero puedo echar una mano a cualquiera que me lo pida en temas de electronica!
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Por cierto es importante distinguir entre lectura en modo texto y lectura binaria. Lo que estás haciendo ahí es lectura en modo texto, el programa lee las cifras y las interpreta. Pero también cabe guardar la cifra a "palo seco": int b; ofstream escritura("texto.bin"); escritura.write((char*) &b,sizeof(int));
Si abrimos el archivo con un bloc de notas no veremos nada pero ahí está el número guardado. Leyendolo sería parecido: int b; ifstream escritura("texto.bin"); escritura.read((char*) &b,sizeof(int));
Este modo de lectura es "más natural" para el programa, los datos suelen ocupar menos espacio y la lectura y escritura es más rápida (ya que no tienen que reinterpretarlo como texto). ¿Cual usar? Pues depende de tus necesidades por supuesto, si quieres que el archivo pueda ser leído por humanos entonces usa los operadores >> y << que has usado antes. Para ser leído por programas es mejor esta opción.
|
|
|
En línea
|
|
|
|
Feynmann
Desconectado
Mensajes: 21
|
amchacon, me viene de perlas que me pre-avises!
Te comento para que lo necesito y me aconsejas, para empezar no soy estudiante, estoy trabajando y trabajo con archivos de txt llenos de columnas de datos, te hablo de columnas que van de 32K a 200K datos.
Lo que quiero hacer es extraerlos, aplicarles ciertas formullillas y meterlos en otro .txt
Me aconsejas entonces que lo haga en binario? Aunque has de saber que: El .txt inicial esta en ASCII y el final tambien lo debe de estar...
Es decir, ASCII->Binario- modifico en binario -> ASCII es lo que me aconsejas?
|
|
|
En línea
|
Novato curioso, me gustaria aprender a programar bien en C/C++ por eso estoy aqui. Pero puedo echar una mano a cualquiera que me lo pida en temas de electronica!
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Si trabajas con ficheros txt llenos de datos olvida lo que he dicho y procede como siempre.
¿Razón? Pues que no tienes los números en binario sino en formato ASCII.
|
|
|
En línea
|
|
|
|
Feynmann
Desconectado
Mensajes: 21
|
Bueno, he estado trasteando y a parte de modificarlo todo creo que me he liado más, os comento: El objetivo del programa es leer columnas con muchisimos datos de un Datos.txt, (luego los modificare) y a continuación los meto en un salida.txt Como primera meta me he planteado el siguiente programa donde uso el fwrite para escribir lo que leo con el getline... El problema que me da errores y no me compila, que me está fallando? #include <iostream> #include <fstream> #include <cstdio> #include <string> using namespace std; int main(){ FILE *fichero; FILE *fichero2; char nombre[11] = "datos.txt"; char nombre2[11]= "salida.txt"; fichero = fopen( nombre, "r+" ); // Fichero datos.txt desde el que leo los datos. fichero2= fopen( nombre2, "w+"); // Fichero salida.txt donde escribire los datos. // Pijada para ver si me lo está abriendo o no printf( "Fichero: %s -> ", nombre ); if( fichero ) printf( "creado (ABIERTO)\n" ); else { printf( "Error (NO ABIERTO)\n" ); return 1; } // Final pijada cin.getline (*fichero, 256 , '\n'); //Con esto leo del datos.txt, hasta que se encuentra un salto de linea fwrite( fichero, sizeof(unsigned int), 10, fichero2 ); printf( "\nLeyendo los datos del fichero \"%s\":\n", nombre ); if( !fclose(fichero) ) printf( "\nFichero cerrado\n" ); else { printf( "\nError: fichero NO CERRADO\n" ); return 1; } getchar(); return 0; }
|
|
|
En línea
|
Novato curioso, me gustaria aprender a programar bien en C/C++ por eso estoy aqui. Pero puedo echar una mano a cualquiera que me lo pida en temas de electronica!
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Una duda en vb...Como puedo escribir datos en un tag con vb???Ayudenme plz,thx!
Programación Visual Basic
|
ZaPa
|
3
|
2,119
|
12 Julio 2005, 08:54 am
por maxnet
|
|
|
Duda :Escribir en la BIOS
Programación Visual Basic
|
Krnl64
|
3
|
2,248
|
29 Mayo 2006, 22:45 pm
por Krnl64
|
|
|
Duda con ficheros y structs en C
Programación C/C++
|
chica_23
|
9
|
5,418
|
19 Marzo 2011, 20:24 pm
por chica_23
|
|
|
Duda ficheros c++
Programación C/C++
|
oskrg55
|
3
|
2,114
|
10 Agosto 2015, 17:14 pm
por ivancea96
|
|
|
[C] Se puede leer y escribir en dos ficheros desde un mismo programa?
Programación C/C++
|
LoQueSeaPI
|
1
|
1,746
|
30 Noviembre 2016, 23:56 pm
por engel lex
|
|