Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Feynmann

#1
Vale,
Solucionado :)

Siguiente problema:
Los datos del .txt son del tipo:
1E-15       0.00000009    E+15

Soy incapaz de que me guarde en el archivo de salida estos numeros me da la siguiente salida

0.000000 0.000000 -107374176.000000

El tercero ni siquiera existe!! :huh:




mi programa ahora es este:
Código (cpp) [Seleccionar]
int main(){

    FILE *f;
FILE *f2;

   char cadena[11]= "12.txt";
   char nombre2[11]= "salida.txt";

    f = fopen( cadena, "r" );  // Fichero datos.txt desde el que leo los datos.
    f2= fopen( nombre2, "w");  // Fichero salida.txt donde escribire los datos.

   float col1, col2, col3;
   int i=0, n=1;
   while (i<n)
   {
fscanf (f, " %f %f %f \n",&col1 ,&col2 ,&col3 );
fprintf(f2," %f %f %f \n",col1 ,col2 ,col3);
i++;
   }

   fclose(f);
   fclose(f2);

    getchar();
return 0;
}
#2
Consegui solucionar el tema de pasar los ficheros excell a datos.txt . He tenido que hacer una macro en Excell para que me lo pasé a .txt

Teneis ideas para el nuevo reto:
Este programa que aparece abajo, lee archivos .txt de una sola columna,
si tengo un .txt con varias columnas separados por un delimitador como puedo hacerlo!! ?  :o

He buscado pero solo he encontrado cosas que me cambian todo el codigo muchísimo! a ver si alguien me echa una mano!!

Código (cpp) [Seleccionar]


char leer[1000000];
long double numerof;
float numero;                                     
while (fgets(leer, 1000000, fichero) != NULL) //detecta cuando acaba la informacion del fichero datos.txt y
                                       //lee una linea del fichero , la guarda en leer y pasa a la siguiente linea
{       
numero = atof (leer);// convierto un char en un int
long double numero1= (long double) numero;
//Aqui hago las modificaciones
numerof = numero1*2;
sprintf(leer, " %30.30f \n",numerof); // convierto double a string
// Escribo lo anterior al fichero2
fputs(leer,fichero2);
}
fclose(fichero);  //cierra fich datos.txt
fclose(fichero2);
#3
Como cadena de texto, no entiendo. Para que te imagines los archivos son del tipo

Un archivo Excell con muchas hojas, y en cada hoja 3 columnas con datos.

#4
Dios mio.. vaya trabajo me espera..
Resulta que los Excell tienen varias hojas y además muchisimos datos, a mano es imposible.

voy a ver si encuentro algo.. uff :(

Muchísimas gracias por comentarme las alternativas.
Da gusto este foro, sin duda. El día que pueda aportar yo algo lo haré..  :rolleyes:
#5
El problema que la estructura de datos no siempre es la misma, creo que me quedaré con lo que ya tengo.

Otro tema, llevo buscando un buen rato y no encuentro nada.

Si en vez de los ficheros en .txt los tengo en un excell, que funcion debo utilizar para exportar los datos tal y como he hecho a lo largo del hilo?

Un saludooo




El problema que la estructura de datos no siempre es la misma, creo que me quedaré con lo que ya tengo.

Otro tema, llevo buscando unos dias y no se por donde empezar!

Si en vez de los ficheros en .txt los tengo en un excell, que funcion debo utilizar para exportar los datos tal y como he hecho a lo largo del hilo?

Un saludooo
#6
Ostras vale,
pense que dentro del while no se ejecutaba nada.. jojo
entonces ya está perfecto!!
entendi mal a amchacon!!

Gracias de nuevo!  ;D
#7
Perfecto, lo he notado muchísimo! Gracias amchacon!

Solo veo un defecto y es serio! : Me está cogiendo cada dos numeros, es decir los numeros impares en posicion de fila no me los coge, lo que no se por que!  :-[

Código (cpp) [Seleccionar]
//programa para obtener archivos y modificarlos guardandolos en nuevos archivos.
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <fstream>

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.

   if ( fichero == NULL ) {
      printf( "Fichero '%s' no se pudo abrir.\n", nombre ); /* error */
      return -1;
}
   if ( fichero2 == NULL ) {
      printf( "Fichero '%s' no se pudo abrir.\n", nombre2 ); /* error */
      return -1;
}

char leer[1000];
double numero,numerof;

while (fgets(leer, 1000, fichero) != NULL) //detecta cuando acaba la informacion del fichero datos.txt
{                                         
fgets(leer,1000,fichero); //lee una linea del fichero , la guarda en leer y pasa a la siguiente linea
numero = atof (leer);// convierto un char en un int
//Aqui hago las modificaciones
numerof = numero*1;
sprintf(leer, "%f\n",numerof); // convierto double a string
// Escribo lo anterior al fichero2
fputs(leer,fichero2);
}
fclose(fichero);  //cierra fich datos.txt
fclose(fichero2);

getchar();
return 0;
}
#8
Muchísimas gracias, con toda esta información me funciona la meta que tenia como programilla que quiero hacer, no lo he acabado aún pero quiza sigo posteando aqui dudas.

Muchas gracias de verdad, ;D

Pero una ultima cosa..
Dejo aqui el programa que estoy haciendo, es diferente de lo vuestro y me gustaria saber si no tiene ningun error garrafal que me de problemas más adelante.

Reto: Además estoy viendo que para 20k datos me tarda unos segundos, querria saber si hay alguna forma de acortar el tiempo de ejecución pues mis ficheros de datos tienen 200k datos y son muchos ficheros...

Pues dicho esto, os comento:
-El programa recibe un dichero datos.txt que es de una sola columna y que es de este tipo:
   611.1118
   611.6466
   612.8956
   611.8088
   615.3070
   614.8684
   ....ETC... (hasta 20K datos así)
-Este programa recoge este fichero, yo modifico (en este caso con una multiplicación) estos datos (pasandolos a int previamente)  y los multiplico por dos por ejemplo y luego volviendolos a convertir.
-Por ultimo recibo un fichero salida.txt como el siguiente:
1222.223600
1223.293200
1225.791200
1223.617600
1230.614000
1229.736800
1232.356000
...ETC...(Así hasta los 20k datos)


Mi codigo que funciona es este:
Código (cpp) [Seleccionar]

//programa para obtener archivos y modificarlos guardandolos en nuevos archivos.
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <fstream>

using namespace std;

// Funcion que hace algo
char nombre_fichero();

int main(){

   FILE *fichero;
FILE *fichero2;

  char nombre[11] = "datos.txt";
  char nombre2[11]= "salida.txt";
  char leer[1000];

  fichero = fopen( nombre, "r" );  // Fichero datos.txt desde el que leo los datos.
  fichero2= fopen( nombre2, "w");  // Fichero salida.txt donde escribire los datos.

if ( fichero == NULL ) {
     printf( "Fichero '%s' no se pudo abrir.\n", nombre ); /* error */
     return -1;
  }
  if ( fichero2 == NULL ) {
     printf( "Fichero '%s' no se pudo abrir.\n", nombre2 ); /* error */
     return -1;
  }

int i=0,n=20000;
double numero,numerof;

while(i<n) //detecta cuando acaba la informacion del fichero datos.txt
   {                                        
   fgets(leer,1000000,fichero); //lee una linea del fichero , la guarda en leer y pasa a la siguiente linea
numero = atof (leer);// convierto un char en un int
//Aqui hago las modificaciones
numerof =numero*2;
printf("%s %f \n", leer, numerof);
sprintf(leer, "%f\n",numerof);
// Escribo lo anterior al fichero2
   fputs(leer,fichero2);
i++;
   }
fclose(fichero);  //cierra fich datos.txt

getchar();
return 0;
}


Un saludete, a ver quien es el crack que me dice por donde van los tiros para acortarle tiempo! y Gracias!


EDITO: El programa lo necesitamos aqui en el departamento de electronica para hacer transformadas de fourier de señales, multiplicar por dos es una mera prueba para ver la conversión de datos.
#9
Compilo con visual studio 2010!
Me dará muchos problemas?

Voy a seguir intentandolo... a ver si me aclaro! muchas gracias chicos!
Que dificil y arduo es esto de C++, madre mia! Me cuesta mucho comprender la programación.. yo y mis limitaciones :( jeje


Voy a pelearme con ello y os comento, saludos!
#10
uff fgets? vale voy a ello!
lo mezclo por que no me empano mucho..

Entonces que me aclare.. para leer una linea del datos.txt uso el fgets la inserto en salida.txt y luego como me voy a la segunda linea del datos.txt?