Comprarer duex fichiers txt

powerbull78 Messages postés 4 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 4 février 2008 - 30 janv. 2008 à 16:22
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 4 févr. 2008 à 18:57
Bonjour,

Mes notions dans ce domaine se limite à des scripts de connexions peu complexes.

Mon besoin:
J'ai un fichier txt qui me sert de fichier référence.
J'ai un fichier txt généré chaque jour.
Il faut que les deux fichiers soit semblable sinon alerte.

Merci.

8 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
30 janv. 2008 à 16:39
 Bonjour,

1) lecture du 1er fichier, ligne à ligne et implémentation Tableau1;
2) lecture du 2ème, ligne à ligne et implémentation Tableau2;
3) Comparaison tableaux.

On peux aussi passer par l' objet Dictionary.

Option Explicit
Dim objFso, Path, Fic1, Fic2
Dim i, r, imax
Dim objTextStream, strtmp1, strtmp2 Const ForReading 1, ForWriting 2, ForAppending=8

Path   = "C:\SCRIPTS\Fichiers"
Fic1  = "fichier0.txt"
Fic2  = "fichier1.txt"
imax = 0

Set objFso = Createobject("Scripting.FileSystemobject")
Set objTextStream = objFso.OpenTextFile(Path & Fic1, ForReading)
Do While Not objTextStream.AtEndOfStream
   strtmp1 = split(objTextStream.ReadLine, vbLf)
   For i = 0 to Ubound(strtmp1)
       imax = imax + 1
       ReDim Preserve Tableau1(1, imax)
       Tableau1(1, imax) = strtmp1(i)
   Next
Loop
objTextStream.Close

imax = 0
Set objTextStream = objFso.OpenTextFile(Path & Fic2, ForReading)
Do While Not objTextStream.AtEndOfStream
   strtmp2 = split(objTextStream.ReadLine, vbLf)
   For i = 0 to Ubound(strtmp2)
       imax = imax + 1
       ReDim Preserve Tableau2(1, imax)
       Tableau2(1, imax) = strtmp2(i)
   Next
Loop
objTextStream.Close

For r = 1 To imax
    If Tableau1(1, r) <> Tableau2(1, r) Then
        MsgBox "La ligne " & r & " est différente entre les 2 fichiers" &vbCrLf&vbCrLf&_
               "1er  tableau " & vbCrLf& Tableau1(1, r) &vbCrLf&vbCrLf&_
               "2ème tableau " & vbCrLf& Tableau2(1, r)
    End If
Next
Set objFso = Nothing
Set objTextStream = Nothing

jean-marc
0
powerbull78 Messages postés 4 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 4 février 2008
30 janv. 2008 à 17:05
Merci Jean-Marc !!!


C'est exactement ce qu'il me fallait.

Je voudrais remplacer la fonctionnalité "Msgbox" par un envoi de mail via une passerelle smtp.
Est il possible sous VBS de réaliser cette opération ?

Merci encore.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
30 janv. 2008 à 17:33
Re,

Google et CDO.Message donne, entre autres:
http://www.faqoe.com/rep/cs.php3

jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
30 janv. 2008 à 21:21
Re,

Autres exemples pour comparer deux fichiers .txt:

version Array:
Option ExplicitConst ForReading 1, ForWriting 2, ForAppending = 8
Dim objFso, strFicTxt1, strFictxt2, i
Dim arrLineFicTxt1, arrLineFicTxt2, strResult
strFicTxt1 = "C:\SCRIPTS\Fichiers\fichier1.txt"
strFictxt2 = "C:\SCRIPTS\Fichiers\fichier2.txt"
'
Set objFso = CreateObject("Scripting.FileSystemObject")
'
'Création de 2 tableaux contenant les lignes des 2 fichiers
arrLineFicTxt1 = FnReadFileTxt(strFicTxt1, strResult)
arrLineFicTxt2 = FnReadFileTxt(strFictxt2, strResult)
'Comparaison des 2 tableaux
For i = 0 To UBound(arrLineFicTxt1)
    If arrLineFicTxt1(i) <> arrLineFicTxt2(i) Then
       MsgBox "line" & i &vbCrLf&vbcr& _
              "file1" &vbTab& arrLineFicTxt1(i) &vbCrLf&vbCr&_
              "file2" &vbTab& arrLineFicTxt2(i)
    End If
Next
Set objFso = Nothing
'
'=========================
Function FnReadFileTxt(strFile, strResult)
   Dim objFile, arrLineFicTxt
   Set objFile = objFso.OpenTextFile(strFile, ForReading)
   'arrLineFicTxt est un tableau contenant toutes les lignes du .txt
   arrLineFicTxt = Filter(Split(objFile.ReadAll,vbCrLf), vbNullString)
   objFile.Close
   Set objFile = Nothing
   strResult = arrLineFicTxt
   FnReadFileTxt = strResult
End function
'=========================

version Dictionary:
Option ExplicitConst ForReading 1, ForWriting 2, ForAppending = 8
Dim objFso, strFicTxt1, strFictxt2, i
Dim objDicoFile1, objDicoFile2, strResult
strFicTxt1 = "C:\SCRIPTS\Fichiers\fichier1.txt"
strFictxt2 = "C:\SCRIPTS\Fichiers\fichier2.txt"
'
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objDicoFile1 = CreateObject("Scripting.Dictionary")
Set objDicoFile2 = CreateObject("Scripting.Dictionary")
'
'Création de 2 tableaux contenant les lignes des 2 fichiers
objDicoFile1 = FnReadFileTxt(strFicTxt1, strResult)
objDicoFile2 = FnReadFileTxt(strFictxt2, strResult)
'
'Comparaison des 2 dictionnaires
i = ""
For i = 0 To UBound(objDicoFile1)
    If objDicoFile1(i) <> objDicoFile2(i) Then
       MsgBox "line" & i &vbCrLf&vbcr& _
              "file1" &vbTab& objDicoFile1(i) &vbCrLf&vbCr&_
              "file2" &vbTab& objDicoFile2(i)
    End if
Next
Set objDicoFile1 = Nothing
Set objDicoFile2 = Nothing
Set objFso = Nothing
'
'=========================
Function FnReadFileTxt(strFile, strResult)
   Dim objFile, objDicoFile, arrLineFile, nbre_args
   'lecture fichier + création dictionnaire
   Set objFile = objFso.OpenTextFile(strFile, ForReading)
   Set objDicoFile = CreateObject("Scripting.Dictionary")
   nbre_args = 0
   Do while not objFile.AtEndOfStream
      arrLineFile = Split(objFile.ReadAll , vbCr)
      For i = LBound(arrLineFile) To UBound(arrLineFile)
          objDicoFile.Add nbre_args, arrLineFile(nbre_args)
          nbre_args = nbre_args +1
      Next
   Loop
   objFile.Close
   Set objFile = Nothing
   strResult = objDicoFile.Items
   FnReadFileTxt = strResult
End function
'=========================

>>> Je voudrais remplacer la fonctionnalité "Msgbox" par un envoi de mail via une passerelle smtp.
Le msgbox étant dans une boucle, il y aurait envoi d'un mail pour chaque ligne différente ???
Je suppose que ce n'est pas l'option choisie, donc pour quelle présentation du mail as-tu opté ???
(avec CDO.Message ou mailto ???, avec pièce jointe ???)

jean-marc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
powerbull78 Messages postés 4 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 4 février 2008
4 févr. 2008 à 17:31
Merci >> le script fonctionne à merveille.
Est il possible les valeurs "Path   "C:\SCRIPTS\Fichiers" Fic1  "fichier0.txt" Fic2  = "fichier1.txt" qui pointent sur un fichier txt afin d'avoir un script générique et un fichier comportants les UNCs ?
Merci.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
4 févr. 2008 à 17:50
 Bonjour,

Je n'ai pas très bien saisi ta question !
Parles-tu de l'objet WshController ???

jean-marc
0
powerbull78 Messages postés 4 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 4 février 2008
4 févr. 2008 à 17:58
En fait, je veux que les valeur

Path   = "C:\SCRIPTS\Fichiers"
Fic1  = "fichier0.txt"
Fic2  = "fichier1.txt"

soient inscrit sur un fichier txt à part et non sur inscrit en "dur" sur le script.

Mon besoin est que je dois avoir un script générique qui ne bouge pas et un fichier txt attaché au script où sont inscrit les valeurs Path, Fic1 et Fic2

Merci
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
4 févr. 2008 à 18:57
Re,

Autre possibilité:
A partir de la Console (ou d'un .bat):
c:\cscript Test_Args.vbs "c:\fichier1.txt" "c:\fichier2.txt"

'script Test.Args.vbs
Dim WshShell, objArgs
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments
If objArgs.Count = 2 Then
   WScript.Echo objArgs(0) &vbCrLf& objArgs(1)
   Call FnCompareFiles(objArgs(0),objArgs(1))
 Else
   MsgBox "ce script doit être lancé avec ....."
End If

Function FnCompareFiles(argFile1, argFile2)
Dim objFso, strFicTxt1, strFictxt2, i
....

jean-marc
0
Rejoignez-nous