Bonjour,
je souhaite comparer le contenu de deux fichiers.txt=20
existant sur un lecteur, et incr=E9menter une variable=20
num=E9rique en cas de diff=E9rence. Je m'y perd un peu avec=20
les instruction compare.
Merci d'avance
;o)
Bonjour, voici un exemple, Dim VarFic1 As String Dim VarFic2 As String Dim resultat As Byte Dim difference As Long ' difference = 0 ' assignation 2 prt + 2 ouvertures fics + 2 lecture fic dans var VarFic1 et VarFic2 ' resultat = StrComp(VarFic1, VarFic2, 1) If resultat <> 0 Then difference = difference + 1 ' MsgBox difference -- Merci, @+, bye, Joe : ---------------------------------------------------------- Avec une hache, celui qui tient le manche a toujours raison. ----------------------------------------------------------
"Lupis" a écrit dans le message de news: 45cc01c3ff6f$ecf02640$ Bonjour, je souhaite comparer le contenu de deux fichiers.txt existant sur un lecteur, et incrémenter une variable numérique en cas de différence. Je m'y perd un peu avec les instruction compare. Merci d'avance ;o)
Bonjour, voici un exemple,
Dim VarFic1 As String
Dim VarFic2 As String
Dim resultat As Byte
Dim difference As Long
'
difference = 0
'
assignation 2 prt + 2 ouvertures fics + 2 lecture fic dans var VarFic1 et
VarFic2
'
resultat = StrComp(VarFic1, VarFic2, 1)
If resultat <> 0 Then difference = difference + 1
'
MsgBox difference
--
Merci, @+, bye, Joe : ng75@noos.fr
----------------------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison.
----------------------------------------------------------
"Lupis" <cruxlupis@hotmail.com> a écrit dans le message de news:
45cc01c3ff6f$ecf02640$a501280a@phx.gbl...
Bonjour,
je souhaite comparer le contenu de deux fichiers.txt
existant sur un lecteur, et incrémenter une variable
numérique en cas de différence. Je m'y perd un peu avec
les instruction compare.
Merci d'avance
;o)
Bonjour, voici un exemple, Dim VarFic1 As String Dim VarFic2 As String Dim resultat As Byte Dim difference As Long ' difference = 0 ' assignation 2 prt + 2 ouvertures fics + 2 lecture fic dans var VarFic1 et VarFic2 ' resultat = StrComp(VarFic1, VarFic2, 1) If resultat <> 0 Then difference = difference + 1 ' MsgBox difference -- Merci, @+, bye, Joe : ---------------------------------------------------------- Avec une hache, celui qui tient le manche a toujours raison. ----------------------------------------------------------
"Lupis" a écrit dans le message de news: 45cc01c3ff6f$ecf02640$ Bonjour, je souhaite comparer le contenu de deux fichiers.txt existant sur un lecteur, et incrémenter une variable numérique en cas de différence. Je m'y perd un peu avec les instruction compare. Merci d'avance ;o)
ng
Salut,
Veux tu faire la comparaison ligne par ligne ? Octet par octet (Êractère) ?
Voici une solution ligne à ligne :
Private Sub Form_Load() Dim k As Integer, sBuff As String Dim tblLignes() As String, tblLignes2() As String, tblTemp() As String Dim i As Integer, lTotDiff As Long 'ouverture fichier 1 k = FreeFile Open "C:Documents and SettingsngBureau1.txt" For Binary As #k sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
'ouverture fichier 2 k = FreeFile Open "C:Documents and SettingsngBureau2.txt" For Binary As #k sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
sBuff = ""
If UBound(tblLignes2) > UBound(tblLignes) Then 'on s'arrange pr que tblLignes soit tjrs le plus grand tblTemp = tblLignes2 tblLignes2 = tblLignes tblLignes = tblTemp Erase tblTemp End If
For i = 0 To UBound(tblLignes) If i > UBound(tblLignes2) Then 'hors imite donc diff lTotDiff = lTotDiff + 1 Else If tblLignes(i) <> tblLignes2(i) Then lTotDiff = lTotDiff + 1 End If Next
Faisable aussi à coup de Line Input, mais c'est plus lent.
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ "Lupis" a écrit dans le message de news: 45cc01c3ff6f$ecf02640$ Bonjour, je souhaite comparer le contenu de deux fichiers.txt existant sur un lecteur, et incrémenter une variable numérique en cas de différence. Je m'y perd un peu avec les instruction compare. Merci d'avance ;o)
Salut,
Veux tu faire la comparaison ligne par ligne ? Octet par octet (Êractère)
?
Voici une solution ligne à ligne :
Private Sub Form_Load()
Dim k As Integer, sBuff As String
Dim tblLignes() As String, tblLignes2() As String, tblTemp() As String
Dim i As Integer, lTotDiff As Long
'ouverture fichier 1
k = FreeFile
Open "C:Documents and SettingsngBureau1.txt" For Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
'ouverture fichier 2
k = FreeFile
Open "C:Documents and SettingsngBureau2.txt" For Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
sBuff = ""
If UBound(tblLignes2) > UBound(tblLignes) Then
'on s'arrange pr que tblLignes soit tjrs le plus grand
tblTemp = tblLignes2
tblLignes2 = tblLignes
tblLignes = tblTemp
Erase tblTemp
End If
For i = 0 To UBound(tblLignes)
If i > UBound(tblLignes2) Then
'hors imite donc diff
lTotDiff = lTotDiff + 1
Else
If tblLignes(i) <> tblLignes2(i) Then lTotDiff = lTotDiff + 1
End If
Next
Faisable aussi à coup de Line Input, mais c'est plus lent.
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
"Lupis" <cruxlupis@hotmail.com> a écrit dans le message de news:
45cc01c3ff6f$ecf02640$a501280a@phx.gbl...
Bonjour,
je souhaite comparer le contenu de deux fichiers.txt
existant sur un lecteur, et incrémenter une variable
numérique en cas de différence. Je m'y perd un peu avec
les instruction compare.
Merci d'avance
;o)
Veux tu faire la comparaison ligne par ligne ? Octet par octet (Êractère) ?
Voici une solution ligne à ligne :
Private Sub Form_Load() Dim k As Integer, sBuff As String Dim tblLignes() As String, tblLignes2() As String, tblTemp() As String Dim i As Integer, lTotDiff As Long 'ouverture fichier 1 k = FreeFile Open "C:Documents and SettingsngBureau1.txt" For Binary As #k sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
'ouverture fichier 2 k = FreeFile Open "C:Documents and SettingsngBureau2.txt" For Binary As #k sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
sBuff = ""
If UBound(tblLignes2) > UBound(tblLignes) Then 'on s'arrange pr que tblLignes soit tjrs le plus grand tblTemp = tblLignes2 tblLignes2 = tblLignes tblLignes = tblTemp Erase tblTemp End If
For i = 0 To UBound(tblLignes) If i > UBound(tblLignes2) Then 'hors imite donc diff lTotDiff = lTotDiff + 1 Else If tblLignes(i) <> tblLignes2(i) Then lTotDiff = lTotDiff + 1 End If Next
Faisable aussi à coup de Line Input, mais c'est plus lent.
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ "Lupis" a écrit dans le message de news: 45cc01c3ff6f$ecf02640$ Bonjour, je souhaite comparer le contenu de deux fichiers.txt existant sur un lecteur, et incrémenter une variable numérique en cas de différence. Je m'y perd un peu avec les instruction compare. Merci d'avance ;o)
lupis
Merci ça m'a bien aidé et j'ai pu terminer mon programme!!! ps: avec un flingue celui qui tient le manche de la hache se calme. :o)
-----Message d'origine----- Bonjour, voici un exemple, Dim VarFic1 As String Dim VarFic2 As String Dim resultat As Byte Dim difference As Long ' difference = 0 ' assignation 2 prt + 2 ouvertures fics + 2 lecture fic
dans var VarFic1 et
VarFic2 ' resultat = StrComp(VarFic1, VarFic2, 1) If resultat <> 0 Then difference = difference + 1 ' MsgBox difference -- Merci, @+, bye, Joe : ---------------------------------------------------------- Avec une hache, celui qui tient le manche a toujours
Merci ça m'a bien aidé et j'ai pu terminer mon
programme!!!
ps: avec un flingue celui qui tient le manche de la hache
se calme. :o)
-----Message d'origine-----
Bonjour, voici un exemple,
Dim VarFic1 As String
Dim VarFic2 As String
Dim resultat As Byte
Dim difference As Long
'
difference = 0
'
assignation 2 prt + 2 ouvertures fics + 2 lecture fic
dans var VarFic1 et
VarFic2
'
resultat = StrComp(VarFic1, VarFic2, 1)
If resultat <> 0 Then difference = difference + 1
'
MsgBox difference
--
Merci, @+, bye, Joe : ng75@noos.fr
----------------------------------------------------------
Avec une hache, celui qui tient le manche a toujours
Merci ça m'a bien aidé et j'ai pu terminer mon programme!!! ps: avec un flingue celui qui tient le manche de la hache se calme. :o)
-----Message d'origine----- Bonjour, voici un exemple, Dim VarFic1 As String Dim VarFic2 As String Dim resultat As Byte Dim difference As Long ' difference = 0 ' assignation 2 prt + 2 ouvertures fics + 2 lecture fic
dans var VarFic1 et
VarFic2 ' resultat = StrComp(VarFic1, VarFic2, 1) If resultat <> 0 Then difference = difference + 1 ' MsgBox difference -- Merci, @+, bye, Joe : ---------------------------------------------------------- Avec une hache, celui qui tient le manche a toujours
Dans un premier temps une comparaison grossiere me suffit, mais vu que j'ignorais la procédure pour une comp. ligne par ligne ton prog va bien m'aider Merci beaucoup!
-----Message d'origine----- Salut,
Veux tu faire la comparaison ligne par ligne ? Octet par
octet (Êractère)
?
Voici une solution ligne à ligne :
Private Sub Form_Load() Dim k As Integer, sBuff As String Dim tblLignes() As String, tblLignes2() As String, tblTemp
() As String
Dim i As Integer, lTotDiff As Long 'ouverture fichier 1 k = FreeFile Open "C:Documents and SettingsngBureau1.txt" For
Binary As #k
sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
'ouverture fichier 2 k = FreeFile Open "C:Documents and SettingsngBureau2.txt" For
Binary As #k
sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, ,
vbTextCompare)
sBuff = ""
If UBound(tblLignes2) > UBound(tblLignes) Then 'on s'arrange pr que tblLignes soit tjrs le plus grand tblTemp = tblLignes2 tblLignes2 = tblLignes tblLignes = tblTemp Erase tblTemp End If
For i = 0 To UBound(tblLignes) If i > UBound(tblLignes2) Then 'hors imite donc diff lTotDiff = lTotDiff + 1 Else If tblLignes(i) <> tblLignes2(i) Then lTotDiff =
lTotDiff + 1
End If Next
MsgBox lTotDiff & " différence(s) trouvée(s) !",
vbInformation
Erase tblLignes Erase tblLignes2 End Sub
Faisable aussi à coup de Line Input, mais c'est plus lent.
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ .
Dans un premier temps une comparaison grossiere me suffit,
mais vu que j'ignorais la procédure pour une comp. ligne
par ligne ton prog va bien m'aider
Merci beaucoup!
-----Message d'origine-----
Salut,
Veux tu faire la comparaison ligne par ligne ? Octet par
octet (=caractère)
?
Voici une solution ligne à ligne :
Private Sub Form_Load()
Dim k As Integer, sBuff As String
Dim tblLignes() As String, tblLignes2() As String, tblTemp
() As String
Dim i As Integer, lTotDiff As Long
'ouverture fichier 1
k = FreeFile
Open "C:Documents and SettingsngBureau1.txt" For
Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
'ouverture fichier 2
k = FreeFile
Open "C:Documents and SettingsngBureau2.txt" For
Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, ,
vbTextCompare)
sBuff = ""
If UBound(tblLignes2) > UBound(tblLignes) Then
'on s'arrange pr que tblLignes soit tjrs le plus grand
tblTemp = tblLignes2
tblLignes2 = tblLignes
tblLignes = tblTemp
Erase tblTemp
End If
For i = 0 To UBound(tblLignes)
If i > UBound(tblLignes2) Then
'hors imite donc diff
lTotDiff = lTotDiff + 1
Else
If tblLignes(i) <> tblLignes2(i) Then lTotDiff =
lTotDiff + 1
End If
Next
MsgBox lTotDiff & " différence(s) trouvée(s) !",
vbInformation
Erase tblLignes
Erase tblLignes2
End Sub
Faisable aussi à coup de Line Input, mais c'est plus lent.
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
.
Dans un premier temps une comparaison grossiere me suffit, mais vu que j'ignorais la procédure pour une comp. ligne par ligne ton prog va bien m'aider Merci beaucoup!
-----Message d'origine----- Salut,
Veux tu faire la comparaison ligne par ligne ? Octet par
octet (Êractère)
?
Voici une solution ligne à ligne :
Private Sub Form_Load() Dim k As Integer, sBuff As String Dim tblLignes() As String, tblLignes2() As String, tblTemp
() As String
Dim i As Integer, lTotDiff As Long 'ouverture fichier 1 k = FreeFile Open "C:Documents and SettingsngBureau1.txt" For
Binary As #k
sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
'ouverture fichier 2 k = FreeFile Open "C:Documents and SettingsngBureau2.txt" For
Binary As #k
sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, ,
vbTextCompare)
sBuff = ""
If UBound(tblLignes2) > UBound(tblLignes) Then 'on s'arrange pr que tblLignes soit tjrs le plus grand tblTemp = tblLignes2 tblLignes2 = tblLignes tblLignes = tblTemp Erase tblTemp End If
For i = 0 To UBound(tblLignes) If i > UBound(tblLignes2) Then 'hors imite donc diff lTotDiff = lTotDiff + 1 Else If tblLignes(i) <> tblLignes2(i) Then lTotDiff =
lTotDiff + 1
End If Next
MsgBox lTotDiff & " différence(s) trouvée(s) !",
vbInformation
Erase tblLignes Erase tblLignes2 End Sub
Faisable aussi à coup de Line Input, mais c'est plus lent.
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ .
ng
ReSalut,
Ok, tu noteras que mon code est case sensitive, pour faire une comparaison non case sensitive, 3 solutions :
Soit insérer un Option Compare Text au début de ton module Soit changer If tblLignes(i) <> tblLignes2(i) Then en If LCase$(LtblLignes(i)) <> LCase$(tblLignes2(i)) Then Soit changer If tblLignes(i) <> tblLignes2(i) Then en If StrComp(LtblLignes(i),LtblLignes2(i) , vbTextCompare)=0 Then
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/
lupis a écrit :
Dans un premier temps une comparaison grossiere me suffit, mais vu que j'ignorais la procédure pour une comp. ligne par ligne ton prog va bien m'aider Merci beaucoup!
-----Message d'origine----- Salut,
Veux tu faire la comparaison ligne par ligne ? Octet par octet (Êractère) ?
Voici une solution ligne à ligne :
Private Sub Form_Load() Dim k As Integer, sBuff As String Dim tblLignes() As String, tblLignes2() As String, tblTemp () As String Dim i As Integer, lTotDiff As Long 'ouverture fichier 1 k = FreeFile Open "C:Documents and SettingsngBureau1.txt" For Binary As #k sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
'ouverture fichier 2 k = FreeFile Open "C:Documents and SettingsngBureau2.txt" For Binary As #k sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
sBuff = ""
If UBound(tblLignes2) > UBound(tblLignes) Then 'on s'arrange pr que tblLignes soit tjrs le plus grand tblTemp = tblLignes2 tblLignes2 = tblLignes tblLignes = tblTemp Erase tblTemp End If
For i = 0 To UBound(tblLignes) If i > UBound(tblLignes2) Then 'hors imite donc diff lTotDiff = lTotDiff + 1 Else If tblLignes(i) <> tblLignes2(i) Then lTotDiff = lTotDiff + 1 End If Next
Faisable aussi à coup de Line Input, mais c'est plus lent.
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ .
ReSalut,
Ok, tu noteras que mon code est case sensitive, pour faire une comparaison
non case sensitive, 3 solutions :
Soit insérer un Option Compare Text au début de ton module
Soit changer If tblLignes(i) <> tblLignes2(i) Then en If
LCase$(LtblLignes(i)) <> LCase$(tblLignes2(i)) Then
Soit changer If tblLignes(i) <> tblLignes2(i) Then en If
StrComp(LtblLignes(i),LtblLignes2(i) , vbTextCompare)=0 Then
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
lupis <cruxlupis@hotmail.com> a écrit :
Dans un premier temps une comparaison grossiere me suffit,
mais vu que j'ignorais la procédure pour une comp. ligne
par ligne ton prog va bien m'aider
Merci beaucoup!
-----Message d'origine-----
Salut,
Veux tu faire la comparaison ligne par ligne ? Octet par octet
(Êractère) ?
Voici une solution ligne à ligne :
Private Sub Form_Load()
Dim k As Integer, sBuff As String
Dim tblLignes() As String, tblLignes2() As String, tblTemp () As
String Dim i As Integer, lTotDiff As Long
'ouverture fichier 1
k = FreeFile
Open "C:Documents and SettingsngBureau1.txt" For Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
'ouverture fichier 2
k = FreeFile
Open "C:Documents and SettingsngBureau2.txt" For Binary As #k
sBuff = Space$(LOF(k))
Get #k, , sBuff
Close #k
tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
sBuff = ""
If UBound(tblLignes2) > UBound(tblLignes) Then
'on s'arrange pr que tblLignes soit tjrs le plus grand
tblTemp = tblLignes2
tblLignes2 = tblLignes
tblLignes = tblTemp
Erase tblTemp
End If
For i = 0 To UBound(tblLignes)
If i > UBound(tblLignes2) Then
'hors imite donc diff
lTotDiff = lTotDiff + 1
Else
If tblLignes(i) <> tblLignes2(i) Then lTotDiff = lTotDiff + 1
End If
Next
Faisable aussi à coup de Line Input, mais c'est plus lent.
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
.
Ok, tu noteras que mon code est case sensitive, pour faire une comparaison non case sensitive, 3 solutions :
Soit insérer un Option Compare Text au début de ton module Soit changer If tblLignes(i) <> tblLignes2(i) Then en If LCase$(LtblLignes(i)) <> LCase$(tblLignes2(i)) Then Soit changer If tblLignes(i) <> tblLignes2(i) Then en If StrComp(LtblLignes(i),LtblLignes2(i) , vbTextCompare)=0 Then
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/
lupis a écrit :
Dans un premier temps une comparaison grossiere me suffit, mais vu que j'ignorais la procédure pour une comp. ligne par ligne ton prog va bien m'aider Merci beaucoup!
-----Message d'origine----- Salut,
Veux tu faire la comparaison ligne par ligne ? Octet par octet (Êractère) ?
Voici une solution ligne à ligne :
Private Sub Form_Load() Dim k As Integer, sBuff As String Dim tblLignes() As String, tblLignes2() As String, tblTemp () As String Dim i As Integer, lTotDiff As Long 'ouverture fichier 1 k = FreeFile Open "C:Documents and SettingsngBureau1.txt" For Binary As #k sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
'ouverture fichier 2 k = FreeFile Open "C:Documents and SettingsngBureau2.txt" For Binary As #k sBuff = Space$(LOF(k)) Get #k, , sBuff Close #k tblLignes2 = Split(sBuff & vbCrLf, vbCrLf, , vbTextCompare)
sBuff = ""
If UBound(tblLignes2) > UBound(tblLignes) Then 'on s'arrange pr que tblLignes soit tjrs le plus grand tblTemp = tblLignes2 tblLignes2 = tblLignes tblLignes = tblTemp Erase tblTemp End If
For i = 0 To UBound(tblLignes) If i > UBound(tblLignes2) Then 'hors imite donc diff lTotDiff = lTotDiff + 1 Else If tblLignes(i) <> tblLignes2(i) Then lTotDiff = lTotDiff + 1 End If Next
Faisable aussi à coup de Line Input, mais c'est plus lent.
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ .