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 :

Problème traitement de fichiers texte


Sujet :

VBScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Problème traitement de fichiers texte
    Bonjour forum!

    J'ai constitué un script (merci forum )afin de pouvoir manipuler mon ptit fichier ini....

    Le problème est que j'y arrive bien en tâches ponctuelles mais quand je veux rassembler les 2 en 1, c'est un peu plus touchy pour moi...

    Request for help!

    Grosso modo : j'ai besoin des 4 critères suivants :
    - Remplacer une ligne avec Regex ok!
    - en cas de ligne = panzani, pas de traitement du ini.
    - sinon concaténation d'un autre ini
    - insertion de 2 lignes à une endroit précis (pas encore faire)

    Voici le 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    Const Lecture = 1, Ecriture = 2 
    Const Concatenation = 8
     
    Set oWshShell = Wscript.CreateObject("Wscript.Shell")
    Set oFso = CreateObject("Scripting.FileSystemObject")
     
    Set oRegEx = New RegExp
    oRegEx.Global = True
    oRegEx.Pattern = "(\n|^)" & "lignequejeveux" & ".*(\r|$)"
    Set f = oFso.OpenTextFile(monini, Lecture)
    Line = f.ReadAll
     
    while Not f.atEndOfStream 
    		if (f.ReadLine="panzani") then wscript.quit	
    Wend
    f.close 
     
    oFSo.OpenTextFile(monini, Concatenation).Write oFSo.OpenTextFile(monnouveauini).ReadAll 
    f.close
     
    NewLine = oRegEx.Replace(Line, vbLf & "lignequejeveuxfaireremplacer" & vbCr)
    Set f = oFso.OpenTextFile(monini,Ecriture)
    f.Write NewLine
    f.Close
    je pense que les readall et le readline ne s'aiment pas trop ensemble...

    Mon résultat ne fait que le remplacement alors que ma concaténation marche bien toute seule...

    Merci beaucoup pour votre help!

    Dark

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Re,

    Voilà, j'ai reséparé les 2 portions (remplacement et concaténation) et clairement quand je commente l'une, c'est l'autre qui fonctionne et inversement.

    Je voudrais donc comprendre pourquoi les 2 ensembles ne pourraient pas fonctionner ensemble.

    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
    Set f = oFso.OpenTextFile(monini, Lecture)
    Do until f.atEndOfStream 
    		if (f.ReadLine="panzani") then wscript.quit	
    loop
    f.close 
     
    Set oRegEx = New RegExp
    oRegEx.Global = True
    oRegEx.Pattern = "(\n|^)" & "lignequejeveux" & ".*(\r|$)"
    Set f = oFso.OpenTextFile(monini, Lecture)
    Line = f.ReadAll
    f.close
    NewLine = oRegEx.Replace(Line, vbLf & "lignequejeveuxfaireremplacer" & vbCr)
    Set f = oFso.OpenTextFile(monini,Ecriture)
    f.Write NewLine
    f.Close
     
    oFSo.OpenTextFile(monini, Concate).Write oFSo.OpenTextFile(monnouveauini).ReadAll 
    f.close
    Newbie en détresse...

    merci pour vos indications ou pistes car là je sèche...

    Dark

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    bonjour!

    Personne pour m'orienter?

    Il me manque clairement une logique vbs (voire développement) pour éviter de faire 2 scripts différents...

    Merci d'avance,

    Dark

  4. #4
    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
    tu devrais choisir un nom distinct pour le fichier lecture et celui ecriture, et pour pouvoir te relire si ton code grossit, il vaudrait mieux un truc subjectif.

    Et sinon, je vois monini en chemin de fichier, mais il n'est déclaré nulle part

    Et sinon vu la simplicité du script, tu peux peut être eviter regex, pour faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Do until monFichier.atEndOfStream
    maLigne = monFichier.ReadLine
    if maLigne = "blablabla" then
    MonNouveauIni.writeline("mon nouveau texte")
    else
    MonNouveauIni.writeline(maLigne)
    End If
    loop

  5. #5
    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
    Readall récupère toutes les données d'un fichier et place ton curser de fichier à la fin de celui-ci.
    ReadLine lit une ligne et place le curser à la ligne suivante.

    Il faut faire un choix :
    1) tu lis tout et cherche panzani et l'autre ligne avec le regexp.
    2) tu lis ligne par ligne et tu testes chaque ligne avec les regexp ou non.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    merci pour vos réponses, j'ai gardé la solution ligne par ligne de spantemonium (d'ailleurs toutes mes variables sont bien déclarées pas de souci), ce qui me permet d'avoir le luxe d'aller plus loin dans le sens où je veux insérer la ligne plus que la remplacer. Et pour cela, la méthode est nickel.

    Le hic, il ne m'écrit qu'une ligne sur 2...

    Partie du code concernée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Do until f.atEndOfStream
    	if f.ReadLine="panzani" then 
    		w.writeLine f.ReadLine
    		w.writeLine "buitoni"
    	else 
    		w.writeLine f.ReadLine
    	End If
    Loop
    J'ai bien mon buitoni mais comment se fait il qu'il n"y ait qu'une ligne sur 2?

    Merci!

    Dark

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut


    Bon après avoir réfléchi un peu (effort surhumain), mon readline était pas bien placé...

    Donc maintenant ça marche bien et je reposterai le code en le commentant pour les autres newbies

    Merci beaucoup



    Dark

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Voici le code et ce qu'il fait (bon ça risque d'être un peu cracra...)

    1. Teste le ini si la modif' a été appliquée par une ligne qui n'apparaît qu'après modif'
    2. Remplace panzani par buitoni
    3. insère 2 lignes après la section [liste de recettes]
    4. Concatène un autre ini qui contient toutes les meilleures recettes
    5. utilise un fichier temp qui est ensuite renommé

    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
    option explicit
     
    Dim oFso, f, w
    Dim monini, newini, initemp
    Dim oWshShell
    Dim read 
     
    Set oWshShell = Wscript.CreateObject("Wscript.Shell")
    Set oFso = CreateObject("Scripting.FileSystemObject")
     
    strUserName = oWshShell.ExpandEnvironmentStrings("%USERNAME%")
     
    Const Lecture = 1, Ecriture = 2 
    Const Concate = 8
     
    'test si modification appliquée alors sortie du script
    Set f = oFso.OpenTextFile(monini, Lecture)
    Do until f.atEndOfStream
    		if (f.ReadLine="buitoni") then wscript.quit	
    loop
    f.close 
     
    'Création du fichier ini temporaire
     
    OFSo.CreateTextFile initemp, TRUE
     
    'fichier ini temp en mode écriture
    Set w = oFso.OpenTextFile(initemp, Ecriture)
    'fichier ini en mode écriture
    Set f = oFso.OpenTextFile(monini, Lecture)
     
    Do until f.atEndOfStream
    	read = f.ReadLine
    	Select Case read
    		Case "panzani"
                            'transforme panzani en buitoni
    			w.writeLine "buitoni"
    		Case "[liste des recettes]"
    			w.writeLine read
    			w.writeLine "pates carbo"
    			w.writeLine "papattes"
    		Case Else 
    			'écriture ligne du ini
    			w.writeLine read
    	End select
    Loop
     
    f.close 
    w.close
     
    oFSO.deletefile monini
    'renommage du fichier ini temporaire en fichier ini principal
    oFSO.MoveFile initemp, monini 
    'ajout de nouvelles recettes à partir du fichier thebestrecipes.ini
    oFSo.OpenTextFile(monini, Concate).Write oFSo.OpenTextFile(newini).ReadAll

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/06/2015, 12h55
  2. [JDOM] Problème avec le traitement de fichier texte
    Par hedibox dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 24/08/2013, 14h49
  3. Problème STL lecture fichier texte
    Par Bourrine dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 03/04/2007, 11h57
  4. [VB.NET] - Traitement de fichier texte
    Par titoff60 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 17/01/2007, 08h27
  5. Réponses: 13
    Dernier message: 24/10/2006, 14h17

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