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 :

conversion char en numéro


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Par défaut conversion char en numéro
    salut
    je travaille sur une base de meme type que l'exemple envoyé, j'ai besoin d'un programme qui a le but de ne pas lire le 1ier, 2ème, 3ème, 4ème et 10ème données de chaque ligne de cette base, et doit convertir le reste des données en numéros symboliques, et pour les données qui se répètent le numéro symbolique attribué à une données précédente de meme type doit rester le meme à tout répitition, (par exemple si le mot http est référencé la première fois par le numéro 1 donc ce numéro doit rester le meme pour touts les mots http qui se présentent après)..
    pOUR plus d'explication, chaque ligne contient 1 enregistrement, et chaque enregistrement contient 11 données :
    1 id
    2 date
    3 temps de départ
    4 duration
    5 nom-service
    6 @-port-source
    7 @-port-destination
    8 @-ip-source
    9 @-ip-destination
    10 score d'attaque (1 ilya attaque, 0 sinon)
    11 nom-attaque

    j'envoie alors un example de la base sur laquelle je travaille (c'est un petit example mais la base réelle est plus large).
    j'ai besoin de cet algorithme afin de convertir ma base avec des caractères en numéro symbolique car je vais appliquer cette base à un autre algorithme (prince de data mining) déjà développé et il n'accepte que les données numériques.
    SVP aidez moi et merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Tu travailles avec quel EDI comme cela je t'envoi directement le fichier du projet

    Est-que tu as un code déja fais ?

  3. #3
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Par défaut
    Citation Envoyé par hegros
    Est-que tu as un code déja fais ?

    En effet, je travaille dans le cadre d'un projet de datamining. je cherche à générer des règles d'association génériques, celà est possible avec l'algorithme PRINCE que j'ai déjà son code.
    Pour donner des règles, l'algorithme prince accèpte en entrée seulement les données numériques symbolique c'est pkoi je cherche à modifier ma base de données qui comporte des caractères.

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    quel code pose probléme ?

  5. #5
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Par défaut
    c'est le code " prince" puisqu'il n'accèpte pas tous type de données, c'est seulement des données numériques.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Si j'ai bien compris, tu veux transformer en nombres des données qui n'en sont a priori pas...

    Je vois deux méthodes :
    - créer/maintenir une table de correspondance entre nombre et donnée non numérique ;
    - calculer les nombres correspondants aux données à la volée.

    Méthode 1
    La table de correspondance est vide au départ (nombre d'éléments=0).
    Tu lis "RPC-DCOM".
    Tu le cherches dans la table, tu ne le trouves pas, tu ajoutes le couple (0,"RPC-DCOM") dans la table, tu incrémentes le nombre d'éléments, tu remplaces "RPC-DCOM" par 0 dans la sortie.
    Tu lis "SYN flood".
    Tu le cherches dans la table, tu ne le trouves pas, il y a 1 élément dans la table, tu ajoutes le couple (1,"SYN flood") dans la table, tu incrémentes le nombre d'éléments, tu remplaces "SYN flood" par 1 dans la sortie.
    Tu lis (de nouveau) "RPC-DCOM".
    Tu le cherches dans la table, tu le trouves, le nombre correspondant est 0, tu remplaces "RPC-DCOM" par 0 dans la sortie.

    Méthode 2
    Il est possible d'effectuer un calcul à partir de la donnée en entrée pour obtenir un nombre qui soit toujours le même si la donnée en entrée est identique et qui soit différent quand elle est différente.
    Exemple d'une adresse IP : une adresse IPv4 est composée de 4 octets, un entier sur 32 bits peut donc servir à représenter une adresse IP et la conversion sera aisée.
    Exemple d'une chaîne quelconque : calculer un hash cryptographique de la chaîne pour obtenir un nombre entier codé sur N octets (N dépend de la fonction de hachage choisie). Si (N*8)>32 et que tu utilises un processeur 32 bits, tu peux utiliser une bibliothèque de calcul sur des nombres à précision arbitraire pour gérer ce type de nombres.

    Voilà...au boulot !

  7. #7
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Par défaut
    Salut,
    J’ai expliqué le problème à un amis et il propose cette idée : il s'agit en fait de considérer le document en tant que fichier texte, donc il suffit de déclarer un pointeur sur le fichier pour l'ouvrir en lecture.
    laisser le fichier principal intact et dans ce cas créer un nouveau fichier et y écrire les symboles numériques.
    faire le parcours du fichier en considérant le nombre d'espaces comme les délimiteurs des différentes colonnes, puis considérer 6 tableaux dynamiques à déclarer et on peut déclarer une structure avec 6 champs de tableaux qui portent une liste énumérer des différentes valeurs de chaque colonne donc un tableau par colonne et cette liste est mise à jour à chaque rencontre d'un nouveau élément pour chaque colonne.
    Alors je commence par ce cde :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <stdlib.h>
    int main (int argc, char const* argv[])
    { 
    char   *f1   = NULL;       /* name of input  file */
    char   *f2   = NULL;       /* name of output file */
        f1=fopen(f1, "r");     /* open input file for reading */
      if (f1== NULL)
    {
        printf("Impossible d'ouvrire le fichier d'entré");
    }
    f2=fopen(f2,"w");
    et j'espère que qqun m'aide à développer le code final de cette idée.
    En effet, la base dont je veux est de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1 3 5 4 6 7
    2 3 5 8 9 10 
    1 11 12 8 6 10
    Merci

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par mastere.info
    Salut,
    J’ai expliqué le problème à un amis et il propose cette idée : [...] liste [...] mise à jour à chaque rencontre d'un nouveau élément pour chaque colonne.
    == méthode 1 dans mon précédent message. A noter que tu n'es peut-être pas tenu d'avoir 6 dictionnaires (6 tableaux ou 6 listes) : un seul pourrait suffire.

    Citation Envoyé par mastere.info
    Alors je commence par ce cde :
    Code non compilable.
    Apprendre à indenter.
    Si c'est pour un devoir, faire attention aux fautes dans les commentaires.
    Mauvaise gestion des erreurs (si l'ouverture du fichier en entrée échoue, tu ouvres quand même le fichier en sortie ?).
    fopen() renvoie un FILE*, pas un char*.
    Si f1==f2==NULL, tu n'ouvriras jamais rien.
    Et puis...tu as écrit l'algorithme avant de te lancer dans le code ?

    Citation Envoyé par mastere.info
    et j'espère que qqun m'aide à développer le code final de cette idée.
    Aide-toi et On t'aidera.

  9. #9
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Par défaut
    Citation Envoyé par David.Schris
    == méthode 1 dans mon précédent message.
    Merci David.Schris pour votre solution "méthode 1".
    Svp, aidez moi à l'implémentation.
    Citation Envoyé par David.Schris
    Aide-toi et On t'aidera.
    Mais, je sais que le forum des développeurs peut aider les débutants c’est pourquoi je cherche l’aide.
    Et moi je ne sais pas développer l’algorithme de l'idée proposée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <stdlib.h>
    int main (int argc, char const* argv[])
    { 
     FILE *f1 ;       /* name of input  file */
     FILE *f2 ;       /* name of output file */
        f1=fopen(f1, "r");     /* open input file for reading */
      if (f1== NULL)
    {
        printf("Impossible d'ouvrir le fichier d'entrée");
    }
    f2=fopen(f2,"w");

  10. #10
    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 mastere.info
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     FILE *f1 ;       /* name of input  file */
        f1=fopen(f1, "r");     /* open input file for reading */
    Avant d'utiliser une fonction qu'on ne connait pas, il est d'usage de lire sa doc.

    http://man.developpez.com/man3/fopen.3.php

    ça évitera d'écrire carrément n'importe quoi...

Discussions similaires

  1. Conversion char/int à la lecture d'un fichier
    Par Gotterfdom dans le forum C++
    Réponses: 5
    Dernier message: 22/01/2006, 23h48
  2. conversion char wide char
    Par ep31 dans le forum MFC
    Réponses: 4
    Dernier message: 15/11/2005, 08h14
  3. Pb Invalid Conversion "char" to "char*"
    Par kazarn dans le forum C++
    Réponses: 3
    Dernier message: 02/03/2005, 13h24
  4. Conversion char * vers wchar_t
    Par Zapan dans le forum C++
    Réponses: 4
    Dernier message: 24/02/2005, 15h56
  5. Réponses: 3
    Dernier message: 26/05/2004, 23h03

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