1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
#include <stdio.h>
#include <string.h>
enum SL_ID_CODE{ SL_FLOAT,
SL_DOUBLE,
SL_INT,
SL_CHAR,
SL_STRING,
SL_LONG,
SL_UNDEF};
typedef enum SL_ID_CODE SL_ID;
#define SL_CHAR_FLOAT "float"
#define SL_CHAR_DOUBLE "double"
#define SL_CHAR_INT "int"
#define SL_CHAR_CHAR "char"
#define SL_CHAR_STRING "string"
#define SL_CHAR_LONG "long"
/**
* \enum SL_ID_ERROR
* \brief codes retour possibles
*
*/
enum SL_ID_ERROR{SL_OK,
SL_ERROR, /*! < Une erreur est survenue*/
SL_ERROR_FILE_EXIST, /*! < Tentative de creation d'un fichier deja existant*/
SL_ERROR_READ, /*! < Erreur de lecture*/
SL_ERROR_WRITE, /*! < Erreur d'écriture*/
SL_ERROR_OPEN_FILE, /*! < Erreur à l'ouverture du fichier */
SL_ERROR_FILE_NOT_OPENED, /*! < Erreur de flux*/
SL_ERROR_UNKNOWN_DATA, /*! < Type de données non reconnues*/
SL_ERROR_VAR_NOT_FOUND, /*! < Variable non trouvée*/
SL_ERROR_TYPE_MISMATCH, /*! < Types differents*/
SL_ERR0R_SL_NOT_INITIALISED}; /*! < Utilisation d'une liste non initialisée */
typedef enum SL_ID_ERROR SL_CODE;
/**
* \union SL_VarType
* \brief stockage de la valeur lue dans le fichier en fonction de son type
*
*/
typedef union
{
double slDouble;
int slInt;
char slChar;
char *slString;
long slLong;
float slFloat;
} SL_VarType;
typedef struct
{
SL_VarType value;
SL_ID type;
}SL_Var;
typedef struct
{
SL_Var contenu;
FILE *file;
}StringList;
SL_CODE SL_readFile(StringList const *Liste);
/*lecture d'un fichier, fichier supposé ouvert par une autre fonction, de meme pour la fermeture */
SL_CODE SL_readFile(StringList const *Liste)
{
SL_CODE sl_er=SL_OK;
char buffer[1024];
char *res=NULL;
SL_Var element;
if (Liste->file == NULL)
{
sl_er = SL_ERROR_FILE_NOT_OPENED;
return sl_er;
}
rewind(Liste->file);
while(feof(Liste->file)==0)
{
res=fgets(buffer, sizeof buffer, Liste->file);
if (res==NULL)
{
sl_er = SL_ERROR;
break;
}
/*la partie de gestion des données recues avec fgets ont été supprimées volontairement afin d'alleger le code copié */
/*type de donnée */
if (strncmp(buffer,SL_CHAR_INT,sizeof SL_CHAR_INT ) ==0)
{element.type=SL_INT;}
else if (strncmp(buffer, SL_CHAR_DOUBLE ,sizeof SL_CHAR_DOUBLE ) ==0)
{element.type=SL_DOUBLE;}
else if (strncmp(buffer, SL_CHAR_FLOAT ,sizeof SL_CHAR_FLOAT ) ==0)
{element.type=SL_FLOAT;}
else if (strncmp(buffer, SL_CHAR_LONG ,sizeof SL_CHAR_LONG ) ==0)
{element.type=SL_LONG;}
else if (strncmp(buffer, SL_CHAR_CHAR ,sizeof SL_CHAR_CHAR ) ==0)
{element.type=SL_CHAR;}
else if (strncmp(buffer, SL_CHAR_STRING ,sizeof SL_CHAR_STRING ) ==0)
{element.type=SL_STRING;}
else
{
sl_er = SL_ERROR_UNKNOWN_DATA;
}
}
return sl_er;
} |
Partager