#include "lectura.h"
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
//funcion para ver si existe el fichero:
//la función "Existe" tiene de parámetro un puntero a un carácter path
int Existe(char * path)
{
FILE *fichero; // Declaro un puntero a un fichero
fichero = fopen(path,"r");
if (fichero == NULL)
{
printf("No existe el fichero\n");
return 0;
}
else
{
printf("\n");
printf("\n");
return 1;
}
}
//---------------------------------------------------------------------------------------------------------
//Esta funcion nos devuelve la posición en la cadena:
int posicion(char *cadena,char caracter,int posi)
{
char *p; //desplazarnos por la cadena
p = cadena + posi; //posicion inicial desde la que empieza a buscar
if((p = strchr(p,caracter))!=NULL) //strchr permite buscar caracteres enc adenas,
//localiza la pimera ocurrencia de un caracter 'caracter' en un cadena
return p - cadena; // me devuelve la posicion de la cadena
else
return -1; // si no lo encuentra me devuelve -1
}
// Si p es distinto de cero
// donde p es la posicion de un caracter, es decir siempre, porque es una cadena de caracteres.
//---------------------------------------------------------------------------------------------------------
//Esta función va leyendo por fila
int leerfichero(char *path,variable *datos) // Nos lee el fichero y nos devulve el nº de datos por variable
{
// FIle es una estructura de control de archivo para flujos
FILE * fichero; //Puntero "fichero" a un archivo
char cadena [200];
int i,pinicial,parentesis,k;
//Se abre un fichero de texto para lectura
fichero = fopen(path, "r");
i=0;
//La funcion feof comprueba el indicador de final de fichero para el stream
// retorna un valor distinto a cero si el indicador de final de fichero está activado
while (feof (fichero) == 0)
{
// FGETS lee como máximo uno menos que el número de caracteres indicados (200)
// desde stream, apuntado por "fichero" el array apuntado por "cadena"
fgets (cadena,200,fichero);
//Ahora leemos dentro de cada cadena los distintos valores de las diferentes variables
//Dentro de este 'if' leemos las primeras 5 lineas
if (i<5)
{
//leemos el nombre
//ser retorna el numero de caracteres escritos en el array, sin contar el nulo del final
sprintf(datos[i].nombre,"%s",subcadena(cadena,0,posicion(cadena,'\t',0)));
parentesis = posicion(cadena,'(',0);
datos[i].min = atof(subcadena(cadena,parentesis+1,posicion(cadena,' ',parentesis)));
//Atof convierte la porción inicial de cadena apuntada, en una representación double
// Estamos cogiendo la subcadena, de la cadena,donde la posi es par+1 y la posf es la posición del caracter espacio //del caracter espacio, es decir leemos el minimo
datos[i].max = atof(subcadena(cadena,posicion(cadena,'a',parentesis+1)+2,posicion(cadena,')',parentesis+1)));
}
//Dentro de este 'if' leemos todos los valores de las diferentes variables
if (i>5)
{
pinicial = 0; //inicializamos la posicion inicial
//desde donde partimos para leer
//cada dato de las diferentes variables
for (k=0;k<4;k++)
{
datos[k].valores[i-6] = atof(subcadena(cadena,pinicial,posicion(cadena,'\t',pinicial)));
pinicial = posicion(cadena,'\t',pinicial)+1;
}
datos[4].valores[i-6] = atof(subcadena(cadena,pinicial,strlen(cadena)));
}
i++;
}
return (i-6);
}
//--------------------------------------------------------------------------------------------------------------------------
//Funcion subcadena:
//me va dando la subcadena
char *subcadena(char *cadena,int posi,int posf)
{
int i,l;
//Con puntero sería:
//char *resultado;
//resultado =(char*)malloc(sizeof(char)*(posf-posi+1)); // Dejamos un espacio igual al rango mas 1 para el puntero resultado
char resultado[100];
for (i=0;i<(posf-posi);i++)
{
resultado[i] = cadena[posi+i];
}
resultado[i]='\0';// indicas final de la cadena
return resultado;
}
//-----------------------------------------------------------------------------------------------------------------------------
void ordena(int N,variable *datos)
{
double temp;
int i,j,k;
for (k=0;k<5;k++)
{
for (i=0;i<N;i++)
{
for (j=i;j<N;j++)
{
if (datos[k].valores[j]<datos[k].valores[i])
{
temp = datos[k].valores[i];
datos[k].valores[i]=datos[k].valores[j];
datos[k].valores[j]=temp;
}
}
}
}
}
void pausa()
{
int c;
printf("pulse una tecla para continuar");
scanf("%d",&c);
}
//---------------------------------------------------------------------------------------------------------------------------