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 :

Une idée pour un débutant


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 3
    Points
    3
    Par défaut Une idée pour un débutant
    salut encore un 'ti soucis !!
    j'ai un fichier .txt sur mon disque dur qui contient :
    #Vehicule>
    #Avec moteur>
    #Voiture;
    #Camion;
    #Car;
    \;
    #Sans moteur>
    #Velo;
    #Trotinette;
    \;
    \;
    .


    j'arrive a lire le fichier et à l'afficher avec ce 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
    #include <stdio.h>
    #include <stdlib.h>
    #define fich "H:\\testStage\\exoc.txt";//chemin et nom et du fichier texte à traiter
    
    void main()
     {
        FILE *f_read;
         int c,i = 0,j = 0,k;
         char tab[256];
     
        f_read = fopen("H:\\testStage\\exoc.txt", "r");
         if (!f_read) // test ouverture du fichier 
        {
             printf("Impossible d'ouvrir le fichier\n");
             exit(-1);
         }
     
        /*cette partie affiche aussi le contenu du fichier
        mais ne nous est pas très utile car on veut controler l'affichage*/
        /*while (!feof(f_read))
        putchar(fgetc(f_read));
        printf("\nVOILA LE CONTENU DU FICHIER LU AU DESSUS \n");
        i=0;*/
        // seconde manipulation d'affichage
        while (!feof(f_read))
         {
             c = fgetc(f_read); //ramene un int dans c
            c =(char)c; // cast du int en char afin d'afficher les caractères
            //printf("%c",c); // affiche le contenu du fichier
            tab[i] = c;
             i++; 
         }
     
        /*while (j<i)
        { //tab[j]= (char) tab[j];
            //printf("%c",tab[j]);//affiche aussi le contenu du fichier
            if (tab[j]='#')
                printf("%c",tab[j+1]);
            j++;
        }*/
    
        /*while ((tab[j]!='\\')||(tab[j]=='>'))
        {
            branch[j]= cpt;
            cpt++;
            j++; 
        }*/
    
        for(j=0;j<i;j++)
         { 
             if (tab[j]=='#')
                 tab[j]='\b'; 
             if (tab[j]=='>')
                 tab[j]='\r';
             printf("%c",tab[j]);
         } 
         fclose(f_read); // fermeture du fichier traité
    }

    Je souhaite maintenant faire un affichage qui devra se faire sous forme arborescentealphabétique.
    (à l’aide de tabulation) et trié par ordre Début de ligne : # (caractère diese)
    Fin de ligne : ; (caractère point-virgule)
    Début de sous branche : > (caractère superieur à)
    Fin de branche : \ (caractère anti slash)
    Fin de document : .(caractère point)
    cad apres a partir des sous branche
    comme ceci en fonction des caracteres #,;....:
    vehicule
    (tabulation)avec moteur
    .........
    .........
    C'est la que je coince avez vous une piste ou une idée ???

  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
    Désolé mais ton message n'est pas très lisible.

    Pas de balise code, des balises non fermé, une taille un poil trop petite.

    Tu peux arranger tout ca s'il te plait.
    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 expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    une taille un poil trop petite.
    Sous FireFox Ctrl+molette souris pour zoomer/dezoomer.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  4. #4
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Skyrunner
    Désolé mais ton message n'est pas très lisible.

    Pas de balise code, des balises non fermé, une taille un poil trop petite.

    Tu peux arranger tout ca s'il te plait.
    ok j'ai retiré les balises genantes.!!!!

  5. #5
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Pourquoi ne pas utiliser une autre structure de données, ou alors changer la tienne pour quelle soit un peu plus compréhensible.

    Sinon tu devrais plutôt mettre tes '\t' dans la boucle qui lit le fichier.
    L'itération est humaine; la récursion, divine.

  6. #6
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Mayti4
    Pourquoi ne pas utiliser une autre structure de données, ou alors changer la tienne pour quelle soit un peu plus compréhensible.

    Sinon tu devrais plutôt mettre tes '\t' dans la boucle qui lit le fichier.
    je ne peu pas mettre de \t dans la boucle car si tu relis bien tu verra que les tabulations sont fonction des sous branches.

    cad quand tu rencontre le premier > ya deja une tabulation et ainsi de suite seul les \ les ferme !!! regarde bien la structure du fichier texte ...c'est la mon blocage.
    merci quand meme

  7. #7
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    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
     
    void print_tab(int num)
    {
        int i = 0;
        for( i; i < num; i++ )
        {
            printf( "\t" );
        }
    }
     
    ...
     
        char c;
        int t = 0;
     
        while ( 1 )
        {
            c = fgetc(f);
     
            if ( c == '.' || c == EOF )
                break;
     
            if ( c == '#' )
            {
                print_tab(t);
     
                while ( 1 )
                {
                    c = fgetc(f);
     
                    if ( c == '>' )
                    {
                        t++;
                        break;
                    }
     
                    if ( c == ';' )
                        break;
     
                    fputchar(c);
                }
     
                fputchar( '\n' );
            }
     
            if ( c == '\\' )
                t--;
        }
    Ce code donne :

    http://img106.imageshack.us/img106/6596/img1tk.jpg

    Tu peux le modifier pour placer les caractères dans une chaînes.
    L'itération est humaine; la récursion, divine.

  8. #8
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    merci a toi c'est tres gentil , je vais essayer de comprendre et l'adapter afin de pouvoir les ranger par ordre alphabétique...

  9. #9
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 3
    Points
    3
    Par défaut encore bloqué
    Salut,

    encore des problemes pour le rangement en ordre alphabétique par rapport au probleme enoncé ci dessus.

    voici le code que j'essai pour mettre les caractere voulus dans un tableau mais ça marche pas !!!

    Si vous pouviez m'aider ou me donner une piste ce serait génial merci.

    #include<stdio.h>
    #include<stdlib.h>
    #define fich "H:\\exoc.txt";//chemin et nom et du fichier texte à traiter
    /***************************************************************/
    /* fonction de gestion des tabulations affich_tab() */

    /* */
    /***************************************************************/
    void print_tab(int num) // cette fonction gère les tabulations
    {
    int i;
    for(i=0; i < num; i++ )
    {
    printf(
    "\t" );
    }
    }
    void main()
    {
    FILE *f_read;
    // pointeur de fichier
    char c; // reçoit les caractères lu dans le fichier
    char chaine[1024];
    int i=0,t=0,cpt=0,n=0,ssb=0,j=0,m=0;
    f_read = fopen(
    "H:\\testStage\\exoc.txt", "r");
    if (!f_read) // test ouverture du fichier
    {
    printf(
    "Impossible d'ouvrir le fichier\n");
    exit(-1);
    }




    lecture_2 :
    while ( 1 )
    {
    c = fgetc(f_read);
    if ( c == '.' || c == EOF )
    break;
    if ( c == '#' )
    {
    print_tab(t);
    lecture_1 :
    while ( 1 )
    {
    c = fgetc(f_read);
    if ( c == '>' )
    {
    t++;
    cpt++;
    break;
    }
    if ( c == ';' )
    {
    ssb++;
    m = ssb;
    break;
    }

    if (( cpt == 2 )&& (c ==';'))
    {

    fputchar(
    '\n' );


    /*if ( c == '\\' )
    {
    t--;
    ssb = 0;
    cpt--;
    goto lecture_2;
    }*/
    }
    break;

    if (m==6)
    goto fin;





    if (( cpt == 2 )|| (ssb != 3 ))

    {
    chaine[i]= c;
    i++;
    goto lecture_1;
    }

    else

    if ( ssb == 3 )
    {
    if (t>1)
    {
    for(j=0; j < t; j++ )
    {
    printf(
    "\t" );
    }
    }

    for (n=0;n<=i;n++)
    {

    //if ( (t>1) && ( chaine [n] =='#') )
    //m=(char)chaine[n];
    printf("%c",chaine[n]);

    }
    i = 0;
    break;

    }







    fputchar(c);
    }
    fin : fputchar(
    '\n' );
    }
    if ( c == '\\' )
    {
    t--;
    ssb = 0;
    if ( cpt == 2 )
    {
    cpt--;
    }
    }
    }
    fclose(f_read);
    // fermeture du fichier traité
    }

  10. #10
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    -main retourne int
    -il vaut mieux sortir le plus d'opérations possibles du main afin de clarifier le code: faire une fonction qui ouvre le fichier et fait les tests d'ouverture notamment.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par poutine
    encore des problemes pour le rangement en ordre alphabétique par rapport au probleme enoncé ci dessus.

    voici le code que j'essai pour mettre les caractere voulus dans un tableau mais ça marche pas !!!

    Si vous pouviez m'aider ou me donner une piste ce serait génial merci.
    Codage à la barbare, boucles imbriquées, goto... Non il faut arréter la spaghettisation du code et passer à une méthode d'analyse plus sérieuse basée sur la modélisation du comportement par automate à état finis. Ensuite, il suffit de coder l'automate.
    • Les évènement sont les caractètres lus ou les ensembles de caractères.
    • Les états sont à définir, mais ils doivent refléter la spécification
    • Les transitions sont à définir.
    • Les actions liées aux transitions sont à définir.
    Un peu de théorie :

    http://emmanuel-delahaye.developpez.com/fsm_um.htm

    Et voici le 'moteur' de ton applicartion (le générateur d'évènements)
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    //chemin et nom et du fichier texte à traiter
    #if 0
    #define fich "H:\\exoc.txt"
    #else
    #define fich "exoc.txt"
    #endif
     
    #define DBG 1
     
    int main()
    {
       int ret = EXIT_SUCCESS;
       FILE *f_read = fopen(fich, "r");
       if (f_read != NULL)
       {
          int c;
          while ((c = fgetc(f_read)) != EOF && c != '.')
          {
    #if DBG
             putchar (c);
    #endif
          }
          fclose(f_read); // fermeture du fichier traité
       }
       else
       {
          perror(fich);
          ret = EXIT_FAILURE;
       }
     
       return ret;
    }
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réponse et il est vrai que mon code n'est pas du tout esthétique ...
    Mon probleme c'est la mise en ordre alphabétique suivant le modele et les sous branches ...

    voici une version un peu moins en spaghetti avec le fichier texte contenant selon les caractéristiques :
    > debut de sous branche
    # debut de ligne
    ; fin de ligne
    \ fin de sous branche
    . fin du fichier
    [quote]
    fichier.txt :
    #Vehicule>
    #Avec moteur>
    #Voiture;
    #Camion;
    #Car;
    \;
    #Sans moteur>
    #Velo;
    #Trotinette;
    \;
    \;
    .
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #define fich "H:\\testStage\\exoc.txt"
    /*#define EXIT_SUCCESS 0
    #define EXIT _FAILURE 1*/
    // fonction de traitement des tabulations...print_tab
    void print_tab(int num) // cette fonction gère les tabulations
    {
        int i;
        for(i=0; i < num; i++ )
        {
            printf( "\t" );
        }
    }
    // main function
    int main()
    {
       int ret = EXIT_SUCCESS;
       int t=0;
       char c;
       FILE *f_read = fopen(fich, "r");
       if (f_read != NULL)
       {
          int c;
          /*while ((c = fgetc(f_read)) != EOF && c != '.')
          {
             putchar (c);
          }*/  
       while ( 1 )
        {
            c = fgetc(f_read);
            if ( c == '.' || c == EOF )
                break;
            if ( c == '#' )
            {
                print_tab(t); // impression tabulation
                while ( 1 )
                {
                    c = fgetc(f_read);
                    if ( c == '>' )
                    {
                        t++;
                        break;
                    }
                    if ( c == ';' )
                        break;
                    fputchar(c);
                }
                fputchar( '\n' ); // retour à la ligne
            }
            if ( c == '\\' )
                t--;
        }
     fclose(f_read); // fermeture du fichier traité
     
       }
       else
       {
          perror(fich);
          ret = EXIT_FAILURE;
       }
       return ret;
    }

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par poutine
    avec le code :
    Merci d'utiliser les balises code et non quote...
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Merci d'utiliser les balises code et non quote...
    ok c'est fait !!!

  15. #15
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Et l'indentation alors !!!
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  16. #16
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par crocodilex
    Et l'indentation alors !!!
    voila c'est fait !!!
    excusez moi pour mon manque d'esthétique mais j'apprend à corriger...

Discussions similaires

  1. Lien pour TELECHARGER une image plutôt que pour l'ouvrir
    Par nabab dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/01/2005, 18h07
  2. Encore une jointure sous Oracle pour la route
    Par ebaynaud dans le forum Langage SQL
    Réponses: 15
    Dernier message: 04/11/2004, 11h40

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