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 :

manip chaine VBS


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2011
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 91
    Par défaut manip chaine VBS
    Bonjour,

    Je parcours un fichier ,et pour chaque ligne j'affiche un message si le mot toto apparait dans cette ligne.
    si if instr(TblLigne(T),"TOTO")

    Maintenant,chose inversse ,je souhaiterai afficher les lignes pour lequel le mot toto n'apparait pas a la ligne T

    Donc j'ai fais ceci :

    if NOT(instr(TblLigne(T),"TOTO") ) ,mais visiblement l'operateur n'agit pas ...

    Quelqu'un aurait une idée de l'instruction à effectuer

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if instr(TblLigne(T),"TOTO") = 0 then
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre confirmé
    Homme Profil pro
    IT in outer space
    Inscrit en
    Novembre 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : IT in outer space

    Informations forums :
    Inscription : Novembre 2006
    Messages : 88
    Par défaut
    Je viens d'essayer chez moi. Ça marche

    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
     
    Option Explicit
     
    Dim fic
     
    fic = "toto.txt"
     
    lireParLigne (fic)
     
    Function lireparligne (fichier)
        Dim msg
        Dim line
        Dim fso
        Dim TextObject
        Set fso = WScript.CreateObject("Scripting.FileSystemObject")
        Set TextObject = fso.OpenTextFile(fichier, 1)
     
        While NOT TextObject.AtEndOfStream
            line = TextObject.ReadLine
            If InStr(LCase(line), "toto") = False Then
                msg = msg & line & vbCrlf
            End If
        Wend
     
        MsgBox msg
     
        ' Libération de la variable fso
        Set fso = Nothing
        Set TextObject = Nothing
    End Function
    Images attachées Images attachées  

  4. #4
    Membre confirmé
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2011
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 91
    Par défaut suite réponse
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'Si la condition est vrai
                    if maVar(T) = resulatRequete.Name then 
     
     
                     if (instr(TblLigne(T),"TOTO") )  = 0 then 
                      'Comme ya toto dans la ligne on ne fait rien
     
                              'Sinon on peut afficher la ligne
                              else 
                              msgBox    maVar(T) & "on peut afficher "
     
                     end if
     
                     end if

    Cette méthode fonctionne mais prend du temps a afficher les resultats ,donc j'ai essayé de factoriser en écrivant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if maVar(T) = resulatRequete.Name  & instr(TblLigne(T),"TOTO") )  = 0
    msgBox    maVar(T) & "on peut afficher "
     
    end if
    mais visiblement il ne m'affiche pas ce que je souhaite..

    Y aurait -il quelque chose de manquant ou de faux dans la condition factorisée ?


    Merci par avance à tous et à toutes.

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut
    Et tu n'as pas d'erreur , car il manque un Then dans le code 2.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre confirmé
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2011
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 91
    Par défaut suite réponse
    salut,

    Le then était déja ajouté,c'est lorsque j'ai fais un copier coller ,j'ai du oublier de le selectionner.

    Sinon,je confirme lorsque je fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if maVar(T) = resulatRequete.Name  & instr(TblLigne(T),"TOTO") )  = 0
    msgBox    maVar(T) & "on peut afficher "
     
    end if
    Je n'ai pas le résultat souhaité


    mais ceci fonctionne ,mais prend enormement de temps a afficher les resultats..

    car ces deux conditions sont dans une boucle imbriquée..
    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
     
    'Si la condition est vrai
                    if maVar(T) = resulatRequete.Name then 
     
     
                     if (instr(TblLigne(T),"TOTO") )  = 0 then 
                      'Comme ya toto dans la ligne on ne fait rien
     
                              'Sinon on peut afficher la ligne
                              else 
                              msgBox    maVar(T) & "on peut afficher "
     
                     end if
     
                     end if

    Je ne vois pas du tout ou est la coquille

  7. #7
    Membre confirmé
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Décembre 2011
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 91
    Par défaut suite réponse
    Re hariman,


    Je te poste directement tout le code ce sera plus simple..

    Donc mon code tourne bien mais aie aie aie Que de lenteur.....


    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
     
     
     
     
     
            Dim fso, fsoB,LeFichier
            Dim CheminNomFichier, PourTbl, TblLigne, TblColonne
            Dim T
            Dim Champs1
            Dim compteur 
            compteur = 1 
            Const SiteServer = "KX1200899PC"
            Const SiteCode = "FR1"
            Dim sResourceID, oSMS, CollectionId
            Dim wShell
     
     
            Set PosteDansSCCM = CreateObject("Scripting.Dictionary")
            PosteDansSCCM.CompareMode = vbTextCompare
     
     
           Set wShell = WScript.CreateObject( "WScript.Shell" )
           Set fso = CreateObject("Scripting.FileSystemObject")
           path = fso.GetParentFolderName(wscript.ScriptFullName)
     
     
           'pour se connecter a SCCM
     
          Set oLocator = CreateObject("WbemScripting.SWbemLocator")
          Set oSMS = oLocator.ConnectServer(SiteServer, "root\sms\site_" & SiteCode)
     
          If Err Then
            Err.Clear
            wScript.echo "Cannot connect to SCCM."
            wScript.Quit
          End If
     
         oSMS.Security_.ImpersonationLevel = 3
         oSMS.Security_.AuthenticationLevel = 6
     
     
        'Pour acceder au fichier mon fichier
     
         Set fsoB = CreateObject("Scripting.FileSystemObject")
         CheminNomFichier = "C:\Users\Desktop\Me\monfichier.txt"
         Set LeFichier = fsoB.OpenTextFile(CheminNomFichier,1)
     
         PourTbl = LeFichier.ReadAll
         LeFichier.Close
     
     
     
            'ajout d'un retour chariot à la derniere ligne pour le Splitage
     
          PourTbl = PourTbl & vbclrf
          TblLigne = Split(PourTbl,vbCrLf)
     
     
         'pour obtenir le nombre de ligne du fichier 
          T = Ubound(TblLigne)
     
          'dimensionne chaque variable
           redim Champs1(T)
     
     
     
          'Requete pour récupérer les postes de SCCM
           Set ResIDs = oSMS.ExecQuery("SELECT * from SMS_R_System ")
     
     
     
                 compt = 0
     
     
           'Pour chaque nom de Poste               
               for each oResID in ResIDs       
     
           'on ajoute le couple compt,oResID.name dans chaque indice du dictionary    
           PosteDansSCCM.add compt,oResID.name
     
             'On incremente compt qui sert de clé
             compt = compt + 1
     
             next
     
     
        'Pour la création du fichier pour stocker les noms de postes dans SCCM
        Const ForReading = 1, ForWriting = 2
     
       Set WshShell = WScript.CreateObject("WScript.Shell")
       Dim fileso, fil
       Set fileso = CreateObject("Scripting.FileSystemObject")
       Set fil = fileso.OpenTextFile("D:\x0ASUISS\Desktop\PostePresentDansSCCM.txt", ForWriting,true)
     
     
     
        listecles =  PosteDansSCCM.keys
        listevaleurs = PosteDansSCCM.items
        msgcles = "" 
        msgvaleurs = "" 
     
        monMessage = ""
     
     
     
        'Parcours le dictionnary et mets dans un fichier tous les postes de SCCM
        For num = 0 to PosteDansSCCM.Count - 1
     
        msgcles = msgcles & " " & listecles(num) 
        msgvaleurs =  msgvaleurs & " " & listevaleurs(num) 
     
        monMess = monMess + listevaleurs(num) +";"+ vbCrLf 
     
        compteurLigneFichierPosteDansSCCM =  compteurLigneFichierPosteDansSCCM + 1
     
        Next 
     
         'On ecrit dans le fichier et on met tous les postes de SCCM
         fil.writeline(monMess)
     
     
     
     
                   'Pour chaque ligne du fichier PostePresentDansSCCM.txt,on va comparer avec chaque ligne
                   'du fichier monFichier et verifier que la condition est respectée.
     
     
                      'Lit le contenu d'un fichier dans une variable 
                               Set fs = CreateObject("Scripting.FileSystemObject" ) 
                   Set fich = fs.OpenTextFile("D:\Users\ Me\Desktop\PostePresentDansSCCM.txt", ForReading)
     
                     PourTabul = fich.ReadAll
                     fich.Close
     
                     PourTabul =   PourTabul & vbclrf
                     TblL = Split(  PourTabul,vbCrLf)
                    'pour obtenir le nombre de ligne du fichier 
                     i= Ubound(TblL)
     
                   'dimensionne chaque variable
                    redim Cmps1(i)
     
     
     
     
     
                  ' Création d'un fichier qui va Stocker les postes de SCCM apparaissant dans le fichier  monfichier 
                  ' Pour lequel le statut n'est pas Prendre           
                   Set MonShell = WScript.CreateObject("WScript.Shell")
                   Dim fileFSO, filF
                   Set fileFSO = CreateObject("Scripting.FileSystemObject")
                   Set fileF = fileFSO.OpenTextFile("D:\Users\ Me\Desktop\PostePresentDansSCCM.txt", ForReading)
     
                  'Pour chaque ligne du fichier PosteDansSCCM.txt
     
                 for i = 0 to Ubound(TblL)
     
                   TblL(i) = TblL(i) & ";"
                   TblCol = split(TblL(i),";")
                   Cmps1(i)= TblCol(0)
     
     
                  for T =0 to ubound(TblLigne)
     
     
                    TblLigne(T) = TblLigne(T) & ";"
                    TblColonne = split(TblLigne(T),";")
                    Champs1(T)= TblColonne(0)
     
     
                   if Cmps1(i) = Champs1(T) and instr(TblLigne(T),"PRENDRE") = 0 then 
     
                              'On accumule dans monMess les noms de postes pour laquelle la condition est à vraie.
                      ' monMessage = monMessage + Cmps1(i) +";"+ vbCrLf
     
     
     
     
                       'ecrit au fur et mesure dans le Fichier les postes trouvés
                       fileF.writeline(Cmps1(i) +";"+ vbCrLf) 
     
     
                    end if
     
                       next 
     
                next



    Merci à toi.

Discussions similaires

  1. recuperer sous-chaine VBS
    Par debutVBA dans le forum VBScript
    Réponses: 5
    Dernier message: 22/12/2011, 18h31
  2. manip chaine caractères (débutant)
    Par comboDev dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 04/11/2008, 12h25
  3. question sur manip chaines :
    Par comboDev dans le forum Unix
    Réponses: 2
    Dernier message: 01/10/2008, 18h15
  4. [VBS]traitement de chaine
    Par tsotb dans le forum VBScript
    Réponses: 3
    Dernier message: 28/04/2006, 10h27
  5. manip de chaines
    Par johnlehardos dans le forum Langage
    Réponses: 11
    Dernier message: 08/07/2005, 16h35

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