Ver Mensaje Individual
  #7 (permalink)  
Antiguo 10/11/2010, 05:24
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: Crear señal u onda a partir de la lectura de un txt

Lo que quieres es una gráfica X-Y. Ello supone que necesitas dos arrays numéricos del mismo tamaño, uno para el eje X y otro para el eje Y. Para el eje Y serían los datos que generas de manera aleatoria en tu programa (o los que leerás del archivo de datos). Para el eje X puedes tenerlo directamente, también mediante una lista de valores que ya tengas, o bien implícitamente, que es (como lo estás haciendo) graficando cada valor con su índice.

Si lo que quieres es, como dices, obtener después información sobre espectros, calcular FFTs, etc., desde luego que tendrás que meter esos datos en un array. Ello supone que deberías conocer el número de datos a leer. Si va a ser un dato conocido antes de escribir el programa, podrás dimensionar directamente los arrays. Si es un dato a introducir con el programa ya en ejecución, tendrás que utilizar asignación dinámica de memoria. En principio, voy a suponer que conoces el número de puntos de antemano (o que vas a dimensionar a un número de puntos igual o mayor al máximo que esperas):

Código C:
Ver original
  1. #define NUM_PUNTOS  1000    // Espero un máximo de 1000 puntos
  2. int leer_fichero(double *);
  3.  
  4. double y[NUM_PUNTOS];
  5.  
  6. int main(void)
  7. {
  8.  int datos_leidos;
  9.  
  10.  datos_leidos = leer_fichero(y);
  11.  // Aquí grafico los datos leídos
  12.  RChart1->MoveTo (0,0);
  13.  for (i=0; i<datos_leidos; i++)
  14.  {
  15.   RChart1->DrawTo (i,y);
  16.  }
  17. }
  18.  
  19. int lee_fichero(double *y)
  20. {
  21.  FILE *fichDatos;
  22.  int i=0;
  23.  double x;
  24.  
  25.  fichDatos = fopen("miFichero.txt", "r");
  26.  while (!feof(fichDatos))
  27.  {
  28.   fscanf(fichDatos, "%lf", &x);
  29.   if (!feof(fichDatos))
  30.   {
  31.    y[i] = x;
  32.    i++;
  33.   }
  34.  }
  35.  fclose(fichDatos);
  36.  return i;
  37. }
La forma de leer el fichero dependerá de su estructura, estoy suponiendo una simple columna de números. En la función lee_fichero se vuelve a comprobar el final de fichero porque al leer el último dato, aún no se ha leído la marca de final de fichero. Esta marca se lee al intentar leer después del último dato, y por ello se hacen dos comprobaciones: la de control del bucle y la del interior del bucle, para evitar el empleo de datos incorrectos si ya se está al final. También devuelve el número de puntos que ha leído, para utilizarlo en lugar del máximo declarado al principio.

Por supuesto, falta todo lo relativo a la correcta inicialización del sistema gráfico que vayas a utilizar.

De esta manera, tendrías los datos de tu fichero cargados en un array, listo para graficar, procesar, o lo que sea. Si tienes más dudas, ya sabes dónde estamos.