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
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
int flagtrace=0;
#include "config.c"
#include "signatur.c"
#include "structure.cpp"
#define MAXALIAS 512
struct salias {
char *de;
char *vers;
} listeAlias;
int main(int argc, char *argv[]){
// utilisés pour la table d'alias
FILE *falias;
char ligne[512]; //stocke la ligne en cours de lecture
char *nomFicAlias; // Nom du fichier contenant les alias
char *p, *separChampAlias, *separVal, *destAlias;
char *cleanSrc, *cleanDst; // utilisé pour nettoyer les noms
int i,j,l,lgclean;
int nbligneAlias;
separChampAlias="="; // Séparateur de=>vers dans le fichier alias
separVal=","; // Séparateur de valeurs dans fichier alias.
cleanSrc="ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöùúûüýÿ"; // utile pour supprimer les accents dans les noms de destinations.
cleanDst="AAAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy"; // les caractères du dessus seront remplacés par ceci.
lgclean=strlen(cleanSrc);
for (i=1;i<argc;i++) {
p=argv[i];
if (strncmp(p,"alias=",6)==0)
nomFicAlias=p+6;
}
salias listeAlias[MAXALIAS];
nbligneAlias=0;
lgclean=strlen(cleanSrc);
falias=fopen(nomFicAlias,"r");
while (fgets(ligne,sizeof(ligne),falias)) {
if (nbligneAlias>=MAXALIAS){
tracemsg(ERREUR,"Nombre d'alias trop important. Valeur max=%i.\n",MAXALIAS);
return(1);
}
i=strlen(ligne)-1; ligne[i]=0; //suppression du caracatére de fin de ligne
/* On sépare nom de destination et la liste de sources
A ce moment, on se retrouve avec d'une part
le nom de destination,
et d'autre part, la liste des noms(séparés par une virgule) qui prendront cette valeurs
*/
p=strtok(ligne, separChampAlias);
destAlias=p; //On stocke temporairement le nom de destination car il peut etre utilisé plusieur fois . A mon avis, c'est pas la bonne facon de faire.
// Petit nettoyage du nom de destination. prénom devient prenom
i=strlen(destAlias);
for (j=0;j<i;j++){
for (l=0;l<lgclean; l++){
if (destAlias[j]==cleanSrc[l])
destAlias[j]=cleanDst[l];
}
}
/* et on prend toutes les valeurs source possibles qui seront stocké dans le membre listeAlias[].de
on prodruit un couple de et vers pour chaque valeur source. Soit prenom=pren,prenomType donneront 2 éléments
*/
while (p!=NULL){
p=strtok(NULL, separVal);
if (p!=NULL){
listeAlias[nbligneAlias].vers= destAlias; // ceci doit etre faux
listeAlias[nbligneAlias].de=p; //ceci aussi
tracemsg(TRACE,"le champ '%s' devient '%s'.\n",listeAlias[nbligneAlias].de,listeAlias[nbligneAlias].vers );
nbligneAlias++;
}
}
}
for (i=0; i<nbligneAlias;i++){
tracemsg(TRACE,"%s = %s\n ",listeAlias[i].de,listeAlias[i].vers); // ici c'est pas beau comme resultat :(
}
} |
Partager