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