All pastes #636153 Raw Edit

Miscellany

public text v1 · immutable
#636153 ·published 2007-07-27 17:40 UTC
rendered paste body
#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);
     }
//---------------------------------------------------------------------------------------------------------------------------