Un programme bizarre

Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
- - Dernière réponse : cs_Chouchou182
Messages postés
252
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
25 avril 2011
- 26 juin 2010 à 18:09
bonjour,
ce programme permet d'éliminer quelques caractères d'un fichier texte et metle résultat dans un autre fichier texte; il est exécutable mais il ya certains caractères qui n'ont pas été éliminés, je ne sais pas pourquoi, c'est vraiment bizarre:
#include <string.h>
#include <stdio.h>
#include <ctype.h>
int main(void)
{
  FILE *stream, *stream1;
  int ch ;

  stream = fopen("in.txt", "r+");
  stream1 = fopen("out.txt", "w+");

  do
  {
ch = fgetc(stream);
if (ch == EOF)
  break;

if (ch != '.' && ch != ':' && ch != '"' && ch != '/' && ch != ')' && ch != '(' && ch != '«' && ch != '»' && ch != ','&& ch != '}' && ch != '{' && ch != '-')
  fprintf(stream1, "%c", ch);
  } while (ch != EOF);

  fclose(stream);
  fclose(stream1);

  return 0;
  }

le fichier in:
- This is a "test"...  

«yes, it is»      


et le fichier out (résultat) serait:
- This is a test  

«yes it is»     

donc les caractères - « » n'ont pas été éliminé
vous pouvez déja l'essayer;
svp aidez moi à savoir la raison.
et merci beaucoup.
Afficher la suite 

5 réponses

Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
0
Merci
"»" est un caractère étendu. C'est à dire qu'il ne tient pas sur un mais deux "char" !
Tu ne peux donc pas le comparer avec char. Il te faut utiliser un char en UTF-8 (caractère étendue, wide char en anglais).
Tu peux le trouver via wchar_t, qui est inclus dans wchar.h.
Voir toutes les fonctions associées: http://opengroup.org/onlinepubs/007908799/xsh/wchar.h.html

Ou plus simplement, tu élimines tous les caractères qui ne sont pas dans la table ASCII, en retirant tous ce qui n'est pas imprimable (à part les espaces):

#include <string.h>
#include <stdio.h>
#include <ctype.h>

int main(void)
{
  FILE *stream, *stream1;
  int ch;

  stream = fopen("in.txt", "r");
  stream1 = fopen("out.txt", "w");

  do
  {
    ch = fgetc(stream);
    if (ch == EOF)
      break;

    if ((isprint(ch) || isspace(ch)) && ch != '-' &&
ch != '.' && ch != ':' && ch != '"' &&
ch != '/' && ch != ')' && ch != '(' &&
ch != ',' && ch != '}' && ch != '{')
    {
      fprintf(stream1, "%c", ch);
    }
  } while (ch != EOF);

  fclose(stream);
  fclose(stream1);

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Commenter la réponse de cptpingu
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
0
Merci
c'est une bonne solution pour les textes français ou anglais peut être, mais j'ai des textes en arabe, donc si j'exécute ce programme, il ne m'affiche pratiquement rien.
Commenter la réponse de cs_mervat
Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
0
Merci
Alors tu dois te tourner vers la première solution, les wchar. Regarde les liens donnés.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Commenter la réponse de cptpingu
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
0
Merci
oui effectivement je vais voir ça, merci
Commenter la réponse de cs_mervat
Messages postés
252
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
25 avril 2011
0
Merci
Salut,

Si ton but est d’écrire un programme en C, suis les conseils de CptPingu et ne tiens pas compte de la suite.

Si ton but est de nettoyer tes fichiers, penche-toi vers sed ou similaire:

sed -e 's/[«».:\/(),{}-]//g' out

Bonne prog,
Commenter la réponse de cs_Chouchou182