Civfr.com : Civilization - Ligue Francophone Civfr.com Classement forums de discussion Inscription R?gles de la ligueQuestions les plus fr?quemment pos?es Skin num?ro 2 Civfr.com Questions les plus fr?quemment pos?es Outils du site
Dernier shout - Écrit par colonel81 - Lundi, 02 Octobre 2017 10:34 - [Le style SMS est interdit dans la shoutbox]
Je vous oublie pas mais le week end fut assez
  Civfr.com -> Remplacer les accents dans les fichiers xml
m?moriser la page dans un cookie


  Reply to this topicStart new topicStart Poll

> Remplacer les accents dans les fichiers xml, exe
M07  Hors ligne
Ecrit le : Jeudi 02 Juin 2011 à 15h59
Quote Post


Le Fort



****

Groupe : Membres
Messages : 127
Membre n° : 10 639
Inscrit le : 03 Avril 2009






Voilà un code qui permet de remplacer les accents dans les fichiers de votre choix.
Ce code a été fait à la va vite mais ça marche.
Je ne pense pas que ça soit très compliqué à comprendre pour ceux qui ont fait un peu d'info.

Compiler ce code et exécuter le dans le dossier où se trouve vos textes et les accents seront remplacés :lol: .

Ah oui pour ceux qui ne savent pas à quoi ça sert je vous explique brièvement.

Dans les fichiers xml les accents ne sont pas autorisés. Nous devont donc les écrire différemment. Par exemple le "é" doit s'écrire "& #233;".
Quand on écrit des textes en français, on n'aime pas trop s’embêter à devoir remplacer tous les accents dans nos textes (comme si on avait que ça à faire :lol: )
.
Juste pour info, ce texte comporte 19 accents donc bon imaginez sur les milliers de lignes de codes dans ces fichiers xml.

CODE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define TAILLE_MAX 40010

int replaceAccent(char* chaine, char cAccent, char* accentXML);
int main()
{
int i, iLong;    
FILE* fichier = NULL;
FILE* fichier2 = NULL;
int caractereActuel = 0;
char chaine[TAILLE_MAX-10] = "";
char listeNom[8][50];

strcpy(listeNom[0], "CIV4GameText_Colonization.xml");
strcpy(listeNom[1], "CIV4GameText_Colonization_DiplomacyText.xml");
strcpy(listeNom[2], "CIV4GameText_Colonization_Objects.xml");
strcpy(listeNom[3], "CIV4GameText_Colonization_Pedia.xml");
strcpy(listeNom[4], "CIV4GameText_Colonization_Strategy.xml");
strcpy(listeNom[5], "CIV4GameText_DiploTexts.xml");
strcpy(listeNom[6], "CIV4GameTextInfos_Objects_Original.xml");
strcpy(listeNom[7], "CIV4GameTextInfos_Original.xml");


for(i = 0; i<8; i++)
{
 fichier = fopen(listeNom[i], "r");
 if(fichier != NULL)
 {
  fichier2 = fopen("test.xml", "w+");  
  rewind(fichier2);

  while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
  {
   replaceAccent(chaine, 'é', "é");
   replaceAccent(chaine, 'è', "è");
   replaceAccent(chaine, 'ê', "ê");
   replaceAccent(chaine, 'à', "à");
   replaceAccent(chaine, 'ô', "ô");
   replaceAccent(chaine, 'ç', "ç");
   replaceAccent(chaine, 'û', "û");
   fputs(chaine, fichier2);
   
  }
  fclose(fichier);
  fclose(fichier2);
 
  remove(listeNom[i]);
  rename("test.xml", listeNom[i]);
 
 }
}
//scanf("%d", &i);
   return 0;
}
int replaceAccent(char* chaine, char cAccent, char* accentXML)
{
   char caractereActuel = 0;
char copie[TAILLE_MAX] = {0};
int iPosition = 0, iTemp, i, iTailleAccent = strlen(accentXML), nbChange = 0;
int iValue = 0;
strcpy(copie, chaine); // On copie "chaine" dans "copie"

   do
   {
       caractereActuel = chaine[iPosition];
 if(cAccent == caractereActuel)
 {
  for(i = 0; i < iTailleAccent; i++)
  {
   chaine[iPosition+i] = accentXML[i];
  }
  iTemp = iPosition;
  do
  {
   caractereActuel = copie[iTemp+1-((iTailleAccent-1)*nbChange)];
   chaine[iTemp+iTailleAccent] = caractereActuel;
   iTemp++;
  }
  while(caractereActuel != '\0');
  chaine[iTemp+iTailleAccent] = caractereActuel;
  caractereActuel = chaine[iPosition];
  nbChange++;
  iValue = 1;
 }
 iPosition++;
   }
   while(caractereActuel != '\0');

return iValue;
}



--------------------
Sauvez les bambous, mangez un panda!

Mod pour Colonization IV - Dawn of a New Era


user posted image
PMEmail Poster
Top
Robert Surcouf  Hors ligne
  Ecrit le : Vendredi 03 Juin 2011 à 7h37
Quote Post


L'Astucieux



*****

Groupe : Membres
Messages : 218
Membre n° : 12 176
Inscrit le : 13 Février 2011


-



Ah pas mal du tout !

Si je comprends bien, ce programme cherche les accents dans les 8 fichiers Xml que tu mets dans la liste et les remplace pas le code approprié !
Par contre, je n'ai pas trouvé le fichier .exe. Tu as dû oublier de le joindre...
De plus tu interdis implicitement certains accents comme ë (noël). Par défaut il faudrait peut-être le convertir non?

Quoi qu'il arrive ta solution est bien meilleure que la mienne. J'avais crée une fonction python qui faisait plus ou moins la même chose sur une chaine de caractère. Je devais donc les traiter une par une...

CODE
def conversionAccents(texte):
i=0
s=""
while i <len(texte):
 if ord(texte[i]) <123:
  s+=texte[i]
 else:
  s+="&#"+str(ord(texte[i]))+";"
 i=i+1
return s

Sans parler du fait qu'il faut avoir installé python auparavant, alors qu'en C, l'exécutable est autonome! Par contre le point fort, c'est que Python convertit très simplement les accents (seulement 10 lignes de code)!


--------------------
Religion et Revolution
Forum (en anglais):Civfanatics Forum RaR
Téléchargement:RaR version 1.2
PMEmail Poster
Top
0 utilisateur(s) sur ce sujet (0 invités et 0 utilisateurs anonymes)
0 membres :

Topic Options Reply to this topicStart new topicStart Poll

 

©2004 Skin IBF www.civfr.com par Lagalette

 
 

               Ce site est hébergé par IMINGO

MKPortal M1.1 Rc1 ©2003-2005 All rights reserved
Page affichée en 0.02333 secondes avec 4 requêtes