tester l'égalité de 2 listes

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

tester l'égalité de 2 listes

Messagepar isabelle » 14 Sep 2012 à 08:27

Bonjour,

Je cherche à tester l'égalité de 2 champs, Liste1 et Liste2, dans un agent lotus script. J'ai fait plusieurs essais mais à chaque fois j'ai une erreur Type mismatch.
mon dernier essai, j'ai essayé d'utiliser des notesItem intermédiaires mais sans succes.
quelqu'un a-t-il une idée ?

Merci



Dim item1 As NotesItem
Set item1 = doc.GetFirstItem( "Liste1" )
Dim item2 As NotesItem
Set item2 = doc.GetFirstItem( "Liste2" )
If Not (item1.values = item2.values) then
....
end if



lorsque je debug, j'e vois la propriété "Values", je pensais qu'on pouvait l'utiliser ...

[-] ITEM1 ["Liste1", 1280, 92, False, False, True,...]
NAME "Liste1"
TYPE 1280
[-] VALUES ["Valeur1",...]
[0] "Valeur1"
[1] "Valeur2"
[2] "Valeur3"
[3] "Valeur4"


[-] ITEM2 ["Liste2", 1280, 92, False, False, True,...]
NAME "Liste2"
TYPE 1280
[-] VALUES ["Valeur1",...]
[0] "Valeur1"
[1] "Valeur2"
[2] "Valeur3"
[3] "Valeur4"
Avatar de l’utilisateur
isabelle
Posteur néophyte
Posteur néophyte
 
Message(s) : 70
Inscrit(e) le : 04 Oct 2007 à 10:03
Localisation : brest

Re: tester l'égalité de 2 listes

Messagepar Michael DELIQUE » 14 Sep 2012 à 09:32

Salut

Item.values renvois un array tu ne peut pas tester qu'un Array = Array avec un code du genre Item.Values = Item.Values. ça marche pas.
il faut tester chaque valeurs

essais avec cette fonction
Code : Tout sélectionner
Public Function ArrayEgal(wvrArray1 As Variant, wvrArray2 As Variant, nbTaille As Long) As Boolean
   
   REM détermine si 2 tableaux sont égaux
   REM nbTaille <1 teste tout le tableau si non teste la tableau jusqu'a la valeur indiqué
         
   Dim nbLBound1 As Long
   Dim nbLBound2 As Long
   Dim nbUBound1 As Long
   Dim nbUBound2 As Long
   Dim nbIndex As Long
   Dim i As Long
   
   On Error Goto CatchError
   
   ArrayEgal = False
   
   REM controle de la variable tableau
   Select Case Datatype(wvrArray1)
   Case 8704
      rem c'est bien une variable tableau à taille dynamique   
      If ArrayDim(wvrArray1) > 1 Then
         Error 9999,"Seul les tableaux a 1 dimension sont traités"
      End If
   End Select   
   
   REM controle de la variable tableau
   Select Case Datatype(wvrArray2)
   Case 8704
      rem c'est bien une variable tableau à taille dynamique   
      If ArrayDim(wvrArray2) > 1 Then
         Error 9999,"Seul les tableaux a 1 dimension sont traités"
      End If
   End Select   
   
   nbLBound1 = Lbound(wvrArray1)
   nbLBound2 = Lbound(wvrArray2)
   
   If Typename(wvrArray1(nbLBound1)) <> Typename(wvrArray2(nbLBound2)) Then
      Exit Function
   End If
   
   nbUBound1 = Ubound(wvrArray1)
   nbUBound2 = Ubound(wvrArray2)
   nbIndex = nbUBound1-nbLBound1
   
   If nbTaille < 1  Then
      If nbLBound1 <> nbLBound2 Then
         Exit Function
      End If
      If nbUBound1 <> nbUBound2 Then
         Exit Function
      End If
   Else
      If Abs(nbTaille) < nbIndex Then
         nbIndex = Abs(nbTaille)
      End If
   End If
   
   Select Case Ucase(Trim(Typename(wvrArray1(i))))
   Case "NOTESDOCUMENT","NOTESVIEW"
      For i = nbLBound1 To nbIndex
         If wvrArray1(i).UniversalID <> wvrArray2(i).UniversalID Then
            Exit Function
         End If
      Next
   Case Else
      For i = nbLBound1 To nbIndex
         If wvrArray1(i) <> wvrArray2(i) Then
            Exit Function
         End If
      Next   
   End Select   
   
   ArrayEgal = True
   
   Exit Function
CatchError:
   MsgBox "("+Cstr(GetThreadInfo (1))+" Call by "+Cstr(GetThreadInfo(10))+")"+Chr(10)+"Error " + CStr(Err) + " : "+Chr(10) + CStr(Error)+". "+Chr(10)+"Line # "+Cstr(Erl),16," ERROR !"
   ArrayEgal = False   
   Exit Function
End Function

Public Function ArrayDim(wvrArray As Variant) As Integer
   
   REM renvois le nombre de dimmension d'un array
   
   Dim i As Integer
   
   On Error Goto CatchError
   
   ArrayDim = 0
   
   REM controle de la variable tableau
   If Islist(wvrArray) Then
      ArrayDim = 1
      Exit Function
   Elseif Isarray(wvrArray) = False Then
      Error 9999, "''wvrArray'' do not containt Array, datatype = "+Cstr(Datatype(wvrArray))
      Exit Function
   End If
   
   REM détect la fin du tableau
   On Error 9 Resume Next
   REM si le tableau n'a aucune dimension
   On Error 200 Resume Next
   
   While True
      i = Ubound(wvrArray,ArrayDim +1)
      If Err Then
         Exit Function
      End If
      ArrayDim = ArrayDim +1
   Wend
   
   Exit Function
CatchError:
   MsgBox "("+Cstr(GetThreadInfo (1))+" Call by "+Cstr(GetThreadInfo(10))+")"+Chr(10)+"Error " + CStr(Err) + " : "+Chr(10) + CStr(Error)+". "+Chr(10)+"Line # "+Cstr(Erl),16," ERROR !"
   ArrayDim = 0
   Exit Function
End Function
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Re: tester l'égalité de 2 listes

Messagepar Steph_ » 14 Sep 2012 à 14:17

sinon en formule c'est faisable

c'est un bout de code que j'utilise dans une base ou je cherche les utilisateurs d'une liste qui ne sont pas dans une autre liste
et il y a une liste d'exclusion


list1:=toutlemonde;
list2:=signer;
list3:=exclusion;
reste:=@Unique(@Trim(@Replace(list1;list2;"")));
reslist:=@Unique(@Trim(@Replace(reste;list3;"")));reslist
Avatar de l’utilisateur
Steph_
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 354
Inscrit(e) le : 24 Nov 2005 à 20:06
Localisation : Besançon

Re: tester l'égalité de 2 listes

Messagepar isabelle » 14 Sep 2012 à 15:32

merci pour vos réponses.
en fait, je veux vérifier si un champ d'un document est modifié par un traitement. ce champ contient une liste de valeur.
comme solution, je pensais sauvegarder le champ en debut de traitement et ensuite verifier si égalité ou non en fin de traitement.
d'ou ma question pour comparer 2 champs contenant une liste de valeur.
mais peut-etre qu'il a une autre solution pour savoir si un champ à été modifié ....
Avatar de l’utilisateur
isabelle
Posteur néophyte
Posteur néophyte
 
Message(s) : 70
Inscrit(e) le : 04 Oct 2007 à 10:03
Localisation : brest

Re: tester l'égalité de 2 listes

Messagepar Michael DELIQUE » 14 Sep 2012 à 15:41

non pas vraiment d'autre solution que de tester avant et apres
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Re: tester l'égalité de 2 listes

Messagepar roubech » 14 Sep 2012 à 18:30

Si c'est juste savoir que c'est différent et pas quelle élément alors tu peux concaténer le tableau avec un join et comparer 2 chaînes de texte
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: tester l'égalité de 2 listes

Messagepar Michael DELIQUE » 16 Sep 2012 à 11:23

eh pas bete ! j'y aurai pas pensé
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy


Retour vers Développement

cron