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 :

Supression de ligne spécifique dans fichier txt


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 16
    Points
    16
    Par défaut Supression de ligne spécifique dans fichier txt
    Salut tout le monde,

    Le newbie est de retour .

    Je cherche cette fois ci à adapter le script fait précédement pour supprimer une ligne dans un fichier txt si elle contient une chaine de caractére bien spécifique.

    Mon probléme réside dans le fait de supprimer la ligne (petite précision je ne peut pas savoir a l'avance le nombre de caractere à supprimer).

    Etant en stage est vraiment bousculer par le temps je vous met le code initiale et file faire des recherche plus approfondit...

    Merci d'avance à tout ceux qui prendrons le temps de m'aider


    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
    Option Explicit 
     
    '----------
    'déclaration des variables et constante
    '----------
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Dim objFso, objFile,objFolder, strPath, strExt,fso,WshShell,ftxt,oFso,strdossier,strextension,strToSearch,strFilePath,objTempStream,objTempNewFile,strtemp
    Dim File,sChaine,pos,proclu,exp2k21,lignes,schaine2
    strExtension = "txt"
    strToSearch = "END"
    '----------
    'Chemin du repertoire à parcourir et extension à rechercher
    '----------
    strPath = "chemindurepertoire"
    strExt = "txt"
     
    '----------
    'Création du dossier pour la copie
    '----------
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.CreateFolder("chemindurepertoire")
    Set objFso = CreateObject("Scripting.FileSystemObject")
     
    '----------
    'Saisie de l'imprimante à rechercher et de l'imprimante à ajouter
    '----------
    exp2k21 = inputbox("saisir le nom de la file d'impression à rechercher sur le serveur [exp2k21]")
    sChaine ="netprinter|\\exp2k21\"&exp2k21&"|"
    proclu = inputbox("saisir le nom de l'imprimante à ajouter sur le serveur [proclu01ps]")
    schaine2="netprinter|\\proclu01ps\"&proclu&"|N"
     
    '----------
    'Parcour des fichiers txt du repertoire + convertion en minuscule de chaque ligne de fichier
    '----------
    Call ShowFileTxtFolder(strExt)
    Set objFso = Nothing
    Function ShowFileTxtFolder (strExt)
    For Each objFile In objFso.GetFolder(strPath).Files
        If LCase(objFso.GetExtensionName(objFile.Path)) = LCase(strExt) Then
           Set File = objFso.OpenTextFile(objfile.Path, ForReading)
    	while Not File.AtEndOfStream   
    	lignes = File.Readline	
    	lignes = Lcase(lignes)
    '----------
    ' Recherche d'une chaine de caractère dans les lignes du fichier txt 
    ' Copie du fichier dans le nouveau repertoire si chaine trouvée
    '----------
    pos=InStr(lignes,schaine)
    if pos = 1 then      
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Ftxt = fso.GetFile(objfile.Path)'fichier source   
    Ftxt.copy("chemindurepertoire")'chemin du repertoire de copie 
    end if 
    wend
    File.Close
    Set File = nothing
    End if   
    Next
    '----------
    ' Recherche et remplacement de la chaine END pour l 'ensemble des fichiers déplacés 
    ' Par le mappage de l'imprimante sur proclu01ps 
    ' Rajout de END en fin de fichier
    '----------
    strdossier = "C:\Documents and Settings\NBoubaaya1\Bureau\COPIIEE" '===>'chemin du repertoire à parcourir
    Set objFso = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFso.GetFolder(strdossier)
    For Each objFile In objFolder.Files
    	strFilePath = objFile.Path
    	If LCase(objFso.GetExtensionName(strFilePath)) = LCase(strExtension) Then
    		Set objTempStream = objFso.OpenTextFile(strFilePath, 1)
    		Set objTempNewFile = objFso.CreateTextFile(strFilePath & ".temp", 2)
    		Do While NOT objTempStream.AtEndOfStream
    			strTemp = objTempStream.ReadLine
    			If Instr(strTemp, strToSearch) = 0 Then
    				objTempNewFile.WriteLine strTemp
    			Else
    				objTempNewFile.WriteLine schaine2
    				objTempNewFile.WriteLine "END"
    			End If
    		Loop
    		objTempStream.Close
    		objTempNewFile.Close
    		objFile.Delete
    		objFso.MoveFile strFilePath & ".temp", strFilePath
    	End If
    Next
    End Function
    Wscript.Echo "Fin du programme"

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Ou alors comment faire un teste

    si ligne en cours de lecture = ligne a supprimer
    alors je la copie pas dans le nouveau fichier

    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
    	If LCase(objFso.GetExtensionName(strFilePath)) = LCase(strExtension) Then
    		Set objTempStream = objFso.OpenTextFile(strFilePath, 1)
    		Set objTempNewFile = objFso.CreateTextFile(strFilePath & ".temp", 2)
    		Do While NOT objTempStream.AtEndOfStream
    			strTemp = objTempStream.ReadLine
    			If Instr(strTemp, strToSearch) = 0 and strtemp   <> sChaine Then				
    objTempNewFile.WriteLine strTemp
    			Else
    				objTempNewFile.WriteLine schaine2
    				objTempNewFile.WriteLine "END"
    			End If
    		Loop
    		objTempStream.Close
    		objTempNewFile.Close
    		objFile.Delete
    		objFso.MoveFile strFilePath & ".temp", strFilePath
    	End If
    sachant avec le:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Instr(strTemp, strToSearch) = 0 and strtemp   <> sChaine Then

    j'obtient une erreur du style permission non accordés

  3. #3
    Membre actif
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Points : 212
    Points
    212
    Par défaut
    if InStr(strTemp, "texte à controler") then
    objTempNewFile.WriteLine strTemp
    End If

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par spantemonium Voir le message
    if InStr(strTemp, "texte à controler") then
    objTempNewFile.WriteLine strTemp
    End If
    Salut spantemonium,

    Sauf si je me trompe ce qui est possible cela permet de tester si la chaine de caractere texte a controler est presente dans alligne en cours de lecture, mais sa j 'y arrive

    enfaite j'aimerais ne pas copier la ligne dans le nouveau fichier si elle contient la chaine rechercher.

  5. #5
    Membre actif
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Points : 212
    Points
    212
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if InStr(strTemp, "texte à controler") then
    'si y'a la chaine : on copie pas
    Else
    'Sinon on copie
    objTempNewFile.WriteLine strTemp
    End If
    ou sinon y'a un truc que j'ai pas compris

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Comme sa je comprend mieux et je t'en remercie

    une derniere petite question et je pense avoir resolu mon sushi


    Quand j'écrit sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Instr(strTemp,"NetPrinter|\\exp2k21\icrii10|N")
    tout se passe trés bien

    par contre du moment ou j'écrit sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Instr(strTemp,variable)
    en ayant précedement fait un inputbox pour remplir le contenue de variable et bien sa ne marche pas Oo. Existe t'il une petite astuce

  7. #7
    Membre actif
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Points : 212
    Points
    212
    Par défaut
    je vois pas pourquoi... essaie de l'afficher avec un wscript.echo après l'avoir saisi dans le inputbox.

    t'auras une idée de si la variable est bien remplie.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    je viens de faire le teste la variable est pourtant correctement remplie

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    erratum erratum

    une petite différence était présente une fameuse lettre majuscule

    Je devrais m 'en sortir maitenant merci en tout cas

    le code pour ceux que sa interesse :


    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
    Option Explicit 
     
    '----------
    'déclaration des variables et constante
    '----------
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Dim objFso, objFile,objFolder, strPath, strExt,fso,WshShell,ftxt,oFso,strdossier,strextension,strToSearch,strFilePath,objTempStream,objTempNewFile,strtemp
    Dim File,sChaine,pos,proclu,exp2k21,lignes,schaine2,schaine3,schaine4
    strExtension = "txt"
    strToSearch = "END"
    '----------
    'Chemin du repertoire à parcourir et extension à rechercher
    '----------
    strPath = "chemindurepertoire"
    strExt = "txt"
     
    '----------
    'Création du dossier pour la copie
    '----------
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.CreateFolder("chemindurepertoire")
    Set objFso = CreateObject("Scripting.FileSystemObject")
     
    '----------
    'Saisie de l'imprimante à rechercher et de l'imprimante à ajouter
    '----------
    exp2k21 = inputbox("saisir le nom de la file d'impression à rechercher sur le serveur [exp2k21]")
    sChaine ="netprinter|\\exp2k21\"&exp2k21&"|"
     
    '----------
    'Parcour des fichiers txt du repertoire + convertion en minuscule de chaque ligne de fichier
    '----------
    Call ShowFileTxtFolder(strExt)
    Set objFso = Nothing
    Function ShowFileTxtFolder (strExt)
    For Each objFile In objFso.GetFolder(strPath).Files
        If LCase(objFso.GetExtensionName(objFile.Path)) = LCase(strExt) Then
           Set File = objFso.OpenTextFile(objfile.Path, ForReading)
    	while Not File.AtEndOfStream   
    	lignes = File.Readline	
    	lignes = Lcase(lignes)
    '----------
    ' Recherche d'une chaine de caractère dans les lignes du fichier txt 
    ' Copie du fichier dans le nouveau repertoire si chaine trouvée
    '----------
    pos=InStr(lignes,schaine)
    if pos = 1 then      
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Ftxt = fso.GetFile(objfile.Path)'fichier source   
    Ftxt.copy("chemindurepertoire")'chemin du repertoire de copie 
    end if 
    wend
    File.Close
    Set File = nothing
    End if   
    Next
     
    '----
    ' bidouille 
    '----
     
    sChaine3 = schaine&"n"
    sChaine4 = schaine&"y"
     
     
    '----------
    ' Recherche et remplacement de la chaine END pour l 'ensemble des fichiers déplacés 
    ' Par le mappage de l'imprimante sur proclu01ps 
    ' Rajout de END en fin de fichier
    '----------
    strdossier = "chemindurepertoire" '===>'chemin du repertoire à parcourir
    Set objFso = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFso.GetFolder(strdossier)
    For Each objFile In objFolder.Files
    	strFilePath = objFile.Path
    	If LCase(objFso.GetExtensionName(strFilePath)) = LCase(strExtension) Then
    		Set objTempStream = objFso.OpenTextFile(strFilePath, 1)
    		Set objTempNewFile = objFso.CreateTextFile(strFilePath & ".temp", 2)
     
    		Do While NOT objTempStream.AtEndOfStream
    			strTemp = objTempStream.ReadLine		
             		strTemp = Lcase(strTemp)
    			If Instr(strTemp,schaine3) = 1 Then
    			Elseif Instr(strTemp,schaine4) = 1 Then
    			else
    				objTempNewFile.WriteLine strTemp	
    			End If
     
    		Loop
    		objTempStream.Close
    		objTempNewFile.Close
    		objFile.Delete
    		objFso.MoveFile strFilePath & ".temp", strFilePath
    	End If
    Next
    End Function
    Wscript.Echo "Fin du programme"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 55
    Dernier message: 16/11/2008, 18h32
  2. Insérer ligne de texte dans fichier .txt
    Par Gatsu_67 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 06/11/2008, 08h25
  3. Affichage de lignes spécifiques dans un fichier binaire
    Par Marley_T dans le forum Débuter
    Réponses: 1
    Dernier message: 19/01/2008, 15h38
  4. prb retour a la ligne dans fichier txt telecharge avec php
    Par supersonicblonde dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2006, 15h20
  5. Réponses: 1
    Dernier message: 05/05/2006, 11h36

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