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 :

Récupérer nbr total de lignes d'une "Sub" & nbr total de lignes d'un Script.


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut Récupérer nbr total de lignes d'une "Sub" & nbr total de lignes d'un Script.
    Bonjour,

    Suite à mon poste précédemment, ou j'ai réussi à résoudre mon problème tout seul, je suis en train de bosser actuellement sur une optimisation de celui ci.
    >>Sujet Précédent<<.

    Il me faut pour ça absolument relever le numéro de la ligne à chaque fois que j’appelle ma fonction (StartIE) pour pouvoir calculer en fonction du numéro de la ligne relevé, le pourcentage automatique de ma barre de progression (je devrais pouvoir me débrouiller pour cette étape).


    Donc un exemple tout con.

    Un script d'ouverture de session fait 1800 lignes.
    Je veux donc qu'a la première ligne, mon % démarre à 0%, logique.
    A la 1800 ème ligne, il sera donc à 100%.

    Pour ça il faut donc que je relève régulièrement la valeur de la ligne pour en déduire un pourcentage d'avancement !
    Et c'est sur cette étape que je bloque.

    Tout ce que j'ai réussi à faire de moi même est ce début de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim objFSO, strTextFile, strRead, arrline, intFulllines, intSublines
    CONST ForReading = 1
     
    strTextFile = "???.vbs"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    strRead = objFSO.OpenTextFile(strTextFile,ForReading).ReadAll
     
    arrline = Split(strRead,vbCrLf)
     
    intFulllines = UBound(arrline) +1
    intSublines = ..........
     
    Set objFSO = Nothing
    Merci pour ceux qui prendrons du temps sur mon problème

    Je posterai des MAJ si je trouve quelque chose..
    Bonne journée

  2. #2
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Bonjour,

    Bon j'ai trouvé comment j'allais faire, mais il vas me falloir de l'aide cette fois !
    Je compte reprendre le script ci-dessus pour compter les lignes ENTRE des procédures "Sub" avec un compteur


    Le but étant d'avoir à la fin un pourcentage du déroulement du script DANS cette fonction.
    La déclaration se fera par les "Sub" et les "End Sub" = Nombre total de lignes entre la procédure.


    Il y aura un compteur qui totalisera LE NOMBRE TOTAL DE LIGNES.
    intFulllines
    Et il y a aura un compteur avec un ré-incrémentation à 0 à chaque fois qu'il voit un "Sub" passer dans le Script.
    intSublines

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim objFSO, strTextFile, strRead, arrline, intFulllines, intSublines
    CONST ForReading = 1
     
    strTextFile = "???.vbs"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    strRead = objFSO.OpenTextFile(strTextFile,ForReading).ReadAll
     
    arrline = Split(strRead,vbCrLf)
     
    intFulllines = UBound(arrline) +1
    intSublines ..........
     
    Set objFSO = Nothing
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub
    ' ***
    ' ***
    End Sub
    Ici intSublines aura la valeur 3 (ou 2 je sais pas...)


    Il faut donc que je travaille les "options" de la fonction split !!

    Lui dire que arrline=(intSubline) si il contient ou lis ("End Sub")
    Et de la même manière, intSubline = 0 si il contient ou lis ("Sub") (ré-incrémentation)

    Une fois que j'ai ces deux valeurs la, je peux faire le calcul suivant:

    3 (lignes de la Sub) / 1000 (lignes total du script) x 100 = ? % du script

    Et avec ca je pourrais résoudre donc mon problème
    J'ai bien réfléchis comme vous pouvez le voir, mais j'ai besoin de personnes pour m'aider un peu, c'est peu être pas dur, mais comme je m'auto-forme depuis 1 mois, j'ai un peu du mal.

    Merci pour ceux qui prendrons du temps à lire mon paté, et bonne journée à tous !

    Q.

  3. #3
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    MAJ du script sur lequel je bosse en ce moment:

    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
    Dim objFSO, strTextFile, strRead, arrline, intFulllines, intSublines
    Const ForReading = 1
    Const ScriptName = "???.vbs"
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    strRead = objFSO.OpenTextFile(ScriptName,ForReading).ReadAll
    arrline = Split(strRead,vbCrLf)
     
    intFulllines = UBound(arrline) +1
    intSublines = 3
     
    intPercent = intSublines / intFulllines * 100
     
    MsgBox "Nb Lignes de la Sub: " & intSublines & vbCrLf & "Nb Lignes du Script: "_
     & intFulllines &  vbCrLf & "Pourcentage: " & intPercent & "%", vbInformation,"Fonction"
     
    Set objFSO = Nothing
    ' =====================
     
    Sub Fonction
    ' ***
    ' ***
    ' ***
    End Sub
    Voila ce que le Script aura à remplir comme rôle. C'est exemple pour vous montrer le fonctionnement de mon bout de code, il reste la partie surement la plus dur du script: obtenir le nombre de lignes de la "Sub fonction" automatiquement.

    En gros il faudrait lui spécifier que lorsqu'il voit une ligne avec "Sub", il retourne son compteur à 0, et que lorsque qu'il voit "End Sub", qu'il ressortent la valeur pour faire le petit calcul

    Et à chaque fois qu'il ne vois rien il se crédite d'un compteur +1
    (intSublines = intSublines + 1)

    J'essaye d'avancer de mon côté ..

  4. #4
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Bonjour,

    Bon bah je me retape un monologue

    Version du code qui pourrais fonctionner (commence bien à lire à partir de "Sub", mais ne s’arrête pas à "End Sub".. => pour tester augmentez le nombre d'espace de lignes après le End Sub)


    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
    Dim objFSO, strReadAll, strReadSub, arrline, intFulllines, intSublines, intPercent
    Const ForReading = 1
    Const ScriptName = "???.vbs"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    strReadAll = objFSO.OpenTextFile(ScriptName,ForReading).ReadAll
    arrline = Split(strReadAll,vbCrLf)
     
    intFulllines = UBound(arrline) +1
     
    Set strReadSub = objFSO.OpenTextFile(ScriptName,ForReading)
    Do Until strReadSub.AtEndOfStream
    strNextLine = strReadSub.Readline
     
    If strNextLine > "Sub" Then
    	intSublines = 0
    	If strNextLine > "End Sub" Then
    		intSublines = intSublines
    		Else intSublines = 0
    	End If
    	Else
    	intSublines = intSublines + 1	
    End If
    Loop
     
    intPercent = intSublines / intFulllines * 100
     
    MsgBox "Nb Lignes de la Sub: " & intSublines & vbCrLf & "Nb Lignes du Script: " & intFulllines & vbCrLf & "Pourcentage: " & intPercent & "%", vbInformation,"Fonction"
     
    ' ********************
    Sub A
    ' ***
    ' ***
    ' ***
    ' ***
    End Sub
     
    Set objFSO = Nothing
    Ou se trouve mon erreur pour que compteur ne s'arrête pas à "End Sub" ?

  5. #5
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Essaie avec ce
    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
     Option Explicit
     
     Const  ForReading = 1
     Dim Fich, intSublines, intPercent, strNextLine
     Dim objFSO, strReadAll, strReadSub, arrline
     
     Const ScriptName = "FindSub.vbs" ' Mettre ici le nom du fichier à traiter
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set Fich = objFSO.OpenTextFile(ScriptName,ForReading)
    strReadAll = Fich.ReadAll
    ' nombre total de ligne du fichier y compris les sauts de lignes
    arrline = Fich.Line ' au lieu de : {Split(strReadAll,vbCrLf)}
    intSublines = 0
    Set strReadSub = objFSO.OpenTextFile(ScriptName,ForReading)
    Do While Not strReadSub.AtEndOfStream
        strNextLine = strReadSub.Readline
        If InStr(1, strNextLine, "Sub") > 0 And InStr(1, strNextLine, "End Sub") = 0 Then
    	  intSublines = intSublines + 1 ' incrémente le nbr de ligne
        End If
    	If InStr(1, strNextLine, "End Sub") > 0 Then 
    	   intSublines = intSublines  ' Nombre total de ligne y compris (Sub) et (End Sub)
    	   Exit Do
    	End If   
    Loop
     
    intPercent = FormatNumber((intSublines / arrline) * 100,2) ' 2 chiffres après la virgule
     
    MsgBox "Nb Lignes de la Sub: " & intSublines & vbCrLf & "Nb Lignes du Script: " & arrline & vbCrLf & "Pourcentage: " & intPercent & "%", vbInformation,"Fonction"
     
    ' ********************
    Sub A
    ' 1***
    ' 2***
    ' 3***
    ' 4***
    ' 5***
    End Sub
     
    Set objFSO = Nothing
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  6. #6
    Membre actif Avatar de Quent2849
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Merci pour ta réponse et le temps que tu y a consacré.

    J'ai mis exactement la même ligne que toi pour ne prendre que deux chiffres après la virgule J'ai fait ça ce matin mais je n'ai pas avancé dessus beaucoup depuis hier car j'ai eu à faire à coté.

    Ton interprétation de mon code est vraiment bien, le Fich.Line est carrément mieux niveau optimisation, mais par contre je ne comprends pas comment tu obtiens la valeur 7 "lignes"...
    J'ai essayé de changer l'écart de lignes entre le "Sub" et le "End Sub" et ca reste à 7... Pourtant il ne dois manquer grand chose...

    Merci encore !

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/07/2014, 20h58
  2. Réponses: 3
    Dernier message: 16/04/2008, 08h39
  3. Récupérer l'index de la ligne d'une TDBLookUpListBox
    Par navis84 dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/02/2005, 10h13

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