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

C Discussion :

compraison de fichier txt et tableau de chaine


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut compraison de fichier txt et tableau de chaine
    salut a tous

    je suis débutant en c, et je dois coder un programme qui:

    -prend en entrée un tableau de chaines de caracteres (argv[]).
    -compar chaque mot du tableau d'entrée au mots d'un tableau de chaine de caracteres (index[]) fixe et déja défini récupré dans un fichier text.
    -donne en sortie un tableau de int de la taille de index[], chaque int du tableau correspond au nombre d'apparition des mots dans l'index[].


    j'ai codé quelque lignes mais comme je débute, j'aimerais que quelq'un m'aide à le corriger, merci d'avance ^^
    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
    # include <stdio.h>
    # include <string.h>
     
    int main(int argc, char ** argv){
        int i,j=0;
        char index[1024];
        int nombre[1024];
     
     
        if(fic!=-1){
                    while(fscanf(fic,"%s\n",index[i++]));
                    }
     
        for(i=0;i<strlen(argv[0]);i++)
        for(j=0;j<1024;j++){
                            if(strcmp(argv[0][i],index[j])
                            nombre[j]++;
                            }
        return nombre;
    }

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Non testé

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define TAILLE 1024
    #define SIZE_WORD  25
     
    int main(int argc, char ** argv)
    {
        int i = 0;
        int j = 0;
        char *index[TAILLE];
        int nombre[TAILLE];
        FILE *fic = NULL;
     
        fic = fopen("fichier.txt", "r");
     
        if(fic == NULL) {
            printf("Erreur ouverture fichier ! \n");
            return EXIT_FAILURE;
        }
     
        /* initialisation du tableau d'entier */
        for(i = 0; i < TAILLE; i++) {
            nombre[i] = 0;
        }
     
        for(i = 0; i < TAILLE; i++) {
            index[i] = malloc(SIZE_WORD);
            if(index[i] == NULL) {
                printf("Erreur malloc ! \n");
                return EXIT_FAILURE;
            }
        }
     
        for(i = 0; i < TAILLE || fgets(index[i], SIZE_WORD, fic); i++) {
            if((index[i])[strlen(index[i] - 1)] == '\n') /* a remplacer par une methode plus sur */
                (index[i])[strlen(index[i] - 1)] = 0;
        }
     
     
        for(i = 1; i < argc - 1; i++) {
            for(j = 0; j < 1024; j++) {
                if(!strcmp(argv[i],index[j]))
                    nombre[j]++;
            }
        }
        /* exploitation des resultats */
     
        for(i = 0; i < TAILLE; i++) {
            free(index[i]);
            index[i] = NULL;
        }
     
        fclose(fic);
        fic = NULL;
     
        return EXIT_SUCCESS;
    }
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    Bienvenue à toi sur le forum.

    pour commencé:
    doit etre dans les accolades du main.
    ensuite: tu utilises (apparement) un pointeur de fichier 'fic'. Celui-ci n'est pas déclarer.
    tu peut faire cela de la maniere suivante.
    De plus il n'est pas non plus ouvert.
    cette operation ce fait grace à fopen.
    Pour finir.
    Est-ce que ton code compile? Sinon quel sont les erreurs obtenus.

  4. #4
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Plop a toi !

    Ton char index[1024] la, c'est juste une chaine de caractère et non pas un tableau de chaine de caractères .

    Ou alors par mot tu entends char peut être ?
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    donc pour declarer un tableau de chaine de caractere c'est bien
    char *index[1024] et pas char index[1024]

    merci les gars, je sens que j'ai du chemin devant moi avant de devenir un bon programmeur ^^

  6. #6
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par steph_nied
    donc pour declarer un tableau de chaine de caractere c'est bien
    char *index[1024] et pas char index[1024]

    merci les gars, je sens que j'ai du chemin devant moi avant de devenir un bon programmeur ^^
    Bah regarde mon code et dis moi si il marche au fait
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  7. #7
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    j'ai compilé avec devc++ sous windows, j'ai une erreur dans la ligne 35

    syntax error before ';' token

    est ce que je soit compile sous gcc ou c'est bon avec devc++

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par steph_nied
    j'ai compilé avec devc++ sous windows, j'ai une erreur dans la ligne 35

    syntax error before ';' token

    est ce que je soit compile sous gcc ou c'est bon avec devc++
    Ah c'est bizarre, la ligne 35 c'est un saut de ligne en plus.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  9. #9
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    c'est cette ligne

    for(i = 0; i < TAILLE || fgets(index[i], SIZE_WORD, fic; i++) {

    ^^

  10. #10
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par steph_nied
    c'est cette ligne

    for(i = 0; i < TAILLE || fgets(index[i], SIZE_WORD, fic; i++) {

    ^^
    En regardant le code de Skyrunner, son code est bon (compilable) mais provoque une erreur.

    Voici une correction de son code:

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define TAILLE 1024
    #define SIZE_WORD  25
     
    int main(int argc, char ** argv)
    {
        int i = 0;
        int j = 0;
        char *index[TAILLE];
        int nombre[TAILLE];
        FILE *fic = NULL;
     
        fic = fopen("fichier.txt", "r");
     
        if(fic == NULL) {
            printf("Erreur ouverture fichier ! \n");
            return EXIT_FAILURE;
        }
     
        /* initialisation du tableau d'entier */
        for(i = 0; i < TAILLE; i++) {
            nombre[i] = 0;
        }
     
        for(i = 0; i < TAILLE; i++) {
            index[i] = malloc(SIZE_WORD);
            if(index[i] == NULL) {
                printf("Erreur malloc ! \n");
                return EXIT_FAILURE;
            }
           index[i] = '\0';
        }
     
        for(i = 0; i < TAILLE && fgets(index[i], SIZE_WORD, fic); i++) {
            if((index[i])[strlen(index[i])-1] == '\n') /* a remplacer par une methode plus sur */
                (index[i])[strlen(index[i])-1] = 0;
        }
     
        for(i = 1; i < argc; i++) {
            for(j = 0; j < 1024; j++) {
                if(!strcmp(argv[i],index[j]))
                    nombre[j]++;
            }
        }
     
     
        /* exploitation des resultats */
        for(j = 0; j < 1024; j++) {
            if(nombre[j]) {
            printf("Mot: %s apparu %d fois\n",index[j],nombre[j]);
        }
        }
     
        for(i = 0; i < TAILLE; i++) {
            free(index[i]);
            index[i] = NULL;
        }
     
        fclose(fic);
        fic = NULL;
     
        return EXIT_SUCCESS;
    }
    Jc

  11. #11
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut arbre suffixe
    merci fearyourself

    une derniere question:

    est ce possible de remplacer l'algorithme que skyrunner a codé (forte complexité) par celui des arbre de suffixe, dit aussi l'algorithme d'ukkonen:

    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
     
    // arbre-suffixes.c
     
    // << Algorithmique du texte >>
    // Maxime Crochemore, Christophe Hancart et Thierry Lecroq
    // Vuibert, 2001.
     
    #include <stdio.h>
    #include "chl.h"
    #include "automate.h"
     
     
    void descLente(Etat p, int k, Etat *resp, int *resk, Mot y, Longueur n) {
       while (k < n && cible(p, y[k]) != NULL) {
          p = cible(p, y[k]);
          ++k;
       }
       *resp = p;
       *resk = k;
    }
     
     
    Automate arbreSuffixes(Mot y, Longueur n) {
       Automate M;
       Etat fourche, p, q;
       int i, j, k;
     
       M = nouvelAutomate();
       for (i = 0; i <= n - 1; ++i) {
          descLente(initial(M), i, &fourche, &k, y, n);
          p = fourche;
          for (j = k; j <= n - 1; ++j) {
             q = nouvelEtat();
             fixerCible(p, y[j], q);
             p = q;
          }
          sortie(p) = i;
       }
       sortie(initial(M)) = n;
       return(M);
    }
    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
     
    // chl.h
     
    typedef int Lettre;
    typedef int Longueur;
    typedef char * Mot;
     
    #define CARDA          256
    #define PREMIERELETTRE 'a'
    #define DERNIERELETTRE 'c'
     
    #define FAUX 0
    #define VRAI 1
     
    #define signalerSi(b) if (b != 0) printf("%d\n", j)
    #define MIN(a,b) ((a) < (b) ? (a) : (b))
    #define MAX(a,b) ((a) > (b) ? (a) : (b))
    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
    42
    43
    44
    45
    46
    47
    48
     
    // automate.h
     
    // << Algorithmique du texte >>
    // Maxime Crochemore, Christophe Hancart et Thierry Lecroq
    // Vuibert, 2001.
     
    struct _etat {
       int nom;
       int indic;
       int sortie;
       int longueur;
       char terminal;
       struct _etat *cible;
       struct _etat *ls;
       struct _etat **succ;
       struct _etat *suppleant;
    };
     
    typedef struct _etat * Etat;
     
    struct _automate {
       Etat dernier, initial;
    };
     
    typedef struct _automate * Automate;
     
     
    #define FEUILLE -1
    #define FOURCHE -2
     
    #define dernier(M) ((M)->dernier)
    #define initial(M) ((M)->initial)
    #define ls(q) ((q)->ls)
    #define sortie(q) ((q)->sortie)
    #define suppleant(q) ((q)->suppleant)
    #define F(q) ((q)->suppleant)
    #define L(q) ((q)->longueur)
    #define terminal(q) ((q)->terminal)
     
     
    Etat nouvelEtat();
    void fixerCible(Etat etat, Lettre a, Etat cible);
    Etat cible(Etat etat, Lettre a);
    void copieCibles(Etat p, Etat q);
    Automate nouvelAutomate();
    void ecrireEtat(Etat etat);
    void ecrireAutomate(Automate automate);
    merci ^^

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/06/2014, 10h57
  2. fichier txt et tableau ?..help..
    Par djdjo59 dans le forum VB.NET
    Réponses: 4
    Dernier message: 27/09/2009, 11h57
  3. [XL-2003] Données dans fichier .txt vers tableau en .xls
    Par Invité1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/08/2009, 19h30
  4. Lecture fichier txt vers tableau alloué
    Par yeboum dans le forum Fortran
    Réponses: 3
    Dernier message: 27/11/2007, 09h31
  5. [MFC] Chaine dans un fichier txt
    Par le-makinero dans le forum MFC
    Réponses: 5
    Dernier message: 21/04/2006, 10h10

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