IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Lire un fichier UTF-8 line par line en C


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Par défaut Lire un fichier UTF-8 line par line en C
    Bonsoir,

    Je veux lire un fichier texte ligne par ligne crée par Notepad code en UTF-8, je veux pas afficher les strings, je veux juste lire est compare.

    Ce code lire un fichier texte ANSI ligne par ligne est comparer.

    Ce que je veux
    • Lire test_ansi.txt ligne par ligne
    • Si ligne = "b" afficher "YES!"
    • Sinon afficher "NO!"


    read_ansi_line_by_line.c


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    
    int main()
    {
        char *inname = "test_ansi.txt";
        FILE *infile;
        char line_buffer[BUFSIZ]; /* BUFSIZ is defined if you include stdio.h */
        char line_number;
    
        infile = fopen(inname, "r");
        if (!infile) {
            printf("\nfile '%s' not found\n", inname);
            return 0;
        }
        printf("\n%s\n\n", inname);
    
        line_number = 0;
        while (fgets(line_buffer, sizeof(line_buffer), infile)) {
            ++line_number;
            /* note that the newline is in the buffer */
            if (strcmp("b\n", line_buffer) == 0 ){
                printf("%d: YES!\n", line_number);
            }else{
                printf("%d: NO!\n", line_number,line_buffer);
            }
        }
        printf("\n\nTotal: %d\n", line_number);
        return 0;
    }
    test_ansi.txt

    Compiler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -o read_ansi_line_by_line read_ansi_line_by_line.c
    Output
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    test_ansi.txt
    
    1: NO!
    2: YES!
    3: NO!
    
    
    Total: 3
    Maintenant j'ai besoin de lire un fichier UTF-8 crée par Notepad, âpre plus que 6 mois de recherche sur l'internet, les forums English et Français et Arabe, j'ai trouver tous les réponse de mes question ici (c'est moi FREESAIF), bravo a tous les professionnels de developpez.com

    Mais jusqu'à aujourd'hui j'ai jamais vu un programme qui bien traiter les informations UTF-8 écrit en C (C99)!, je sais pas exactement pour quoi mais je crois que le Standard C ne support pas Unicode en général alors... un peut difficile!

    LE PROBLÈME!

    Pour lire fichier UTF-8, j'ai besoin de lire fichier en mode binaire!

    Mais comment lire un fichier UTF-8 en mode binaire ?! avec quelle fonctions ?
    Sil-vous-plaît quelqu'un connais une méthode plus simple ?

    Programme écrit en C (C99) qui lire un fichier texte UTF-8 ligne par ligne est qui compare les caractères.

    Merci

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Attends, c'est en UTF-8 ou en UTF-16 (voire UTF-32) ?
    Car lire des wchar_t avec fread(), ça ne ressemble pas à de l'UTF-8...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Par défaut
    Bonsoir,

    Oui monsieur Médinoc, tu as raison, j'ai changer titre!, est j'ai chercher sur l'internet pour "UTF-8" sans "Unicode", il y a des solution valide dans MSDN mais ça marche juste pour compilateur du Microsoft!, est je peux pas le utilise avec GCC, mais dans d'autre place j'ai trouver que la solution est de lire fichier UTF-8 en mode binaire.

    Mais comment lire un fichier UTF-8 en mode binaire ?! avec quelle fonctions ?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Si c'est de l'UTF-8, plutôt que le lire en mode binaire, je te conseille de le lire en mode texte et convertir toi-même les caractères lus en wchar_t, grâce aux algos de décodage UTF-8 que tu pourras trouver sur le net.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Par défaut
    Le lire en mode texte, ça veux dire la même exemple que j'ai crée en version WCHAR ?

    Si oui, voila une version qui lire fichier utf-8 en mode texte

    read_utf8_line_by_line.c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #define UNICODE
    #ifdef UNICODE
    #define _UNICODE
    #else
    #define _MBCS
    #endif
    
    #include <stdio.h>
    #include <wchar.h>
    
    int main()
    {
        wchar_t *inname = L"test_utf8.txt";
        FILE *infile;
        wchar_t line_buffer[BUFSIZ];
        int line_number;
    
        infile = _wfopen(inname, L"r,ccs=UTF-8");
        if (!infile) {
            wprintf(L"\nfile '%s' not found.\n", inname);
            return 0;
        }
        wprintf(L"\nFile: %s\n\n", inname);
    
        line_number = 0;
        while (fgetws(line_buffer, sizeof(line_buffer), infile)) {
            line_number = line_number +1;
    		
    		//#
    		//# ICI ? ? ?
    		//#
    		
            if ( wcscmp ( L"ب" , line_buffer ) == 0 ){
                 wprintf(L"Line%d: YES.\n",line_number);
            }else{
                 wprintf(L"Line%d: NO.\n",line_number , line_buffer);
            }
        }
        fclose(infile);
        return 0;
    }
    test_utf8.txt

    Output

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    File: test_utf8.txt
    
    Line1: NO.
    Line2: NO.
    Line3: NO.
    Sil-vous plaît monsieur Médinoc, ou je mette la conversation ? est la quelle exacte ? MultiByteToWideChar ? est les chars lire depuis fichier son déjà dans quelle type ? est quelle type exacte faut le convertir avant de le compare ?

    Merci

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Non, ça veut dire tu lis toute une ligne normalement comme pour des chars normaux (avec fgets(), quoi), puis tu convertis toute la ligne. Soit manuellement (ce qui peut avoir son intérêt si tu veux spécifiquement de l'UTF-32), soit avec MultiByteToWideChar(), qui va te donner de l'UTF-16.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/07/2014, 18h08
  2. Réponses: 7
    Dernier message: 17/04/2013, 22h26
  3. [WD12] Lire un fichier UTF-8
    Par MicaelFelix dans le forum WinDev
    Réponses: 5
    Dernier message: 17/11/2009, 06h08
  4. lire un fichier de string ligne par ligne
    Par bilzzbenzbilz dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/02/2009, 10h44
  5. Comment lire un fichier DB en cours d'utilisation par 1 autr
    Par jbat dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2004, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo