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 :

Additionner des heures notées dans un fichier .txt


Sujet :

VBScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut Additionner des heures notées dans un fichier .txt
    Bonjour,

    J'ai terminé une partie de mon projet grâce à ce forum et j'en suis bien content, merci à Pitchalov qui m'as bien aidé.
    Mon problème maintenant c'est que j'ai un fichier "rapport.txt" qui contient ça:

    Date Durée Photos Username
    16.09.2009 01:07:10 74 Jean
    16.09.2009 01:09:42 12 Jean
    16.09.2009 01:10:33 5 George
    16.09.2009 01:12:01 15 George
    16.09.2009 00:00:41 20 Jean
    16.09.2009 00:01:23 10 Jean
    16.09.2009 00:00:38 2 Raymond
    16.09.2009 00:02:37 43 Raymond
    16.09.2009 01:40:22 6 Jean

    J'aimerai obtenir la somme en minutes et la somme des photos pour chacun des utilisateurs. ex: ça m'écrit dans un autre fichier: raymond: 683min, 332photos, jean: 23min, 15photos; George: 232min, 234photos.
    J'ai écris un début qui permet de lire chaque ligne du fichier rapport.txt.
    Je ne sais pas comment compter les heures des lignes d'un user défini et en faire la somme. J'ai vu qu'il y a une fonction recherche de pattern mais j'arrive pas à l'utiliser, je me dis que mes pattern (les users) sont tous différents, le pattern doit changer aussi. J'espère que c'est faisable, avec le temps ce fichiers rapport.txt contiendra une bonne trentaine d'user différents. Ca m'aiderai bien si quelqu'un pouvait se pencher sur mon problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim filesys, text, readfile, ligne
    set filesys = CreateObject("Scripting.FileSystemObject")
    set readfile = filesys.OpenTextFile("C:\Documents and Settings\All Users\Documents\rapport.txt", 1, false)
    do while readfile.AtEndOfStream=false
    ligne = readfile.ReadLine
    'wscript.echo ligne
    loop
    readfile.close

  2. #2
    Membre chevronné Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Par défaut
    Salut.

    Une possibilité serait :
    - Création d'un tableau double (X, 3) qui contiendra pour chaque ligne un tableau de correspondance (user, time, nbPhotos)
    - pour chaque ligne lue, récupération des infos voulues (tu peux utiliser Split, qui te transformera ta chaine en tableau)
    - Vérification dans le tableau double que l'user existe. S'il n'existe pas, création d'une nouvelle ligne avec l'user. S'il existe, incrémentation de time et nbPhoto de l'user en question.

    Tu peux utiliser Excel pour ça, mais ça alourdit grandement le script.
    Sinon tu peux t'en sortir en utilisant des Array de VBS

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Merci Pitchalov, mais je bloque toujours à l'étape récupération de l'heure de la première ligne et l'additionner à la deuxième ligne si l'user est le même.
    J'ai changé le format de rapport.txt pour qu'il indique le nombre de photos au format 0000 pensnat que ça allait me simplifier la vie pour la récupération mais je sais pas comment l'écrire

    Date Durée Photos Username
    16.09.2009 01:07:10 0074 Jean
    16.09.2009 01:09:42 0012 Jean
    16.09.2009 01:10:33 0005 George
    16.09.2009 01:12:01 0015 George
    16.09.2009 00:00:41 0020 Jean
    16.09.2009 00:01:23 0010 Jean
    16.09.2009 00:00:38 0002 Raymond
    16.09.2009 00:02:37 0043 Raymond
    16.09.2009 01:40:22 0006 Jean

    J'ai ça pour l'instant:

    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
    Dim filesys, readfile, r, heure, t1(3)
    set filesys = CreateObject("Scripting.FileSystemObject")
    set readfile = filesys.OpenTextFile("C:\Documents and Settings\All Users\Documents\rapport.txt", 1, false)
    do while readfile.AtEndOfStream=false
    r = readfile.ReadLine
    vraijour=Mid(r,1,2)
    vraimois=Mid(r,4,2)
    vraian=Mid(r,7,4)
    vraieheure=Mid(r,12,2)
    vraieminute=Mid(r,15,2)
    vraiesec=Mid(r,18,2)
    photos = Mid(r,21,4)
    user = Mid(r,26,20)
    jour = (vraijour & "." & vraimois & "." & vraian)
    heure=(vraieheure & ":" & vraieminute & ":" & vraiesec)
    t1(0)=jour:t1(1)=heure:t1(2)=photos:t1(3)=user
    wscript.echo join(t1)
    loop
    readfile.close
    je ne comprend pas comment garder en mémoire l'heure de la ligne Jean et l'additionner avec la prochaine ligne Jean, garder en mémoire le résultat, et l'additionner avec la prochaine etc... et faire ça pour chaque prénom????

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Voilà, j'en suis arrivé là, ça fonctionne (seulement pour les heures) mais c'est la technique "coup de massue". C'est à dire que pour chaque utilisateur que je trouve dans le fichier rapport.txt je dois ajouter ces lignes, ex: pour le user george

    Else If t1(3) = "george" then
    sumtime4 = sumtime4 + (t1(1))
    user4 = "george"

    et ajouter ça à la fin :

    f.Write (sumtime1 & vbtab & user1 & vbnewline & sumtime2 & vbtab & user2 & vbnewline & sumtime3 & vbtab & user3 & vbnewline & sumtime4 & vbtab & user4 & vbnewline)

    c'est un script vraiment lourd et je ne vois pas comment l'alléger.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Dim filesys, readfile, r, heure, t1(3)
    set filesys = CreateObject("Scripting.FileSystemObject")
    set readfile = filesys.OpenTextFile("C:\Documents and Settings\All Users\Documents\rapport.txt", 1, false)
    do while readfile.AtEndOfStream=false
    r = readfile.ReadLine
    'wscript.echo r
    vraijour=Mid(r,1,2)
    vraimois=Mid(r,4,2)
    vraian=Mid(r,7,4)
    heure=Mid(r,12,2)
    minutes=Mid(r,15,2)
    secondes=Mid(r,18,2)
    photos = Mid(r,21,4)
    user = Mid(r,26,20)
    jour = (vraijour & "." & vraimois & "." & vraian)
    heures=(heure & ":" & minutes & ":" & secondes)
    'minutes= (60*(Type(vraieheure))) + (Type(vraieminute))
      'wscript.echo heure
    If IsDate(heures) Then
      d = (CDate(heures))
      End If
      'wscript.echo d
    Tempsmin = (Hour(d)*60) + (Minute(d))
    	'wscript.echo Tempsmin
     
    t1(0)=jour:t1(1)=Tempsmin:t1(2)=photos:t1(3)=user
     'wscript.echo (t1(3))
     
    If t1(3) = "Jean" then
    sumtime1 = sumtime1 + (t1(1))
    user1 = "Jean"
    Else If t1(3) = "newuser" then
    sumtime2 = sumtime2 + (t1(1))
    user2 = "newuser"
    Else If t1(3) = "toto" then
    sumtime3 = sumtime3 + (t1(1))
    user3 = "toto"
    Else If t1(3) = "george" then
    sumtime4 = sumtime4 + (t1(1))
    user4 = "george"
    End If
    End If
    End If
    End If
    'wscript.echo sumtime
     
    loop
    readfile.close
     
    Set Fso = CreateObject("Scripting.FileSystemObject")
      Set f = Fso.OpenTextFile("C:\Documents and Settings\All Users\Documents\totalclients2.txt", 8)
          f.Write (sumtime1 & vbtab & user1 & vbnewline & sumtime2 & vbtab & user2 & vbnewline & sumtime3 & vbtab & user3 & vbnewline & sumtime4 & vbtab & user4 & vbnewline)
    'wscript.echo sumtime & vbtab & user & vbnewline

  5. #5
    Membre chevronné Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Par défaut
    Salut.

    Effectivement, ce que tu as fait ça fonctionne, mais pour combien de temps?...
    Ca vaut pas le coup de devoir faire une modif pour chaque nouveau User.

    Je reste sur mon idée de tableau double.

    Voici un exemple, que tu pourras adapter à ton code une fois digéré :
    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
    Set objFso = CreateObject("Scripting.FileSystemObject")
    Set objInfoFile = objFso.OpenTextFile(".\info.txt", 1)
    Dim arrUsers ()
    ReDim arrUsers(2, 0)
    Do While Not objInfoFile.AtEndOfStream
    	arrTemp = Split(objInfoFile.ReadLine)
    	i = 0
    	boolUserFind = False
    	If arrTemp(1) = arrUsers(0, i) Then boolUserFind = True
    	Do While boolUserFind = False AND i < Ubound(arrUsers, 2)
    		i = i + 1
    		If arrTemp(1) = arrUsers(0, i) Then boolUserFind = True
    	Loop
    	If boolUserFind = True Then
    		arrUsers(1, i) = CInt(arrUsers(1, i)) + CInt(arrTemp(0))
    	Else
    		Redim Preserve arrUsers (2, Ubound(arrUsers, 2) + 1)
    		arrUsers(0, Ubound(arrUsers, 2) - 1) = arrTemp(1)
    		arrUsers(1, Ubound(arrUsers, 2) - 1) = arrTemp(0)
    	End If	
    Loop
    Redim Preserve arrUsers (2, Ubound(arrUsers, 2) - 1)
    strTemp = ""
    For i = 0 To Ubound(arrUsers, 2)
    	strTemp = strTemp & arrUsers(0, i) & vbTab & arrUsers(1, i) & vbCrLf
    Next
    WScript.Echo strTemp
    Ce code est appliqué au fichier info.txt du même dossier, contenant :
    13 tata
    118 tutu
    15 titi
    45 toto
    14 titi
    13 tata
    28 tutu
    123 toto
    997 titi
    1 tutu
    12 tata
    35 titi
    100 toto
    3 toto
    Et le résultat est :
    tata 38
    tutu 147
    titi 1061
    toto 271
    L'idée, c'est d'incrémenter ton tableau à chaque nouvel utilisateur rencontré dans le fichier, et de renseigner les infos pour les utilisateurs existant déjà.

    C'est un peu lourd et barbant à mettre en place, mais une fois réalisé tu n'y touches plus.

    Bon courage

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Super, merci beaucoup je vais travailler là dessus. Pour l'instant je suis pommé mais c'est un bon exercice, en tous cas ça marche!

  7. #7
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    salut,
    quand je lis ça, mes yeux piquent et je vous propose mon grundsel ...
    les expression régulières et l'objet dictionary permettent de régler le problème en quelques lignes
    le fichier en entrée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Date Durée Photos Username
    16.09.2009 01:07:10 0074 Jean
    16.09.2009 01:09:42 0012 Jean
    16.09.2009 01:10:33 0005 George
    16.09.2009 01:12:01 0015 George
    16.09.2009 00:00:41 0020 Jean
    16.09.2009 00:01:23 0010 Jean
    16.09.2009 00:00:38 0002 Raymond
    16.09.2009 00:02:37 0043 Raymond
    16.09.2009 01:40:22 0006 Jean
    la moulinette
    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
    Option Explicit
    Dim oFso, sData, oReg,  oMatches, oDic, iIndex, oFile, oKeys, oItems, n , aData
    Set oFso = CreateObject("Scripting.FileSystemObject")
    'ne pas utilisr ReadAll si le fichier à ouvrir contient des millers de lignes...
    sData = oFso.OpenTextFile("C:\Install\Perso\Vbs_Developpez\Test001.TXT", 1, false).ReadAll
    Set oReg=New RegExp
    oReg.Pattern=" [a-zA-Z0-9:]+"
    oReg.Global = True
    Set oMatches = oReg.Execute(sData)
    If oMatches.Count > 0 Then
       Set oDic = CreateObject("Scripting.Dictionary")
       'les indices 0 à 2 sont zappés (ligne d'en-tête)
       For iIndex = 5 to (oMatches.Count - 1) Step 3
          If oDic.Exists(oMatches(iIndex).Value) Then
    	aData = Split(oDic.Item(oMatches(iIndex).Value),"|")      	       
          	oDic.Item(oMatches(iIndex).Value) = TimeValue(aData(0)) + TimeValue(oMatches(iIndex-2).Value) & "|" & CInt(aData(1)) + CInt(oMatches(iIndex-1).Value)
          Else
             oDic.Add oMatches(iIndex).Value, oMatches(iIndex-2).Value & "|" & oMatches(iIndex-1).Value
          End If	      
       Next
    End If
    If oDic.Count > 0 Then
       Set oFile = oFso.OpenTextFile("C:\Install\Perso\Vbs_Developpez\TotalClients.TXT", 8, True)
       oKeys = oDic.Keys
       oItems = oDic.Items
       For n = 0 to oDic.Count - 1
          oFile.Write oKeys(n) & vbtab & Split(oItems(n),"|")(0) & " h:mn:s " & Split(oItems(n),"|")(1) & " photos" & vbtab
       Next
    End If
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Excellent, moi aussi les yeux me piquent, j'ai la tête chaude, mais j'ai réussi, ça marche.
    Pour Omen999 il y a un problème si par ex jean a passé 18h pendant plusieurs jours, le résultat me donne plusieurs hh:mm:ss pour jean. est-ce que c'est possible d'écrire un résultat d'heures au format hhhhh:mm:ss (99999 pour les heures).
    J'ai rencontré le même problème en triturant le script de Pitchalov. C'est pourquoi j'ai changé mon fichier rapport.txt pour qu'il affiche un résultat en minutes et plus en hh:mm:ss.
    Le fichier rapport.txt a cette tête la:

    23.09.2009 00:00:45 0000 min 9999 photos Jean
    23.09.2009 00:01:47 0001 min 0000 photos Alain
    23.09.2009 00:01:47 0001 min 0000 photos George
    23.09.2009 00:01:47 0001 min 0000 photos George
    23.09.2009 00:00:45 0093 min 0000 photos Jean
    23.09.2009 00:01:02 0001 min 0000 photos Jean
    23.09.2009 00:01:39 0001 min 9999 photos Jean
    23.09.2009 00:01:44 8192 min 0001 photos newuser
    23.09.2009 00:01:44 8192 min 0001 photos newuser
    23.09.2009 00:01:44 8192 min 0001 photos newuser

    et voilà le scrismpts:

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Set objFso = CreateObject("Scripting.FileSystemObject")
    Set objInfoFile = objFso.OpenTextFile("C:\Documents and Settings\All Users\Documents\rapport.txt", 1)
    Dim arrUsers ()
    ReDim arrUsers(7, 0)
    Do While Not objInfoFile.AtEndOfStream
    arrTemp = Split(objInfoFile.ReadLine)
    i = 0
    boolUserFind = False
    If arrTemp(6) = arrUsers(0, i) Then boolUserFind = True
    Do While boolUserFind = False AND i < Ubound(arrUsers, 2)
    i = i + 1
    If arrTemp(6) = arrUsers(0, i) Then boolUserFind = True
    Loop
    If boolUserFind = True Then
    arrUsers(1, i) = CInt(arrUsers(1, i)) + CInt(arrTemp(2))
    arrUsers(2, i) = CInt(arrUsers(2, i)) + CInt(arrTemp(4))
     
    Else
    Redim Preserve arrUsers (7, Ubound(arrUsers, 2) + 1)
    arrUsers(0, Ubound(arrUsers, 2) - 1) = arrTemp(6)
    arrUsers(1, Ubound(arrUsers, 2) - 1) = arrTemp(2)
    arrUsers(2, Ubound(arrUsers, 2) - 1) = arrTemp(4)
    End If
    Loop
    Redim Preserve arrUsers (7, Ubound(arrUsers, 2) - 1)
     
    strTemp = ""
    For i = 0 To Ubound(arrUsers, 2)
    If Len(arrUsers(1, i)) = 1 Then
    		M = "0000" & arrUsers(1, i)
    	End If
    If Len(arrUsers(1, i)) = 2 Then
    		M = "000" & arrUsers(1, i)
    	End If
    If Len(arrUsers(1, i)) = 3 Then
    		M = "00" & arrUsers(1, i)
    	End If
    If Len(arrUsers(1, i)) = 4 Then
    		M = "0" & arrUsers(1, i)
    	End If
    If Len(arrUsers(1, i)) = 5 Then
    		M = arrUsers(1, i)
    	End If
    If Len(arrUsers(2, i)) = 1 Then
    		N = "0000" & arrUsers(2, i)
    End If
    If Len(arrUsers(2, i)) = 2 Then
    		N = "000" & arrUsers(2, i)
    End If
    If Len(arrUsers(2, i)) = 3 Then
    		N = "00" & arrUsers(2, i)
    End If
    If Len(arrUsers(2, i)) = 4 Then
    		N = "0" & arrUsers(2, i)
    End If
    If Len(arrUsers(2, i)) = 5 Then
    		N = arrUsers(2, i)
    End If
    strTemp =strTemp & arrUsers(0, i) & vbTab & M & " " & "min" & vbTab & N & " " & "photos" & vbnewline 
    Next
     
    Set Fso = CreateObject("Scripting.FileSystemObject")
      Set f = Fso.OpenTextFile("C:\Documents and Settings\All Users\Documents\totalclients.txt", 2)
          f.Write (strTemp)
    WScript.Echo strTemp
    Et voilà le résultat de totalclients.txt

    Jean 10254 min 38061 photos
    George 01652 min 00001 photos
    newuser 01652 min 00001 photos
    Alain 40958 min 00005 photos

    Le problème c'est qu'en utilisant les minutes je suis limité à 65536, ex: ce qui fait qu'un user ne peux pas prendre plus de 480photos sur 68jours sans bugger, ou alors passer 8h par jour sur 68jours.

    Alors comment obtenir une somme en hhhhh:mm:ss?????

  9. #9
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    si les durées excèdent 24h, il faut mieux s'orienter vers une valeur unique en minutes même s'il est toujours
    possible de gérer les jours grâce à une 3ème valeur dans l'item du dictionnaire (ex: jour|heure:minute:seconde|nb photos)
    pour ce qui est de la limite des 65536, il suffit de remplacer tous les CInt par des CLng (entier long sur 4 octets)
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  10. #10
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    même s'il est toujours
    possible de gérer les jours grâce à une 3ème valeur dans l'item du dictionnaire (ex: jour|heure:minute:seconde|nb photos)
    j'adore m'autoquoter ...
    la solution complète:
    fichier d'entrée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Date Durée Photos Username
    16.09.2009 20:07:10 50074 Jean
    16.09.2009 08:09:42 20012 Jean
    16.09.2009 01:10:33 0005 George
    16.09.2009 01:12:01 0015 George
    16.09.2009 06:00:41 0020 Jean
    16.09.2009 17:01:23 0010 Jean
    16.09.2009 00:00:38 80002 Raymond
    16.09.2009 00:02:37 0043 Raymond
    16.09.2009 04:40:22 0006 Jean
    la moulinette (deux lignes ajoutées + quelques modifs sur d'autres)
    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
    Option Explicit
    Dim oFso, sData, oReg, oMatches, oDic, iIndex, oFile, oKeys, oItems, n , aData, tBufValue
    Set oFso = CreateObject("Scripting.FileSystemObject")
    'ne pas utilisr ReadAll si le fichier à ouvrir contient des millers de lignes...
    sData = oFso.OpenTextFile("C:\Install\Perso\Vbs_Developpez\Test001.TXT", 1, false).ReadAll
    Set oReg=New RegExp
    oReg.Pattern=" [\w:éè]+"
    oReg.Global = True
    Set oMatches = oReg.Execute(sData)
    If oMatches.Count > 0 Then
       Set oDic = CreateObject("Scripting.Dictionary")
       'les indices 0 à 2 sont zappés (ligne d'en-tête)
       For iIndex = 5 to (oMatches.Count - 1) Step 3
          If oDic.Exists(oMatches(iIndex).Value) Then
    	aData = Split(oDic.Item(oMatches(iIndex).Value),"|")  
    	tBufValue = TimeValue(aData(1)) + TimeValue(oMatches(iIndex-2).Value)
    	'incrémente le compteur jour si + de 24h
    	If (TimeValue(tBufValue) < TimeValue(aData(1))) or (TimeValue(tBufValue) < TimeValue(oMatches(iIndex-2).Value)) Then aData(0) = aData(0) + 1
          	oDic.Item(oMatches(iIndex).Value) = aData(0) & "|" & TimeValue(tBufValue)  & "|" & CLng(aData(2)) + CLng(oMatches(iIndex-1).Value)
          Else
             oDic.Add oMatches(iIndex).Value, "0|" & oMatches(iIndex-2).Value & "|" & oMatches(iIndex-1).Value
          End If	      
       Next
    End If
    If oDic.Count > 0 Then
       Set oFile = oFso.OpenTextFile("C:\Install\Perso\Vbs_Developpez\TotalClients.TXT", 8, True)
       oKeys = oDic.Keys
       oItems = oDic.Items
       For n = 0 to oDic.Count - 1
          oFile.Write oKeys(n) & vbtab & Split(oItems(n),"|")(0) & ":" & Split(oItems(n),"|")(1) & " j:h:mn:s " & Split(oItems(n),"|")(2) & " photos" & vbtab
       Next
    End If
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

Discussions similaires

  1. lire des valeurs vides dans un fichier txt
    Par bakaratoun dans le forum MATLAB
    Réponses: 5
    Dernier message: 14/12/2009, 16h15
  2. Réponses: 6
    Dernier message: 26/05/2008, 20h08
  3. Réponses: 4
    Dernier message: 28/08/2006, 14h47
  4. Remplacer / Supprimer des données dans un fichier txt
    Par PedroBD dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2006, 13h33
  5. Réponses: 5
    Dernier message: 21/10/2005, 11h48

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