/* programme de "traitement" de fichier texte : remplacement de chaînes */ /* P. TRAU, Université Louis Pasteur Strasbourg,*/ #include <string.h> #include <stdio.h> /* version PC (txt windows) -> HTML */ char *titre="PC -> HTML (&, <, > et return optionnels)"; typedef char *chaine; chaine e[]={ /* l'ordre a une importance !!! en dernier ceux qui peuvent être un résultat des autres */ "â", /*â */ "ä", /*ä */ "à", /*à */ "ç", /*ç */ "é", /*é */ "ê", /*ê */ "ë", /*ë */ "è", /*è */ "î", /*î */ "ï", /*ï */ "ô", /*ô */ "ö", /*ö */ "2", /*<sup>2</sup> */ "û", /*û */ "ü", /*ü */ "ù", /*ù */ "\n","<",">","&" }; /* pour DOS->HTML : {"â","ä","à","ç","é","ê","ë","è","î","ï","ô","ö","2","û","ü","ù","&","<",">"}; */ int NB=16; /*nb de chaines dans e (et aussi dans s) (sans compter &,< et > et \n)*/ chaine s[]={ "â", "ä", "à", "ç", "é", "ê", "ë", "è", "î", "ï", "ô", "ö", "<sup>2</sup>", "û", "ü", "ù", "<BR>","<",">","&" }; /* newline <br> */ /* paragraph <P> */ int debut_egal(char *ch,char *sch) /* répond si sch est exactement le début de ch */ /* utilisé par la fonction "recherche" */ { while (*sch && *ch) { if (*sch!=*ch) return(0); else {ch++;sch++;} } return(!(*sch)); } char *recherche(char *ch,char *sch) /* rend la première position de sch dans ch, NULL si pas trouvé */ { while (*ch) { if (debut_egal(ch,sch)) return(ch); ch++; } return(NULL); } void enleve(char*deb,int nb) /* enleve les nb premiers caractères d'une chaine */ { do *deb=*(deb+nb); while(*(deb++)); } char * insere(char * ch, char * sch) /* insère sch au début de ch, rend la nouvelle position de l'ancien contenu de ch */ { int i; char buf[10000]; for(i=0;ch[i];i++)buf[i]=ch[i]; buf[i]=0; for(i=0;sch[i];i++)ch[i]=sch[i]; sch=ch+i; /*sch utilisé pour stocker le nouveau début du texte de ch */ for(i=0;buf[i];i++)sch[i]=buf[i]; sch[i]=0; return(sch); } void traite(char *buf) { char *deb; int i; for(i=NB-1;i>=0;i--) /* pour chaque mot à trouver */ { deb=buf; do /* rechercher Toutes les occurences dals la ligne */ { deb=recherche(deb,e[i]); if(deb) /* si trouvé */ { /* supprimer le mot */ enleve(deb,strlen(e[i])); /* remettre l'autre mot et placer deb en fin du nouveau mot */ deb=insere(deb,s[i]); } } while(deb); } } void main(void) { FILE *E,*S; char ne[40]; char ns[40]; char oui; char buf[10000]; /* ouvre fichiers */ printf("ce programme convertit des fichiers : %s\n",titre); printf("fichier source ? "); gets(ne); printf("ficher résultat ? "); gets(ns); printf("changer aussi les &,<,> et return ? (N/o) ?"); oui=getche();puts(" "); if(oui=='o'||oui=='O')NB+=4; E = fopen(ne, "rt"); /* lecture seule, texte */ S = fopen(ns, "wt+");/* écriture, mise à jour, texte */ while(fgets(buf,sizeof(buf),E)) /* répond NULL si erreur ou fin de fic */ /* le \n est également dans la buf, suivi d'un \0 */ { traite(buf); fprintf(S,"%s\n",buf); } fclose(E); fclose(S); }