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 :

Indicer un tableau avec une chaine de caractères


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Points : 83
    Points
    83
    Par défaut Indicer un tableau avec une chaine de caractères
    Bonjour, je cherche comment indicer un tableau avec une chaîne de carractères.
    Je vous expose mon problème.

    J'ai un gros fichier avec des centaines de milliers de lignes. Chaque ligne correspond à 1 mariage. Pour chaque mariage, il y a une clé qui identifie le nom du marié, elle a cette allure: XZK43HGZ32. Chauqe ligne contient également diverses informations comme la ville du mariage, etc... Je souhaiterai par exemple repertorier tous les mariés qui se sont mariés dans un ville V.

    Pour cela je pense qu'il serait bien d' avoir un genre de tableau tab[clé] indicé avec la clé qui identifie le nom du marié, donc une chaine de carractères. Je sais que ça ne se fait pas en C, qu'il faut peut être utiliser une table de hachage. Je pourais ainsi procéder comme suit: je lis de haut en bas tout mon fichier, dès que je trouve ma ville V pour par exemple XZK43HGZ32 , je peut faire un truc du genre tab[XZK43HGZ32].ville=V.

    Comment je peux faire?

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par petdelascar Voir le message
    Bonjour, je cherche comment indicer un tableau avec une chaîne de carractères.
    Je vous expose mon problème.

    J'ai un gros fichier avec des centaines de milliers de lignes. Chaque ligne correspond à 1 mariage. Pour chaque mariage, il y a une clé qui identifie le nom du marié, elle a cette allure: XZK43HGZ32. Chauqe ligne contient également diverses informations comme la ville du mariage, etc... Je souhaiterai par exemple repertorier tous les mariés qui se sont mariés dans un ville V.

    Pour cela je pense qu'il serait bien d' avoir un genre de tableau tab[clé] indicé avec la clé qui identifie le nom du marié, donc une chaine de carractères. Je sais que ça ne se fait pas en C, qu'il faut peut être utiliser une table de hachage. Je pourais ainsi procéder comme suit: je lis de haut en bas tout mon fichier, dès que je trouve ma ville V pour par exemple XZK43HGZ32 , je peut faire un truc du genre tab[XZK43HGZ32].ville=V.

    Comment je peux faire?
    Une table de hachage est la solution, voir un arbre binaire balancé si le parcours des données triées est une opération importante. A moins que ce soit un projet d'étudiant (dans ce cas, je recommande l'implantation a la mano), il n'est pas nécessaire de reprogrammer ces structures de données depuis zéro. Certaines bibliothèques, parmi lesquelles la GLib, proposent des solutions génériques.

    Thierry

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Points : 83
    Points
    83
    Par défaut
    C'est pour un projet d'entreprise. GTK est il libre?

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 123
    Points
    28 123
    Par défaut
    Bonjour,

    Quelques centaines de milliers d'entrées...
    Des recherches sur des clefs uniques...

    Pourquoi ne pas se tourner vers l'utilisation d'une base de données ?

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par petdelascar Voir le message
    C'est pour un projet d'entreprise. GTK est il libre?
    Oui GTK+ est libre ainsi que GLib qui peut être utilisée indépendamment de GTK+

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Pourquoi ne pas se tourner vers l'utilisation d'une base de données ?
    Je serais un peu du même avis, une base de données pour un si grand nombre de données reste encore la meilleur solution sauf s'il faut ré-entrer toutes les données pour constituer la DB, auquel cas ca risque d'être très très.......... très long et fastidieux

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    308
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 308
    Points : 373
    Points
    373
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    Je serais un peu du même avis, une base de données pour un si grand nombre de données reste encore la meilleur solution sauf s'il faut ré-entrer toutes les données pour constituer la DB, auquel cas ca risque d'être très très.......... très long et fastidieux
    Bah là tu fais un programme qui insère toutes les données.

    C'est sûr qu'ici c'est la base de données qui est la meilleure solution.

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Bonjour,

    Quelques centaines de milliers d'entrées...
    Des recherches sur des clefs uniques...

    Pourquoi ne pas se tourner vers l'utilisation d'une base de données ?
    +1.

    Vu le nombre d'enregistrements, l'usage d'une table de hachage implique que la totalité des données soit chargée en mémoire. C'est effectivement pas très adapté.

    Thierry

  9. #9
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Points : 169
    Points
    169
    Par défaut
    Alternativement si on peut convertir de façon unique la clef en entier on n'a pas besoin de table de hashage. Pour 100,000 entrées on peut encore rester en mémoire.

    Pour info ce genre de tableaux s'appelle tableau associatif.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    308
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 308
    Points : 373
    Points
    373
    Par défaut
    Citation Envoyé par Zartan Voir le message
    Alternativement si on peut convertir de façon unique la clef en entier on n'a pas besoin de table de hashage.
    En même temps, c'est un peu le principe d'une table de hachage... Si on veut être tatillon, on pourrait dire que la table de hachage peut aider aussi à résoudre les risques de collision des clés...

  11. #11
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par PsychoH13 Voir le message
    En même temps, c'est un peu le principe d'une table de hachage... Si on veut être tatillon, on pourrait dire que la table de hachage peut aider aussi à résoudre les risques de collision des clés...
    Exactement. Si on a des clefs en double ça devient du hashage avec une gestion de l'élément suivant sinon une table d'indices suffit.

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

Discussions similaires

  1. comparer un String tableau avec une chaine de caractère
    Par artemis93 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 01/03/2011, 11h27
  2. Réponses: 4
    Dernier message: 18/07/2007, 14h10
  3. Réponses: 8
    Dernier message: 06/05/2007, 21h47
  4. Réponses: 4
    Dernier message: 01/02/2007, 19h06
  5. Réponses: 5
    Dernier message: 26/07/2006, 11h13

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