Tri doublon

Résolu
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 - 19 sept. 2007 à 12:21
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 - 20 sept. 2007 à 10:29
Bonjour

J'ai des fichiers texte dans lesquels il y a différents locuteurs que je voudrais extraire
Par exemple:

loc1: bonjour
loc2: salut
loc3: coucou
loc1: hello.

Le but est d'avoir un tableau qui reprenne les différents locuteurs sans bien sur les doublons, ou les locuteurs qui reprennent la parole: loc1, loc2,loc3

'ceci est ok: chaque locuteur est extrait mais à chaque prise de parole, donc j'ai une variable avec loc1, loc2, 'loc3, loc1 si on prend l'exemple.
source() = Split(txtsource.Text, "£")
    For EnonLoc = 1 To UBound(source)
        sourceMS() = Split(source(EnonLoc), " ")
       'si on n'a pas trouvé de locuteur nouveau
       if fNomLoc= false
            nomLoc(EnonLoc) = sourceMS(0)
       end if
    
 'pour éliminer les doublons, on compare le locuteur et le locuteur suivant
        For k = EnonLoc To UBound(source) - 1
        sourceMS2() = Split(source(k + 1), " ")
                   'si les deux locuteurs sont différents on passe à l'énoncé suivant
                    If sourceMS(0) <> sourceMS2(0) Then
                         nomLoc(EnonLoc) = sourceMS2(0)
                         fNomLoc=true
                         Exit For
                    End If
                   
                    'si les deux locuteurs sont identiques
                     If sourceMS(0) = sourceMS2(0) Then
                         'on compare les deux locuteurs suivants
                            k = (k - (k - EnonLoc))
                           Exit For
                     End If
            Next k
    Next EnonLoc

J'obtiens quand même des doublons

Merci à vous

4 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 sept. 2007 à 08:14
Salut,
Et bien il te suffit d'"ignorer" l'erreur comme suit (normalement cela fonctionne:

Dim dicNomLoc As New Dictionary
   Source() = Split(txtsource.Text, "£")
   On Error Resume Next
   For enonloc = 1 To UBound(Source)
       sourceMS() = Split(Source(enonloc), " ")
       dicNomLoc.Add sourceMS(0), sourceMS(0)
   Next enonloc
   On Error GoTo 0
, ----
[code.aspx?ID=41455 By Renfield]

NOTE: ATTENTION dans une boucle for il est inutile de s'occuper d'incrémenter la valeur de ta variable de boucle.

@+: Ju£i?n
Pensez: Réponse acceptée
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
19 sept. 2007 à 12:55
Salut,
Lorsuqe tu récupères tes locuteurs, ajoute les à un objet collectionindexée par leur nom en gerant l'erreur d'ajout d'une clé déjà existante, tu devrais pouvoir supprimer tes doublons.

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
19 sept. 2007 à 15:26
merci à toi
en faisant ceci

Dim dicNomLoc As New Dictionary
source() = Split(txtsource.Text, "£")
    For enonloc = 1 To UBound(source)
        sourceMS() = Split(source(enonloc), " ")
        On Error GoTo Err_Loc
        dicNomLoc.Add sourceMS(0), sourceMS(0)
Err_Loc:
        enonloc = enonloc + 1
    Next enonloc

J'obtiens bien les 2 premiers locuteurs mais après, j'ai le message d'erreur de clé déjà existante.

       
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
20 sept. 2007 à 10:29
salut

En effet ca marche ! merci à toi.
Il faut cependant ajouter ceci après la boucle pour récupérer les locuteurs (en parcourant le dictionnaire):

For Each locuteur In dicNomLoc
     ...... dicNomLoc(locuteur)
Next locuteur

Merci encore
0
Rejoignez-nous