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

VBScript Discussion :

compter occurences uniques


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut compter occurences uniques
    Bonjour à tous,

    Je suis completement planté et j'ai besoin d'aide car je ne sais pas comment comment faire.
    En entrée, j'ai un fichier csv. Pour chaque ligne, j'ai le nom d'une personne; un légume consommé par la personne;la valeur 1 si le légume peut être cultivé en France.

    toto;tomate;1
    toto;concombre rouge;0
    toto;haricot;1
    tata;avocat;1
    tata;haricot;1
    tata;tomate;1

    Le but est d'avoir en sortie la liste des personnes pouvant consommer que des produits cultivé en France.

    Je me suis dit : Si il y a 3 toto et qu'il n'y a pas 3 fois le nombre 1, c'est que le personne ne pourra pas consommé que des produits francais.
    En revance, si j'ai 3 tata et trois fois le nombre 1, c'est qu'elle cosomme que des produits cultivables en France.

    Donc, en sortie l'idée est d'avoir le nom des personnes pouvant consommer que des produits du pays.

    Par contre je ne sais pas du tout comment m'y prendre ...

    Auriez vous une idée SVP ?

    @+

  2. #2
    Membre expérimenté
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Par défaut
    voilà comment j'aurais fait, je ne suis pas un spécialiste


    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
    'ouverture des fichiers
    Const ForReading = 1
    Const ForAppending = 8
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    FichierSource = "c:\Source.txt" 'c'est un exemple
    fichierLog = "Parser.log"
    Set objTextFile = objFSO.OpenTextFile(Fichiersource, ForReading)
    Set objLogFile = objFSO.OpenTextFile (fichierLog, ForAppending, True)
     
    'suppression des doublons
    Set objDictionary = CreateObject("Scripting.Dictionary")
    Do Until objTextFile.AtEndOfStream 
        strNextLine = objTextFile.Readline
        objDictionary.Add strNextLine, strNextLine
    Loop
     
    'stockage des utilisateurs
    Set userDictionary = CreateObject("Scripting.Dictionary")
    For Each strkey in objDictionary.keys
    ArrList = Split(objDictionary.item(strkey),";")
    userDictionary.Add ArrList(0),1 'on dira que 1 = consomme..., 0 = consomme pas... et que par défaut il sont à 1
    Next
     
    'et maintenant on check s'il consomme uniquement du 1
    For Each strkey in objDictionary.keys
    ArrList = Split(objDictionary.item(strkey),";")
    if ArrList(2) = 0 Then
    userDictionary.Remove strkey
    userDictionary.Add ArrList(0),0
    End If
    Next
     
    'on n'a plus qu'à lire l'info
    for each strKey in userDictionary
    if userDictionary.Item(strkey) = 1 Then
    objLogFile.WriteLine strKey
    End If
    Next
     
    'et on ferme les fichiers
    objTextFile.Close
    objLogFile.Close



    enjoy^^

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut
    Génial !!!! J'ai bien pensé au dictionnaire mais je ne savais pas comment l'exploiter.

    j'ai un message d'erreur "Cette clé est deja associée à un élément de cette collection".
    Faut je cherche....

    Encore merci

  4. #4
    Membre expérimenté
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Par défaut
    Citation Envoyé par Cheztoto Voir le message
    Génial !!!! J'ai bien pensé au dictionnaire mais je ne savais pas comment l'exploiter.

    j'ai un message d'erreur "Cette clé est deja associée à un élément de cette collection".
    Faut je cherche....

    Encore merci
    pose ton code et la ligne de l'erreur si tu veux un coup de main

  5. #5
    Membre expérimenté
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Par défaut
    en fait je crois que c'est là que j'ai merdé ^^


    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
    'ouverture des fichiers
    Const ForReading = 1
    Const ForAppending = 8
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    FichierSource = "c:\Source.txt" 'c'est un exemple
    fichierLog = "Parser.log"
    Set objTextFile = objFSO.OpenTextFile(Fichiersource, ForReading)
    Set objLogFile = objFSO.OpenTextFile (fichierLog, ForAppending, True)
    
    'suppression des doublons
    Set objDictionary = CreateObject("Scripting.Dictionary")
    Do Until objTextFile.AtEndOfStream 
        strNextLine = objTextFile.Readline
        objDictionary.Add strNextLine, strNextLine
    Loop
    
    'stockage des utilisateurs
    Set userDictionary = CreateObject("Scripting.Dictionary")
    For Each strkey in objDictionary.keys
    ArrList = Split(objDictionary.item(strkey),";")
    userDictionary.Add ArrList(0),1 'on dira que 1 = consomme..., 0 = consomme pas... et que par défaut il sont à 1
    Next
    
    'et maintenant on check s'il consomme uniquement du 1
    For Each strkey in objDictionary.keys
    ArrList = Split(objDictionary.item(strkey),";")
    if ArrList(2) = 0 Then
    userDictionary.Remove ArrList(0)
    userDictionary.Add ArrList(0),0
    End If
    Next
    
    'on n'a plus qu'à lire l'info
    for each strKey in userDictionary
    if userDictionary.Item(strkey) = 1 Then
    objLogFile.WriteLine strKey
    End If
    Next
    
    'et on ferme les fichiers
    objTextFile.Close
    objLogFile.Close



    enjoy^^

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Génial !!!! J'ai bien pensé au dictionnaire mais je ne savais pas comment l'exploiter.

    j'ai un message d'erreur "Cette clé est deja associée à un élément de cette collection".
    Faut je cherche....
    Pour un dictionnaire, si l'on a une entrée qui un couple (Clé1, Valeur 1), on ne peut pas avoir une deuxième entrée avec Clé1. Il faudra forcément utiliser une autre clé.

  7. #7
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Pour un dictionnaire, si l'on a une entrée qui un couple (Clé1, Valeur 1), on ne peut pas avoir une deuxième entrée avec Clé1. Il faudra forcément utiliser une autre clé.
    ou si c'est possible de mettre en valeur 1 "tomate;1" puis après de faire un split sur ";".

    A++

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Citation Envoyé par RadPAT Voir le message
    ou si c'est possible de mettre en valeur 1 "tomate;1" puis après de faire un split sur ";".

    A++
    On peut aussi mettre toutes les chaines de caractères dans la valeur séparé par des séparateur, et mettre en un index en clé.
    Mais alors attention de voir si un tableau de chaine de caractères ne serait pas plus simple. Tout dépend de l'index, si on l'incrémente de 1 en 1 ou non.

Discussions similaires

  1. Couple d'occurence unique
    Par Kalas22 dans le forum Requêtes
    Réponses: 6
    Dernier message: 28/05/2011, 00h29
  2. Réponses: 4
    Dernier message: 08/06/2009, 21h32
  3. [XL-97] Compter occurence d'une partie d'une cellule
    Par grhum dans le forum Excel
    Réponses: 10
    Dernier message: 01/05/2009, 10h22
  4. Compter occurences dans un affichage innerHTML
    Par Nikosto dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/09/2008, 17h50
  5. [XSLT] Nombre D'occurence unique
    Par ANISSS dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 07/11/2006, 09h34

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