Un programme bizarre

Signaler
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
-
Messages postés
252
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
25 avril 2011
-
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.

5 réponses

Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
"»" 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]
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015

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.
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
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]
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015

oui effectivement je vais voir ça, merci
Messages postés
252
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
25 avril 2011

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,