Duda al escribir ficheros

Iniciado por Feynmann, 23 Marzo 2014, 16:03 PM

0 Miembros y 1 Visitante están viendo este tema.

amchacon

Me refiero a copiar todas las columnas y pegarlas en un txt.

A mano se puede hacer (columna por columna), lo que no sé si excel da alguna opción para exportarlo todo en un txt (o similar).
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Feynmann

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);
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

¿Delimitador? ¿Te refieres a un espacio?

En ese caso usaría el fscanf. Se usa igual que el scanf:

Código (cpp) [Seleccionar]

while (!feof(fichero))
{
    double numero;

    for (int i = 0; i < 10;i++)
    {
       fscanf(fichero,"%f",&numero);
       // numero * 2

       numero *= 2;

       fprintf(fichero,"%f ",numero);
    }

    fprintf(fichero,"\n"); // salto de linea
}


Sí he usado el feof, pero esque la solución sin él quizás fuese menos intuitiva:
Código (cpp) [Seleccionar]

int bandera = 1;
while (bandera)
{
    double num;

    for (int i = 0; i < 10;i++)
    {
       bandera = fscanf(fichero,"%f",&numero);
       // numero * 2

       numero *= 2;

       fprintf(fichero,"%f ",numero);
    }

    fprintf(fichero,"\n"); // salto de linea
}
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Feynmann

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;
}
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!

eferion

tienes que acostumbrarte a mirar un poco por la web... este tipo de preguntas se suelen resolver mirando la documentación sobre el uso de la función y sus parámetros:









FormatoSignificadoEjemplo
%fDecimal floating point, lowercase392.65
%FDecimal floating point, uppercase392.65
%eScientific notation (mantissa/exponent), lowercase3.9265e+2
%EScientific notation (mantissa/exponent), uppercase3.9265E+2
%gUse the shortest representation: %e or %f392.65
%GUse the shortest representation: %E or %F392.65

Fuente: http://www.cplusplus.com/reference/cstdio/printf/