[R] Rechercher plusieurs fois une valeur dans un fichier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
ludoo
Niveau 4
Niveau 4
Messages : 89
Enregistré le : lun. 11 août 2008 09:25
Localisation : Drôme 26
Status : Hors ligne

[R] Rechercher plusieurs fois une valeur dans un fichier

#1

Message par ludoo »

Bonsoir à tous,
voici mon probleme ,
j'utilise un logiciel qui log (jour,mois) le spooler d'impression (PaperCut Print Logger - http://www.papercut.com/), il crée un fichier txt ou csv du résultat.
dans ce fichier txt , il y a plusieurs info voici la liste:
Time,User,Pages,Copies,Printer,Document Name,Client,Paper Size,Language,Height,Width,Duplex,Grayscale,Size

Dans ce fichier il peut y avoir plusieurs fois le même user, comment faire pour avoir le résultat avec l'user sont total de Pages et Copies, je vois pas quel fonction utiliser.
Merci de votre aide.
Modifié en dernier par ludoo le dim. 19 juin 2011 20:33, modifié 1 fois.
Ludo
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..]Rechercher plusieurs fois même valeur ds un fichier

#2

Message par bloodwolff »

Stringregexp, Si tu as de la difficulté avec le pattern tu peux toujours poster un exemple de document à analyser ici , en message privé où en email :)
Compte skype : bloodwolfff
ludoo
Niveau 4
Niveau 4
Messages : 89
Enregistré le : lun. 11 août 2008 09:25
Localisation : Drôme 26
Status : Hors ligne

Re: [..] Rechercher plusieurs fois une valeur dans un fichie

#3

Message par ludoo »

bonjour,
voici le fichier du résultat fait par le logiciel.
les USER représentent des noms de personnes, par mesure de confidentialité j'ai changé les nom par USERX.
il faudrait lire le fichier ligne par ligne ,
pour chaque info [Time,User,Pages,Copies,Printer,Document Name,Client,Paper Size,Language,Height,Width,Duplex,Grayscale,Size,] trouvée les mettre ds une variable (un tableau ?),
puis lire le tableau , ça peut être une piste de script ?
Modifié en dernier par ludoo le mer. 17 août 2011 12:43, modifié 1 fois.
Ludo
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Rechercher plusieurs fois une valeur dans un fichie

#4

Message par mikell »

Dans ton log les infos sont séparées par des virgules, donc les funcs FileReadLine() puis StringSplit($line, ",") me paraissent adaptées, sommairement ça donnerait :

Code : Tout sélectionner

$file = FileOpen("log_spooler.txt", 0)
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$var = StringSplit($line, ",")
If StringInStr($line, $var[2]) Then ....  ; <== $var[2] c'est l'user
Wend
FileClose($file)
Modifié en dernier par mikell le dim. 19 juin 2011 16:03, modifié 2 fois.
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Rechercher plusieurs fois une valeur dans un fichie

#5

Message par jchd »

Un p'tite base SQLite ?
Allez, dis-moi si ça te va.
► Afficher le texte
L'avantage est que tu peux faire des stats bien plus pointues, par type d'emploi, par tous les critères imaginables.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Rechercher plusieurs fois une valeur dans un fichie

#6

Message par mikell »

jchd, je vais garder ce modèle de script (même si je ne suis pas sûr de l'utiliser souvent) :mrgreen:
Décidément, un p'tit tuto SQLite, ça serait bien...
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Rechercher plusieurs fois une valeur dans un fichie

#7

Message par jchd »

Oui, ça serait bien. Finaliser la compta de la boîte (très en retard) serait bien aussi !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Rechercher plusieurs fois une valeur dans un fichie

#8

Message par mikell »

La vie est un chemin semé d'embûches et de choix cornéliens :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ludoo
Niveau 4
Niveau 4
Messages : 89
Enregistré le : lun. 11 août 2008 09:25
Localisation : Drôme 26
Status : Hors ligne

Re: [..] Rechercher plusieurs fois une valeur dans un fichie

#9

Message par ludoo »

merci à vous pour les info et le script :D
un tuto sur SQLlite serait bienvenue
je voudrais afficher , l'user et le nombre de copie en A4 et A3 , je sais pas comment faire.
Ludo
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Rechercher plusieurs fois une valeur dans un fichie

#10

Message par jchd »

Essaye ce pavé :
► Afficher le texte
Tu trouveras un affichage de tableaux en HTML en faisant une recherche sur ce forum. Il y a des possibilités pour faire à peu près tout ce dont tu as besoin.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
ludoo
Niveau 4
Niveau 4
Messages : 89
Enregistré le : lun. 11 août 2008 09:25
Localisation : Drôme 26
Status : Hors ligne

Re: [..] Rechercher plusieurs fois une valeur dans un fichie

#11

Message par ludoo »

encore merci :D
je vais faire tour sur le forum pour le HTML , je vais utiliser ce script pour renseigner un fichier excel.
Ludo
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Rechercher plusieurs fois une valeur dans un fichie

#12

Message par jchd »

Argh ! Enfin, c'est ton choix.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
ludoo
Niveau 4
Niveau 4
Messages : 89
Enregistré le : lun. 11 août 2008 09:25
Localisation : Drôme 26
Status : Hors ligne

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

#13

Message par ludoo »

c plus simple et j'aurais aussi des graphiques.
Ludo
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

#14

Message par jchd »

Dans ce cas, exporte le tableau résultant de la lecture du .csv dans Excel avec l'UDF qui va bien.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
ludoo
Niveau 4
Niveau 4
Messages : 89
Enregistré le : lun. 11 août 2008 09:25
Localisation : Drôme 26
Status : Hors ligne

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

#15

Message par ludoo »

Bonjour,
dans cette requête je vois pas comment remplacer le nom de l'imprimante (LEXMARK-E352DN-RDC-01) par une variable

Code : Tout sélectionner

$res = _SQLite_GetTable2d($hDb, "select user as [Utilisateur], (select total(pages * copies) from log G where L.user = G.user and g.paper = 'A3') as [Pages A3 imprimées], (select total(pages * copies) from log G where L.user = G.user and g.paper = 'A4') as [Pages A4 imprimées] from log L where printer = 'LEXMARK-E352DN-RDC-01' group by user ;", $rows, $nrows, $ncols)
merci de votre aide.
Ludo
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

#16

Message par jchd »

Voyons ça :

Code : Tout sélectionner

local $ThePrinter = 'LEXMARK-E352DN-RDC-01'
$res = _SQLite_GetTable2d($hDb, "select user as [Utilisateur], (select total(pages * copies) from log G where L.user = G.user and g.paper = 'A3') as [Pages A3 imprimées], (select total(pages * copies) from log G where L.user = G.user and g.paper = 'A4') as [Pages A4 imprimées] from log L where printer = "&X($ThePrinter)&" group by user ;", $rows, $nrows, $ncols)
La fonction X($str) figure dans un post antérieur dans ce fil et sert à gérer les quotes éventuellement présentes dans la chaîne à transmettre à SQLite, pour éviter tout souci.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
ludoo
Niveau 4
Niveau 4
Messages : 89
Enregistré le : lun. 11 août 2008 09:25
Localisation : Drôme 26
Status : Hors ligne

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

#17

Message par ludoo »

merci.
Ludo
ludoo
Niveau 4
Niveau 4
Messages : 89
Enregistré le : lun. 11 août 2008 09:25
Localisation : Drôme 26
Status : Hors ligne

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

#18

Message par ludoo »

probleme de boucle
voici les bouts de code :

Code : Tout sélectionner

Func BE()
;~ Local $rows, $nrows, $ncols, $aUser, $MatchGroup
; Open Connection to the Active Directory
_AD_Open()
ReqBD_BE_1()
ResBE()
ReqBD_BE_2()
ResBE()
; Close Connection to the Active Directory
_AD_Close()

_SQLite_Close($hDb)
_SQLite_Shutdown()
EndFunc ;==>BE
la fonction ReqBD_BE_1() requete SQL , la fonction ResBE extraction des données de la requete ReqBD_BE_1()

code ResBE:

Code : Tout sélectionner

Func ResBE()
;~ Local $rows, $nrows, $ncols, $aUser, $MatchGroup
    for $i = 0 to $rows
;~ for $i = 0 to $rows step 1
    $i = $i +1
;~ MsgBox(0,"user","user "&$rows[$i][0] & "   nbs pages "&$rows[$i][2])
    $user = $rows[$i][0]
;~  $user = $rows[$i][$i]
    $pageA4 = $rows[$i][2]
    $pageA3 = $rows[$i][1]
;~  MsgBox(0,"user","user "&$user)
;~  MsgBox(0,"user","nbs pages "&$page)
;~  $aUser = _AD_RecursiveGetMemberOf($user, 10, 1)
    $aUser = _AD_GetUserGroups($user)
    If @error > 0 Then
        MsgBox(64, "Active Directory Functions - Example 1", "User '" & $user & "' has not been assigned to any group")
    Else
    ; For groups that are inherited, the return is the FQDN of the group or user, and the FQDN(s) of the group(s) it
    ; was inherited from, seperated by '|'
;~  _ArrayDisplay($aUser, "Active Directory Functions - Example 1 - Group names user '" & $user & "' is a member of")
    for $j = 1 to $aUser[0]

;~  MsgBox(0,"group user","user member of group "&$aUser[$j])
    $filegroup = FileOpen("groupBE.txt",1)
    If $file = -1 Then
        MsgBox(0, "Error", "Unable to open file.")
        Exit
    EndIf
    FileWriteLine($filegroup, $aUser[$j] & @CRLF)
    FileClose($filegroup)



    Next
    EndIf
    $filegroup = FileOpen("groupBE.txt",0)
    while 1
    If $file = -1 Then
        MsgBox(0, "Error", "Unable to open file.")
        Exit
    EndIf
    $rFile = FileReadLine($filegroup)
    If @error = -1 Then ExitLoop
    $cn = StringSplit($rFile, ",")
;~  MsgBox(0, "group", $rFile)
;~  MsgBox(0, "group cn=", $cn[1])
    if $cn[1] = "CN=xxxx" Or $cn[1] = "CN=xxxx" Or $cn[1] = "CN=xxxx" Or $cn[1] = "CN=xxxx" Or $cn[1] = "CN=xxxx" Or $cn[1] = "CN=xxxx" Or $cn[1] = "CN=xxxx" Or $cn[1] = "CN=xxxx" Or $cn[1] = "CN=xxxx" Then
        $filecount = FileOpen("countBE.txt",1)
        FileWriteLine($filecount, $pageA4)
        FileWriteLine($filecount, $pageA3)
        FileClose($filecount)
        ExitLoop
    EndIf

;~  FileClose($filegroup)
    WEnd
    FileClose($filegroup)

Next
EndFunc ;==> ResBE
lors de l'exécution de la première fonction "ReqBD_BE_1()" et "ResBE()" pas de probleme , par contre quand il passe à la 2eme fonction "ReqBD_BE_2()" , message d'erreur :
Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$user = $rows[$i][0]
$user = ^ ERROR

d'ou peut venir le probleme , j'ai changé l'ordre d'exécution des fonctions , cela reproduit le même probleme pour la 2eme fonction qui suit .
Ludo
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

#19

Message par jchd »

N'ayant pas le code de tes fonctions de requête, j'ai du mal à localiser le problème avec précision.
Par contre, je vois que tu passes à ta fonction d'exploitation des résultats un paramètre $nrows qui, selon toute bonne logique intuitive, serait le nombre de rangées du résultat. Tu te lances illico dans une boucle For $i = 0 to $rows, qui comprend $nrows + 1 éléments ... d'où un sérieux doute sur la borne $nrows employée. Change cette ligne par For $i = 0 to $rows - 1 et dis-nous si ça explose encore.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
ludoo
Niveau 4
Niveau 4
Messages : 89
Enregistré le : lun. 11 août 2008 09:25
Localisation : Drôme 26
Status : Hors ligne

Re: [R] Rechercher plusieurs fois une valeur dans un fichier

#20

Message par ludoo »

voici le code de la requete :

Code : Tout sélectionner

Func ReqBD_BE_1()
$res = _SQLite_GetTable2d($hDb, "select user as [Utilisateur], (select total(pages * copies) from log G where L.user = G.user and g.paper = 'A3') as [Pages A3 imprimées], (select total(pages * copies) from log G where L.user = G.user and g.paper = 'A4') as [Pages A4 imprimées] from log L where printer = "& X($impBE1)&" group by user ;", $rows, $nrows, $ncols)
EndFunc
même erreur avec

Code : Tout sélectionner

For $i = 0 to $rows - 1
Ludo
Répondre