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

Réseau C Discussion :

Creer une chaine a partir d'un texte formaté


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 38
    Par défaut Creer une chaine a partir d'un texte formaté
    Bonjour,
    voila, j'ai le texte suivant:

    Configuration IP de Windows


    Carte Ethernet Connexion au réseau local:

    Suffixe DNS propre à la connexion :
    Adresse IP. . . . . . . . . . . . : 192.168.30.13
    Masque de sous-réseau . . . . . . : 255.255.255.0
    Passerelle par défaut . . . . . . : 192.168.30.1

    Et j'aimerais qu'a chaque fois il me dise qu'est ce qu'il y a a la place de 192.168.30.13.
    Il y a bien fscanf, qui permet de lire un texte formaté, mais je ne pense pas qu'on peut le configurer pour qu'il passe des mots et tout...
    Donc voila, comment feriez vous?
    Merci bcp

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par PorkyFighter
    voila, j'ai le texte suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Configuration IP de Windows
     
     
    Carte Ethernet Connexion au réseau local:
     
            Suffixe DNS propre à la connexion : 
            Adresse IP. . . . . . . . . . . . : 192.168.30.13
            Masque de sous-réseau . . . . . . : 255.255.255.0
            Passerelle par défaut . . . . . . : 192.168.30.1
    Et j'aimerais qu'a chaque fois il me dise qu'est ce qu'il y a a la place de 192.168.30.13.
    - Définition d'un format d'analyse
    - Conception d'un analyseur de format conformément à la définition ci-dessus
    - Mise en oeuvre, codage, test.

    pour le moment, c'est de la conception, pas du C. Il faut réfléchir, et ça, ça change des jeux vidéo, de la fumette et de la techno...

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 38
    Par défaut
    Bon, je ne suis pas sur d'avoir bien compris, mais j'essaye:
    Pour obtenir ce que je veux, il faut que j'aille a la ligne 8, et que je prenne la chaine qui se trouve entre les deux points et le signe de fin de ligne.
    Ca c'était pour l'analyse, mais pour la conception d'un analyseur de format, et le codage, je ne sais pas trop comment m'y prendre, déjà qu'est-ce qu'un analyseur de format?
    Merci

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par PorkyFighter
    Bon, je ne suis pas sur d'avoir bien compris, mais j'essaye:
    Pour obtenir ce que je veux, il faut que j'aille a la ligne 8,
    Tu lis donc 8 lignes (avec fgets par exemple) et tu ne conserves que la dernière.
    et que je prenne la chaine qui se trouve entre les deux points et le signe de fin de ligne.
    Tu cherches la dernière occurence de : (avec strrchr), tu vas un caractère plus loin et tu as un pointeur vers ce qui t'intéresse.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par PorkyFighter
    Pour obtenir ce que je veux, il faut que j'aille a la ligne 8, et que je prenne la chaine qui se trouve entre les deux points et le signe de fin de ligne.
    Amen !

    Il n'y a plus qu'à traduire ça en algorithme et en pseudo-code, parce que que c'est pas 'toi' qui va faire le boulot, mais la machine. Il faut donc la programmer pour ça.
    déjà qu'est-ce qu'un analyseur de format?
    C'est le programme qui va analyser le texte selon la définition ci-dessus.

    Genre :
    Citation Envoyé par Algorithme textuel
    Ouvrir le fichier machin
    Lire les lignes.
    Quand c'est la 8 ème ligne, chercher le ':'.
    Si on l'a trouvé, traiter la fin de la ligne pour en extraire l'adresse IP
    En cas d'erreur, afficher un message d'erreur.
    Fermer le ficher.

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 38
    Par défaut
    Algorithme textuel a écrit :
    Ouvrir le fichier machin
    Lire les lignes.
    Quand c'est la 8 ème ligne, chercher le ':'.
    Si on l'a trouvé, traiter la fin de la ligne pour en extraire l'adresse IP
    En cas d'erreur, afficher un message d'erreur.
    Fermer le ficher.
    -Ouvrir le fichier, c'est bon
    -Lire les lignes c'est bon
    -Aller a la ligne 8 je pense que je sais comment faire.
    -Mais c'est pour prendre ce qui est entre les deux points et le caractère de fin de ligne que je coince.
    -Message d'erreur c'est bon
    -Fermer le message d'erreur c'est bon

    Est ce que lors d'un fscanf je pourrais mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(pointeur, "        Adresse IP. . . . . . . . . . . . : %d.%d.%d.%d", var1, var2, var3, var4);
    Car je ne vois pas...
    Ah? Peut être en bougeant le curseur? Mais du coup si mon adresse est composée de séries de 3 chiffres ou de 2, cela change le nombre de lettres présentes sur la ligne...
    Je bloque vraiment la dessus...
    Merci Emmanuel Delahaye de répondre à mes questions, c'est cool.
    edit:
    Je n'avais pas vu le code de Jean-Marc.Bourguet, encore quelques précisions, merci

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 38
    Par défaut
    On y arrive! J'ai réussi grâce à vos pistes!
    Mais j'ai un nouveau problème, je ne comprends pas...
    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>
    #include <stdlib.h>
    #include <string.h>
     
    int main(int argc, char *argv[])
    {
        int i, var1, var2, var3, var4;
        char Chaine[100];
        char *PointeurChaine = NULL;
        FILE* Fichier = NULL;
        Fichier = fopen("test.txt", "r+");
        for(i = 0;i < 8; i++)
        {
        fgets(Chaine, 100, Fichier);
        }
        printf("%s\n", Chaine);
        PointeurChaine = strrchr(Chaine, ': ');
        printf("%s\n", PointeurChaine, PointeurChaine);
        fclose(Fichier);
        Fichier = fopen("test.txt", "w+");
        fprintf(Fichier, "%s", PointeurChaine);
        fclose(Fichier);
        Fichier = fopen("test.txt", "r");
        fscanf(Fichier, " %d.%d.%d.%d", var1, var2, var3, var4);
        printf("%d\n%d\n%d\n", var1, var2, var3, var4);
        fclose(Fichier);
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Mon fichier test.txt de départ est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Configuration IP de Windows
     
     
    Carte Ethernet Connexion au réseau local:
     
            Suffixe DNS propre à la connexion : 
            Adresse IP. . . . . . . . . . . . : 192.168.30.13
            Masque de sous-réseau . . . . . . : 255.255.255.0
            Passerelle par défaut . . . . . . : 192.168.30.1
    Puis a la fin est:
    Le code marche, c'est juste la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(Fichier, " %d.%d.%d.%d", var1, var2, var3, var4);
    Qui fait bugger le programme...
    Est ce que ce sont les "." qui ne peuvent pas séparer les différentes saisies dans un fscanf?
    Merci beaucoup de vos explications, cela m'a beaucoup aidé!

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par PorkyFighter
    -Mais c'est pour prendre ce qui est entre les deux points et le caractère de fin de ligne que je coince.
    Est ce que lors d'un fscanf je pourrais mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(pointeur, "        Adresse IP. . . . . . . . . . . . : %d.%d.%d.%d", var1, var2, var3, var4);
    Non.

    La ligne est lue par fgets() dans un tableau de char. Il suffit de l'analyser en cherchant le dernier ':' avec strrchr().

    Cette fonction retourne l'adresse du ':' ou NULL si elle n'a pas trouvé.

    Si on l'a trouvé on peut alors passer l'adresse de la chaine à partir de cette adresse +1 à un sscanf() avec "%d.%d.%d.%d". Ne pas oublier de passer l'adresse des 4 variables... (&var1, &var2 etc.)

    NOTA : Quand on commence à numéroter ses variables, c'est qu'on pourrait sans doute utiliser un tableau... Ces 4 variables peuvent être les éléments d'un tableau de 4 int,
    dans ce cas, on passe les adresses comme ça : tab+0 (ou tab), tab+1 etc.
    On évite les expression gores comme &tab[0], &tab[1], même si ça signifie la même chose...

Discussions similaires

  1. Creer une SGBD a partir de jsp?
    Par nissarte dans le forum Installation
    Réponses: 1
    Dernier message: 23/02/2006, 14h17
  2. Creer une requéte access pour choisir des textes word
    Par mariekero dans le forum Access
    Réponses: 1
    Dernier message: 16/01/2006, 10h25
  3. Réponses: 2
    Dernier message: 08/08/2005, 11h27
  4. [Image] Comment créer une image à partir d'un fichier
    Par mereyj dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 01/07/2005, 21h48
  5. Comment creer une procédure stockée à partir d'un code VBA?
    Par Alcor020980 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 19h55

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