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 :

Remplacer une ligne dans un fichier texte !


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Remplacer une ligne dans un fichier texte !
    Bonjour, a priori simple, tranquille, et pourtant.

    Je débute un peu dans VBS, que j'ai choisi pour remplacer une ligne dès qu'elle commence pas f45 sachant que la suite peut varier varie jusqu'à la fin de la ligne.

    f45dfdff
    f45wwwfdsfs
    serait à remplacer par
    f45uneligne

    - j'ai pas trouvé de modèle "ajustable" sur le net
    Depuis 3 semaines ;
    - J'ai composé un script avec replace ; qui marche mais pas trouvé le caractère pour remplacer jusqu'à la fin de ligne ( $ en vb mais en vbscript ? ) ; là ; la suite de la ligne est poussée vers la droite

    - J'ai essayé regex, pas bon
    - j'ai essayé une boucle do while, avec un strcomp ( mais faut que la ligne soit exacte ce qui n'esp pas possible ), puis instr, le principe serait bon mais le script s'allonge, je patauge et i marche po ! Je parle pas des tableaux ( trop compliqué ).

    Auriez vous une solution simple, s'il vous plaît ? Dans mon entourage de dévs, tous le monde dis ; facile, mais personne n'a pu donner la soluce qui marche.

    D'autre part, le vbs est-il le meilleur langage pour ce script ?
    Quels sont les références complètes sur le net ( ou un livre ) et y'a t'il un logiciel pour composer et debugger les scripts ?

    Merci d'avance,

    Toulouz1

  2. #2
    Membre confirmé
    Avatar de Dung-Tri
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 109
    Points : 597
    Points
    597
    Par défaut Remplacement de chaine
    Pourrez tu mettre ton code source.

    Ou ce trouve les données? Dans un fichier ?
    Toute la complexité est de modéliser et de détecter les changements de contexte.

  3. #3
    Membre confirmé
    Avatar de Dung-Tri
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 109
    Points : 597
    Points
    597
    Par défaut Proposition
    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
    Dim Explorer
    Dim Stream
    Dim ligne As String
     
    Set Explorer = CreateObject("Scripting.FileSystemObject")
    Set Stream = Explorer.OpenTextFile("C:\Test\MonFichier.txt", ForReading, False)
     
    Do While Not Stream.AtEndOfStream
        ligne = Stream.ReadLine
        ligne = Left(ligne, 3) & "uneligne"
    Loop
     
    Stream.Close
     
    Set Explorer = Nothing
    Essai ca et dit moi si ca te va.
    Toute la complexité est de modéliser et de détecter les changements de contexte.

  4. #4
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 176
    Points
    17 176
    Par défaut
    Bienvenue sur DVP toulouz1
    Citation Envoyé par toulouz1
    remplacer une ligne dès qu'elle commence pas f45
    donc ajoute au code de Dung-Tri une condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Do While Not Stream.AtEndOfStream
        	ligne = Stream.ReadLine
            If left(ligne, 3) = "f45" Then
    	 Left(ligne, 3) & "uneligne"
    	End If
    Loop
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre confirmé
    Avatar de Dung-Tri
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 109
    Points : 597
    Points
    597
    Par défaut Oui
    Et puis dans le cas d'un VBS faut enlevé le typage "As String"

    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
     
    Dim Explorer
    Dim Stream
    Dim ligne
     
    Set Explorer = CreateObject("Scripting.FileSystemObject")
    Set Stream = Explorer.OpenTextFile("C:\Test\MonFichier.txt", ForReading, False)
     
    Do While Not Stream.AtEndOfStream
        ligne = Stream.ReadLine
        If left(ligne, 3) = "f45" Then
    	 ligne = Left(ligne, 3) & "uneligne"
        End If
    Loop
     
    Stream.Close
     
    Set Explorer = Nothing
    J'oublie tous le temps entre VB et VBS
    Toute la complexité est de modéliser et de détecter les changements de contexte.

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    je ne peux pas tester complètement, le script ci-dessus car il fait une erreur

    Par contre, d'accord, là c'est clair ;

    - la recherche des trois premiers caractères avec left
    - la condition ( sauf le "not" je vais le bosser avec des exos )
    - le & "uneligne " : c'est le mieux que j'avais trouvé mais il me semble qu'il "poussait" le reste de la ligne vers la droite, il ne la remplaçait pas jusqu'à la fin de ligne. ( J'avais essayé vbnewline pour passer à la ligne )

    Ce dernier script est court, clair, lisible, OK pour le VBS alors. J'avais pas trouvé le traitement par ligne. Dis Dung-Tri, quels supports tu utilises pour scripter ? A partir du VB ? Quelle manuel de réf en ligne ou papier ( bien fait ) as-tu ? Avec quel livre de cours, quel site de référence complet as-tu appris ? Combien as-tu de pratique ?

    PS : je n'ai pas collé de script car il y en a 4 différents, inutilement longs et aucun ne fonctionne ; je ne veux donc pas encombrer inutilement le forum pour les recherches de ceux d'après.

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Hum ... Le code proposé ne modifie en rien le fichier originale, et je pense que c'est ce que toulouz1 veut par sa demande.

    En effet le code proposé, lit ligne par ligne, modifie la variable temporaire, puis passe à l'autre ligne et ferme le fichier.

    En VBS les fichiers textes n'étant pas ouvrable en lecture ecriture en même temps, aucun changement n'est effectué dans le fichier. Il compléter le script.

    Avant la boucle, il faut créer/ouvrir un fichier temporaire qui servira à stocker le résultat des modifications. Il est aussi possible de passer par les dictionnaires, et de stocker la ligne et en clé un variable bouléene indiquant la ligne est à changer. l'intérêt de ce stockage et dans la limitation du nombre de fichier existant sur le disque dur, peut être un gain de performance. Mais c plus compliqué donc on reste sur l'idée du 2eme fichier.

    Dans la boucle, il suffit alors d'écrire dans le fichier le contenu de ligne (après la condition bien évidement pour prendre en compte les changements éventuel).
    Puis il suffira aussi de flusher et fermer le fichier après la boucle.

    Ensuite tu peux supprimer le fichier originale et renommer/deplacer le fichier temporaire avec le nom du fichier originale.

    Ce dernier script est court, clair, lisible, OK pour le VBS alors. J'avais pas trouvé le traitement par ligne. Dis Dung-Tri, quels supports tu utilises pour scripter ? A partir du VB ? Quelle manuel de réf en ligne ou papier ( bien fait ) as-tu ? Avec quel livre de cours, quel site de référence complet as-tu appris ? Combien as-tu de pratique ?
    Personnellement, je te conseille d'utiliser ce site, la FAQ de ce site, et les tutoriaux VB comme Aide.

    Tu peux aussi allez faire un tour sur le site MSDN de microsoft (tape MSDN et VBScript sur google).

    Mais pour tous les sujets simples comme celui-ci tu trouveras les réponses dans les discussions sur ce site, et dans la FAQ.
    Après recherche si tu ne trouve pas de solution, pose tes questions comme tu l'as fait là, en créant un sujet et nous te guiderons de notre mieux.

    EDIT: Comme je l'ai dit dans mon autre réponse, le script n'est pas forcément complet, cela dépend si tu veux que les modifications soit enregistrés dnas le fichier ou non.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  8. #8
    Membre confirmé
    Avatar de Dung-Tri
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 109
    Points : 597
    Points
    597
    Par défaut
    A la base j'étais curieux comme toi

    Maintenant j'ai 8 ans d'experience en Visual Basic 6 et 5 ans en dotnet dans le domaine de la gestion, dev concession DMS/EPC puis dans les TELECOM.

    Comme l'a dit ced600, tu devrais faire quelque tutorial sur le site developpez.com. Pour MSDN, c'est un peu plus dure mais pour mon cas j'ai tous appris dessus (à l'époque il y avait pas developpez.com ou les autres sites). Je te conseil d'acheter une bonne bible du Visual Basic 6 ou VBSCript.

    Enfin pour développer en VBS, moi j'utilise VB6 ou VB Editor disponible avec Office. C'est pas très adapté mais au moins ta un débugger et la possibilité de faire du pas à pas, ensuite je retranscrit en VBScript en enlevant le typage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim toto As String 'en VB
    Dim toto 'en VBS pas de typage
    Voila
    Toute la complexité est de modéliser et de détecter les changements de contexte.

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je suis en train de le faire avec les indications que vous avez donné, je trouvais effectivement ( par comparaison ) qu'il manquait un "forwriting" mais j'espérais que vous aviez trouvé une astuce pour que le script soit aussi court. Franchement je trouve que le VBS est compliqué et long pour ce qu'il fait , un "replace" avec un caractère de sélection de fin de ligne aurait été plus simple et intuitif si cela avait été possible. M'enfin bon, je le publirais dès que j'aurais terminé et fait un test ok.

    A + et merci,
    Toulouz1

  10. #10
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Rebonjour,

    Bon alors là, j'y suis presque mais je cale, je suis reparti d'un script "strcomp" qui marchait afin de reprendre le principe du deuxième fichier ( fichier temp ), sur lesquels je suis trop juste. J'y ai intégré celui que vous avez mis, mais je me perds dans le suivi des conditions, boucles et variables qui changent. Et il y a peut être aussi des mid, et len pas utiles ? Qu'en dites vous ?

    j'ai commenté,

    Rappel : le but est bien de remplacer toute ligne commençant par f45, par une nouvelle ligne, dans un fichier texte. Et franchement, c'est pas simple.

    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
     
     
    Const Fichier = "c:\test.txt"
    Const LigneCherche = "f45"
     
    Dim f1, f2, Test_ligne, Fso
    Dim ligne, ligne2, Retour, nouvelleligne
     
    Set fso = wscript.CreateObject("scripting.filesystemobject")
     
    'On travaille dans un fichier temporaire
    fso.CopyFile fichier, Mid(fichier, 1, Len(fichier) - 3) & "tmp", True
    Set f = Fso.opentextfile(Mid(fichier, 1, Len(fichier) - 3) & "tmp", 1)
    Set f2 = Fso.opentextfile(fichier, 2)
     
    Test_ligne = 1
    Retour = False
     
    'TANT QUE LA CONDITION EST f45
     
    Do While ((Test_Ligne <> 0) and (f.AtEndOfStream <> True))
    'boucle : faire tant que test_ligne diff de 0 et fin de fichier pas atteint"
     
    	ligne = f.ReadLine 
    'définition de "ligne" qui devra remplir la condition
     
        	If left(ligne, 3) = "f45" Then
    'si les trois premières lettres de la ligne sont : f45
     
    	nouvelleligne = Left(ligne, 3) & "nouvelle ligne"	
    'sinon
     
        Else
    	f2.Writeline nouvelleligne
    	Retour = True
        End If
    Loop
     
     
     
    'On réécrit le reste du fichier
     
    Do While (f.AtEndOfStream = False) 'tant que la derniere ligne du fichier n'est pas atteinte, écrire les lignes
    	Ligne = f.readline
    	f2.writeline ligne
    Loop
     
     
    ' sortie de boucle
     
    f2.close
    f.close
     
    fso.deletefile(Mid(fichier, 1, Len(fichier) - 3) & "tmp")
    'bon, là je pige pas encore ; supprime fichier tempo
     
    If (Retour = True) Then 
    	wscript.quit(0)
    Else
    	wscript.quit(1)
    End if

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je n'ai pas le temps tout de suite de regarder, mais je voulais juste dire qu'il n'y pas besoin de faire deux boucle. Une seule suffit.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  12. #12
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonjour,

    de retour de vacances, j'ai déjà les yeux qui piquent
    - J'ai essayé regex, pas bon
    ah bon ?
    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
    Option Explicit
    Const Fichier = "c:\test.txt"
    Const LigneCherche = "f45"
     
    Dim fso
    Dim oRegEx
    Dim monFichier
    Dim sStream
    Dim sNewStream
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set oRegEx = New RegExp
    oRegEx.Global = True
    oRegEx.Pattern = "\n" & LigneCherche & ".*(\r|$)"
    Set monFichier = fso.OpenTextFile(Fichier,1)
    sStream = monFichier.ReadAll
    monFichier.Close
    sNewStream = oRegEx.Replace(sStream, vbLf & "f45nouvelle ligne" & vbCr)
    Set monFichier = fso.OpenTextFile(Fichier,2)
    monFichier.Write sNewStream
    monFichier.Close
    il y a petit bug quand la dernière ligne du fichier est une f45 mais c'est pas bien grave
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  13. #13
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRegEx.Pattern = "\n" & LigneCherche
    Le \n te permet de spécifier la recherche à la nouvelle ligne ?
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  14. #14
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    Le \n te permet de spécifier la recherche à la nouvelle ligne ?
    oui, il permet de ne retenir que les f45 situés en début de ligne
    à ce propos, mon pattern était incomplet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRegEx.Pattern = "(\n|^)" & LigneCherche & ".*(\r|$)"
    avec toujours le petit bug en prime
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  15. #15
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Haaaa! Voilà qui est adapté ; ce que j'ai cherché pendant un moment, car quoi de plus simple qu'une instruction "replace" pour remplacer ?

    Là, le script est à la bonne taille par rapport à ce qu'il fait.

    Omen999, dans quel livre ou site web as-tu trouvé ces instructions et la syntaxe exposée en clair, s'il te plaît ? Je ne les ai pas trouvé sur le net en tout cas, et je cherche un moyen de référence complet et efficace.

    Pour les yeux qui piquent ( même si c'était une plaisanterie ), cela arrive et pour limiter l'impact négatif des écrans, il faudrait éviter les variations de luminosité quand on passe d'une fenêtre avec un fond blanc à un fond d'écran plus sombre. Notre nature peut supporter des extrêmes, par contre elle ne supporte pas les moindres variations brusques.

    Merci, j'en ai appris beaucoup

  16. #16
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    dans quel livre ou site web as-tu trouvé ces instructions et la syntaxe exposée en clair, s'il te plaît ?
    tout simplement dans la doc de vbs: http://vb.developpez.com/faqvbs/?page=I#vbshelp
    voir notamment le chapitre: Introduction aux expressions régulières
    l'objet RegExp disponible depuis la v5 de vbs est un outil très puissant mais généralement ignoré du scripteur
    occasionnel en raison de la complexité du pattern dont la définition est assez peu intuitive
    un tuto existe ici: http://zez.org/article/articleprint/11/
    également un outll (pas testé): http://laurent.riesterer.free.fr/regexp/
    bonne lecture
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  17. #17
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je fait juste une remarque sur le ReadAll, je l'ai déjà essayé sur un fichier texte de 16 mo, et j'ai fait litérallement explosé la mémoire lol
    Bref attention quand même à la taille du fichier.
    Mais bon tu peux toujours remplacé le readall par une lecture ligne par ligne du fichier que tu stock dans un tableau de string.
    Ainsi la solution omen999 reste valable.

    de retour de vacances, j'ai déjà les yeux qui piquent
    C sur qu'à force de regarder sous l'eau, le sel de la mer a dû irriter tes yeux

    Sinon en ce qui concerne la recherche Web, je dirais que vu la quantité d'info sur la toile, cela devient tout un art de trouver les infos que l'on veut
    Mais au bout d'un certain temps on comprend quelle est la meilleur combinaison de mot clé à faire pour obtenir un maximum de réponse intéressante.
    Toi aussi tu peux devenir un Grand Chercheur sur Google, bien que si tu laisses "ton stagiaire" travailler pour toi, il y a peu de chance que tu obtiennes l'équivalent de la péniciline pour l'informatique
    Bon bref quelque lien utilie :

    La Faq VBS : http://vb.developpez.com/faqvbs/

    Les tuto VB de développez.com

    Le site MSDN sur le WMI, un ensemble d'objet pour piloter windows, et utilisable en VBS, avec beaucoup d'exemple VBS, notemment ici.

    Et un autre site sur lequel je me suis souvent inspiré pour mes développements : http://activexperts.com/activmonitor.../adminscripts/

    Mais bon à force de chercher sur le net et de voir les autres forum, je dirais qu'il n'y a pas mieux qu'ici pour répondre à tes questions, et ce notemment grâce aux membres actifs sur ce fofo

    EDIT: J'oubliais Jean-Claude Bellamy, il a un excellent site.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  18. #18
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci pour les liens : notepad++ est impec et la réf Ms est ce que je cherchais.

    J'avoue que les expressions régulières, je trouve que la doc est difficile : j'ai essayé, par exemple de sélectionner une ou des lignes après celle où il y a f45pou les remplacer aussi, et pas moyen :

    J'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "(\n|^)" & (\w) & ( ou j'ai essayé avec "" )".*(\r|$)" & "(\n|^)" & "^\[ \w]*$"
    Bah, marche pas,

    Pourriez-vous m'indiquer le cheminement de la doc que vous utilisez vraiment, et où exactement vous trouvez ceci, s'il vous plaît ? A mon avis, c'est pas dans la doc MS car il y a bien une sélection d'une ligne vierge, mais pas la sélection de n'importe quelle ligne. ?

  19. #19
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    Pourriez-vous m'indiquer le cheminement de la doc que vous utilisez vraiment, et où exactement vous trouvez ceci, s'il vous plaît ?
    j'utilise vraiment la définition de la propriété pattern que l'on trouve dans la doc officielle de vbs
    je n'ai pas trouvé le pattern, je l'ai écrit en fonction du problème posé
    pour la clarté de l'exemple, je détaille:
    (et aussi parce qu'en me relisant, je me suis aperçu qu'on pouvait faire plus simple encore)
    - le pattern doit d'abord reconnaitre la chaine f45 uniquement en début de ligne ou en début de fichier
    - le pattern doit ensuite englober tous les caractères quelconques jusqu'au retour chariot (code x0D)
    donc:
    (\n|^)f45 pour indiquer que l'on cherche un caractère nouvelle ligne (code x0A) OU le début de fichier immédiatement avant f45
    [^\r]* pour sélectionner n'importe quel caractère autant de fois que nécessaire autre que le retour chariot
    le code final (sans bug):
    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
    Option Explicit
    Const Fichier = "c:\test.txt"
    Const LigneCherche = "f45"
     
    Dim fso
    Dim oRegEx
    Dim monFichier
    Dim sStream
    Dim sNewStream
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set oRegEx = New RegExp
    oRegEx.Global = True
    oRegEx.Pattern = "(\n|^)" & LigneCherche & "[^\r]*"
    Set monFichier = fso.OpenTextFile(Fichier,1)
    sStream = monFichier.ReadAll
    monFichier.Close
    sNewStream = oRegEx.Replace(sStream, vbLf & "f45nouvelle ligne")
    If InStr(sNewStream,vbLf)=1 Then sNewStream = Replace(sNewStream,vbLf,"",1,1)
    Set monFichier = fso.OpenTextFile(Fichier,2)
    monFichier.Write sNewStream
    monFichier.Close
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  20. #20
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Ahh ! Merci, j'y arrive, quoique les regex, c'est un langage dans un langage ( VBS en l'occurence), qui lui-même est décrit en langage commun. Mouaif, y'a plus simple mais bon.

    J'y suis arrivé sur vos exemples et bons avis : le script suivant remplace, dans un fichier texte, une ligne qui commence par f45 et la ligne suivante ( quoi qu'elle contienne ) par deux autre lignes prédéfinies dans le script.

    Merci,



    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
    Option Explicit
    Const Fichier = "c:\test.txt"
    Const LigneCherche = "f45"
     
    Dim fso
    Dim oRegEx
    Dim monFichier
    Dim sStream
    Dim sNewStream
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set oRegEx = New RegExp
     
    oRegEx.Global = True
    oRegEx.Pattern = "(\n|^)" & LigneCherche & "[^\r]*" & vbCrLf  & "[^\r]*"
    Set monFichier = fso.OpenTextFile(Fichier,1)
    sStream = monFichier.ReadAll
    monFichier.Close
     
    sNewStream = oRegEx.Replace(sStream, vbLf & "première ligne qui remplace la ligne cherchée" &  vbCrLf & "deuxième ligne qui remplace la suivante quoiqu'il y ait")
     
    If InStr(sNewStream,vbLf)=1 Then sNewStream = Replace(sNewStream, vbLf & "",1,1)
    Set monFichier = fso.OpenTextFile(Fichier,2)
    monFichier.Write sNewStream
     
    monFichier.Close

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Supprimer une ligne dans un fichier texte
    Par bsketeur dans le forum Langage
    Réponses: 26
    Dernier message: 28/06/2006, 10h36
  2. supprimer une ligne dans un fichier texte
    Par linouline dans le forum Langage
    Réponses: 5
    Dernier message: 05/06/2006, 23h02
  3. Supprimer une ligne dans un fichier texte
    Par @yoyo dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 28/03/2006, 14h19
  4. Supprime une ligne dans un fichier texte
    Par dev7 dans le forum Linux
    Réponses: 4
    Dernier message: 28/03/2006, 01h33
  5. Supprimer une ligne dans un fichier text
    Par philippe13 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 14/03/2006, 16h43

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