elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Meter en una tabla datos desde un fichero (en funcion)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Meter en una tabla datos desde un fichero (en funcion)  (Leído 3,705 veces)
muymuyperdido

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Meter en una tabla datos desde un fichero (en funcion)
« en: 25 Diciembre 2012, 20:43 pm »

Buenas, mi problema está en introducir los datos de un fichero en una tabla
El fichero es del estilo
3
1 2 3
4 5 6
7 8 9
De forma que el 3 es el numero de columnas, que es lo primero que leemos y después he de leer los elementos 1 2 3 4 5 6 7 8 9 introduciendolos en una matriz de 3x3 (el programa no sabe cuantas filas hay)

(Está hecho en una función)

Código
  1. void fic1tabla (char dat1[N],float tab1[N][N])
  2. {
  3.    int m,i,j;
  4. FILE * ft;
  5.    ft= fopen(dat1[N],"r");
  6.    if(ft==NULL)
  7.    {
  8.        printf("ERROR");
  9.    }
  10.    else
  11.    {
  12.        fscanf(ft,"%d",&m);
  13.        while(!feof(ft))
  14.        {
  15.            for(i=0; i<N; i++)
  16.            {
  17.                for(j=0; j<m; j++)
  18.                {
  19.                    fscanf(ft,"%f",tab1[i][j]);
  20.                }
  21.            }
  22.            fclose(ft);
  23.        }
  24.  
  25.    }
  26.  
  27. }


« Última modificación: 25 Diciembre 2012, 20:50 pm por muymuyperdido » En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Meter en una tabla datos desde un fichero (en funcion)
« Respuesta #1 en: 26 Diciembre 2012, 05:52 am »

Hola! en el fopen debes pasar dat1 y no dat1[N]. El bucle while me parece que esta demas; si usas i<N siempre va a iterar N veces(lo cual esta mal)... Lo que podes hacer es usar el retorno de fscanf: http://c.conclase.net/librerias/?ansifun=fscanf
De esa manera podes utilizar como corte de los for el retorno de fscanf

Otra cosa te falto un "&" delante de tab1:
Código
  1. fscanf(ft,"%f",&tab1[i][j]);


Saludos

PD: trata de escribir los errores q te marca el compilador


En línea

Ahorrate una pregunta, lee el man
muymuyperdido

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: Meter en una tabla datos desde un fichero (en funcion)
« Respuesta #2 en: 26 Diciembre 2012, 15:36 pm »

Entonces como seria el codigo para volcar un archivo en una tabla? :|
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Meter en una tabla datos desde un fichero (en funcion)
« Respuesta #3 en: 26 Diciembre 2012, 18:19 pm »

* Si la apertura del archivo falla no generes el mensaje de error manualmente, deja que la función perror se encargue de ello. Por ejemplo:
Código
  1. if ((ft = fopen(dat1, "r")) == NULL){
  2.   perror(dat1);
  3.   /* Manejo de error */
  4. }
Por cierto dales nombres descriptivos a las variables, en lugar de "ft" puedes utilizar, por ejemplo, "nom_archivo".

* Debes verificar que el numero de columnas y filas leído del archivo (primer valor) sea igual o menor que la capacidad del array. Eso lo haces con una sentencia condicional "if".

* No utilices la función feof para controlar un bucle, en su lugar utilizas dos bucles para leer cada uno de los valores de la matriz. El limite en ambos bucles debe ser "m".

* Como ya te comentaron debes utilizar el operador "dirección de" (el '&') en la llamada a función o bien aritmética de punteros:
Código
  1. /* Con el operador "direccion de" */
  2. fscanf(ft, "%f", &tab1[i][j]);
  3.  
  4. /* Con aritmetica de punteros */
  5. fscanf(ft, "%f", tab1[i] + j);

Entonces como seria el codigo para volcar un archivo en una tabla?
Si juntas todo lo dicho en el tema mas un poco de iniciativa lo resuelves en poco tiempo.

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
muymuyperdido

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: Meter en una tabla datos desde un fichero (en funcion)
« Respuesta #4 en: 27 Diciembre 2012, 22:19 pm »

El problema es que yo conozco el numero de columnas pero no el de filas, entonces no sé como plantearlo.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Meter en una tabla datos desde un fichero (en funcion)
« Respuesta #5 en: 28 Diciembre 2012, 08:00 am »

Nose si leiste lo que te dije del retorno de fscanf, pero en fin mas o menos seria asi:

Código
  1. while(fscanf(fp,"%d",&matriz[i][j])==1) {
  2.   if(j++==(columnas-1)){
  3.     i++;
  4.     j=0;
  5.   }
  6. }
  7. filas=i;

Creo q deberia andar. Saludos
En línea

Ahorrate una pregunta, lee el man
muymuyperdido

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: Meter en una tabla datos desde un fichero (en funcion)
« Respuesta #6 en: 28 Diciembre 2012, 12:47 pm »

Gracias! Acabé planteandolo similar:

Código
  1. fscanf(fe,"%d",&m);
  2.    i=1;
  3.    j=1;
  4.    while(!feof(fe))
  5.    {
  6.        fscanf(fe,"%d",&m);
  7.        while(!feof(fe))
  8.        {
  9.            fscanf(fe,"%f", &tab2[i][j]);
  10.            j++;
  11.            if (j==m)
  12.            {
  13.                j=1;
  14.                i++;
  15.            }
Pero aun no sé si funciona, sino me valdré del tuyo, gracias en serio!!!!
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Meter en una tabla datos desde un fichero (en funcion)
« Respuesta #7 en: 29 Diciembre 2012, 02:21 am »

Gracias! Acabé planteandolo similar [...]

Pero aun no sé si funciona
No funciona por varios errores como leer dos veces el numero de columnas, utilizar feof para controlar los bucles y utilizar 1 como primer indice de un array.

Una forma correcta es:
Código
  1. i = 0;
  2. j = 0;
  3. if (fscanf(fe, "%d", &m) == 1)
  4.   while (fscanf(fe, "%f", tab2[i] + j) == 1)
  5.      if (++j == m){
  6.         j = 0;
  7.         i++;
  8.      }

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como meter datos desde vb a excel
Programación Visual Basic
Ragde88 1 3,131 Último mensaje 11 Noviembre 2005, 09:04 am
por Slasher-K
[Solucionado] Validar Datos de una Tabla (SQL) desde Windows Forms (VB.net)
.NET (C#, VB.NET, ASP)
Ninj4 5 16,267 Último mensaje 16 Agosto 2013, 22:31 pm
por ElCampesino
Introducir datos de un fichero en una tabla
Programación C/C++
HIPOCROFILO 4 3,407 Último mensaje 16 Octubre 2010, 15:29 pm
por do-while
Leer datos de un cierto formato desde un fichero
Programación C/C++
javiepe 9 3,623 Último mensaje 13 Marzo 2014, 18:58 pm
por Yoel Alejandro
meter datos en una tabla a partir de texto con PHP « 1 2 »
Scripting
santi810 10 5,837 Último mensaje 8 Junio 2014, 20:20 pm
por daryo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines