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 :

Modifier une chaine de caractère dans une ligne d'un fichier


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Par défaut Modifier une chaine de caractère dans une ligne d'un fichier
    Bonjour à tous,

    Je sais le sujet a été maintes fois discuté mais impossible d'arriver à faire ce que je veux.
    Voila, j'ai un fichier de conf qui permet de lancer une appli:
    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
    Structure Directory settings Directory settings
    BEGIN
       001, Path Relative Dictionary Database = "Dictionary.mdb"                    //Path to the dictionary database is merged with <BVSCONDIR>+<relativepath>
       009, Path Relative Translation Database = "Translation.mdb"                  //Path to the translation database is merged with <BVSCONDIR>+<relativepath>
       010, Path Relative User Database = "Benutzer.mdb"                            //Path to the user database is merged with <BVSCONDIR>+<relativepath>
       002, List<String> Database Dir List[5]                   //Database files are only created in the first path. For open a database file all pathes are searched
          [0] = "e:\data"
          [1] = "f:\data"
          [2] = "G:\data"
          [3] = "C:\Data"
          [4] = "W:\SIM09\11-7-2014\Data"
       003, List<String> Rawdata Dir List[5]                    //Rawdata files are only created in the first path. For open a rawdata file all pathes are searched
          [0] = "e:\Rawdata"
          [1] = "f:\Rawdata"
          [2] = "G:\Rawdata"
          [3] = "C:\RawData"
          [4] = "W:\SIM09\11-7-2014\RawData"
       004, List<String> TGM Dir List[5]                        //TGM files are only created in the first path. For open a TGM file all pathes are searched
          [0] = "e:\tgm"
          [1] = "f:\tgm"
          [2] = "G:\tgm"
          [3] = "C:\tgm"
          [4] = "W:\SIM09\11-7-2014\TGM"
       005, Structure  WayAssignment Directories
       BEGIN
          001, String Base directory = "e:\Wegzuordnung"                            //Base directory for the wayassignment.
          002, Path Relative CoursePlanDir = "Ablaufdateien"                        //Path to the wayassignment courseplan filedir.
          003, Path Relative DayTripDir = "Tagesdateien"                            //Path to the wayassignment daytrip filedir.
          004, Path Relative WalkPlanDir = "WalkPlan"
       END
    END
    Dans ce fichier, j'aimerai remplacer les 3 chaînes "W:\SIM09" par une variable issue d'un fichier ini.
    Je sais lire dans un fichier ini par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Path = Left(WScript.ScriptFullName, InStr(WScript.ScriptFullName, WScript.ScriptName)-1)
    strIniFile=Path & "Definition des chemins repertoires.ini"
    Set oFs=CreateObject("Scripting.FileSystemObject")
     
    If oFs.FileExists(strIniFile) Then
        Set oFile=oFs.OpenTextFile(strIniFile)
        Execute oFile.ReadAll()
    Else
        Msgbox "Le fichier (.ini) n'a pas été trouvé !!!"
        WScript.Quit
    End If
     
    Set oFile=Nothing
    Set oFs=Nothing
    Le contenu de ini, vous l'aurez compris, sera les directories que l'utilisateur renseignera. Ce sera par exemple "D:\Données\".

    Merci d'avance pour votre aide.

  2. #2
    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 : 70
    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
    ...vous l'aurez compris, sera les directories... => Parfois, je perds ma baguette magique
    Même si tu sais lire un fichier ini, il faudrait indiquer par quoi, à partir de ce dernier, tu veux remplacer les 3 occurrences de W:\SIM09

    Sans aucune idée sur la structure de ton fichier ini, on ne pourrait pas t'aider.
    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

  3. #3
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Par défaut
    Voici le fichier ini:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim chemin_donnees_disque, chemin_destination_donnees  ' A ne pas modifier
     
    chemin_donnees_disque = "F:\" ' Renseignez entre les guillemets
    chemin_destination_donnees = "D:\Données"
    Et voici le code que j'ai commencé et avec lequel je me tire les cheveux..
    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
    Const cteRapport = "C:\bvsys\TurnoutView3.7.2\Parameter\Directories.var" 
     
     ' Création d'on objet pour l'accès au système de fichier 
      Set objFSO = CreateObject("Scripting.FileSystemObject") 
     
      ' Localisation du script et du fichier à lire 
      ' Capture du nom complet du script 
      varNomFic = WScript.ScriptFullName 
      ' Suppression du nom pur afin de conserver le chamin d'accès 
      varNomFic = Left(varNomFic, InStrRev(varNomFic, "\")) 
      ' Ajout du nom du fichier à lire 
      varNomFic = cteRapport 
     
     ' Si fichier existe 
      If ( objFSO.FileExists(varNomFic) ) Then 
     
      ' Création d'un objet fichier pour accès au fichier, et ouverture 
        Set objFichier = objFSO.OpenTextFile(varNomFic, ForWriting,,-2) 
     
      ' Tant que fichier n'est pas terminé 
        While Not objFichier.AtEndOfStream 
          ' Lire une ligne 
            Texte = objFichier.ReadLine 
    		wscript.echo Texte	
    		' Recherche la position de caractère [=] 
            ' InStr(1, Texte, "=", 1) 
            ' 1 = À partir du premier caractère 
            ' Texte = texte dans lequel la recherche s'effectue 
            ' "=" = Caractère recherché 
            ' 1 = Méthode de comparaison en texte 
    		if InStr(1, Texte, "[4] = ", 1) <> 0 then
    			Ligne_entiere = Texte
    			Position = InStr(1, Texte, "[4] = ", 1)
    			' Capture le texte 6 caractère plus loin 
    			' donc après le [="] 
    			Texte = Mid(Texte,(Position + 6)) 
    			wscript.echo Texte
    			wscript.echo Len(Texte)
    			' Enlève le dernier caractère, les guillemets 
    			Texte = Mid(Texte, 1, (Len(Texte) + 1)) 
    			Nouveau_Texte= """" & chemin_destination_donnees & Date & "\Essai" & """"
    			srepl = Replace(Ligne_entiere, Texte, Nouveau_Texte)
    			wscript.echo srepl
    			'objFichier.CreateTextFile(varNomFic,True).Write srepl
    		end if   
            ' Ajoute le texte trouvé avec un saut de ligne [vbCrLf] 
            ' Message = Message & vbCrLf & Texte 
        Wend 
     
         ' Ferme le fichier 
        objFichier.Close 
     
         ' Libère l'objet Fichier 
        Set objFichier = Nothing 
     
         ' Affiche à l'écran 
        WScript.Echo Message 
     
      Else 
     
         ' Affiche à l'écran 
        WScript.Echo "Fichier absent" 
     
      End If 
     
       ' Libère l'objet du système de fichier 
      Set objFSO = Nothing 
     
    ' Quitte le script avec [0] comme paramètre 
    ' pour signaler "Aucune erreur" 
    WScript.Quit(0)
    Il doit y avoir pas mal d'erreur car je suis en cours de debug...

    Merci pour ton aide.

  4. #4
    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 : 70
    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
    Il y a beaucoup à faire dans ce script :

    1 - Les lignes 8 et 10 n'ont plus de valeur si tu écris à la ligne 12 varNomFic = cteRapport.
    car là, tu as écrasé le contenu de la variable varNomFic.
    2 - Quand tu lis le fichier une ligne à la fois, tu dois tester l'existence de [4], s'il est présent, fais un arrList = Split(Texte, "=").
    Ensuite, tu récupères le texte voulu en faisant NewTexte = Replace(Trim(arrList(1),chr(34),"") ' Suppression du caractère ".

    3 - A ta place, je placerais le fichier script vbs dans le même dossier que le fichier de configuration ( fichier ini ou var selon ce que tu as écrit) et ainsi je n'ai plus de problème de chemin absolu ou relatif et je pourrais dans ce cas et si besoin est, retrouver ce dernier en faisant :
    Set WS = CreateObject("WScript.Shell") : MonChemin = WS.CurrentDirectory.

    Dans mon post précédent j'ai dit : Sans aucune idée sur la structure de ton fichier ini, on ne pourrait pas t'aider
    c-à-d le contenu dudit fichier.
    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

Discussions similaires

  1. effacer une chaine de caractère dans une ligne dans un fichier texte
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/08/2010, 10h22
  2. Réponses: 4
    Dernier message: 10/07/2008, 13h34
  3. Récupérer une chaine de caractère dans une page
    Par BrunS dans le forum Langage
    Réponses: 3
    Dernier message: 15/11/2005, 14h28
  4. [String]Recherche d'une chaine de caractères dans une autre
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 3
    Dernier message: 29/07/2004, 11h51
  5. recherche d'une chaine de caractère dans une données text
    Par jdeheul dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/06/2004, 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