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 :

Write In .txt File by Line.


Sujet :

VBScript

  1. #1
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Points : 108
    Points
    108
    Par défaut Write In .txt File by Line.
    Bonjour,
    je chercher un traitement pour remplacer une valeur sur un fichier .txt mais exactement sur une ligne bien précis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
    Test.txt :
    
    TEST1
    TEST1
    TEST1
    TEST1

    Résulta attendus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TEST1
    TEST1
    NewValue
    TEST1
    J'ai essayer avec ce script mais ca marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Set f = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Documents and Settings\A550381\Bureau\IgnoreTextCompare\Text2.txt",1) 
     
    f.SkipLine 
    f.SkipLine
    f.SkipLine
     
    f.WriteLine(Replace(f.ReadLine,"…","…"))
    Merci D'avance.

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Vous pouvez tester avec ce code inspiré de cette discussion : Comment extraire une partie d'un fichier texte comprise entre la ligne (n) et la ligne (m) ?
    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
    Option Explicit
    Dim Title,FromLine,ToLine
    Title = "Extract Lines From TextFile © Hackoo Crackoo 2013"
     
    MsgBox ExtractLinesFromTextFile("test1.txt",3,3),64,Title
    MsgBox Replace(ExtractLinesFromTextFile("test1.txt",3,3),ExtractLinesFromTextFile("test1.txt",3,3),"Hackoo"),64,Title
     
    Public Function ExtractLinesFromTextFile(ByRef TextFile, ByRef FromLine, ByRef ToLine) '<-- Inclusive
        Const TristateUseDefault = -2 'To Open the file using the system default.
        On Error Resume Next
        If FromLine <= ToLine Then
            With CreateObject("Scripting.FileSystemObject").OpenTextFile(TextFile,1,true,TristateUseDefault)
                If Err.number <> 0 Then
                    MsgBox err.description,16,err.description
                    Exit Function
                Else
                    Do Until .Line = FromLine Or .AtEndOfStream
                        .SkipLine
                    Loop
                    Do Until .Line > ToLine Or .AtEndOfStream
                        ExtractLinesFromTextFile = ExtractLinesFromTextFile & (.ReadLine & vbNewLine)
                    Loop
                End If
            End With
        Else
            MsgBox "Error to Read Line in TextFile", vbCritical,"Error to Read Line in TextFile"
        End If
    End Function

  3. #3
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je peux vous proposer une solution avec regexp que je préfère un peu plus.

    Les erreurs qui peuvent être controller sont soit le fichier n'existe pas, soit le fichier est vide. Faites attention aussi l'encodage du fichier: ci-desous on suppose ascii.
    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
    'les données préalables
    line_number=3
    replacement_line="xyz"
     
    txtfile="C:\Documents and Settings\A550381\Bureau\IgnoreTextCompare\Text2.txt"
    outfile="C:\Documents and Settings\A550381\Bureau\IgnoreTextCompare\Text2_out.txt"
     
    dim s,t,rx,fso,f
     
    set fso=createobject("scripting.filesystemobject")
    if fso.fileexists(txtfile) then
        set f=fso.OpenTextFile(txtfile,1)
        if not f.atEndofStream then
            s=f.readall
            f.close
        else
            'cleanup et message comme on veut
            wscript.quit
        end if
    else
        'cleanup et message comme on veut
        wscript.quit
    end if
     
    set rx=new regexp
    with rx
        .pattern="^((.*?\r\n){" & (line_number-1) & "})(.*?)(\r\n[\s\S]*)?$"
        '.multiline=false    'pas absolument nécessaire
    end with
     
    t=rx.replace(s,"$1" & replacement_line & "$4")
     
    set f= fso.OpenTextFile(outfile,2,true) 
    f.write t
    f.close
     
    'cleanup et message comme on veut

  4. #4
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Points : 108
    Points
    108
    Par défaut
    Merci Pour vos réponse.de m'a part j'ai trouver une autre solution :

    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
     
    strNewLine = "New Line to Write"
    strFileName = "C:\Documents and Settings\A550381\Bureau\IgnoreTextCompare\Text2.txt"
    Set objFS = CreateObject("Scripting.FileSystemObject") 
    Set objTS = objFS.OpenTextFile(strFileName, 1) 
    strContents = objTS.ReadAll 
    objTS.Close 
     
    arrLines = Split(strContents, vbNewLine) 
    Set objTS = objFS.OpenTextFile(strFileName, 2) 
    For Each strLine In arrLines 
    If strline = arrLines(1) then   
    objTS.WriteLine strNewLine
    else
    objTS.WriteLine strLine
    End If 
    Next

  5. #5
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Points : 108
    Points
    108
    Par défaut
    J'ai une autre question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    B="012|003|0098K|004PMSTest003bis|0098K"
     
    MsgBox Replace(B,Mid(B,5,3) ,"NexText")
    Résulta :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    012|NexText|0098K|004PMSTest003bis|0098K
    ma question est :
    Mid(B,5,3) => remplacer 5 par index de la bar (diviser le text par bar | )
    exemple : Mid(B,"3éme bar",...) => 004PMSTest003bis

    une boucle qui récupéré les index de tous les bar |

    Merci

  6. #6
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Pourquoi tu ne fais pas un split de ta variable ?

  7. #7
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
    Dim B,i,MonTableau,NewText
    B="012|003|0098K|004PMSTest003bis|0098K"
    MonTableau = Split(B,"|")
    MsgBox MonTableau(1)
    MsgBox Replace(B,MonTableau(1),"NewText")

  8. #8
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Points : 108
    Points
    108
    Par défaut
    Merci Infiniment c parfait.

  9. #9
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut
    Citation Envoyé par benhsaien Voir le message
    Merci Infiniment c parfait.
    Ok
    Mais tu as oublié de voter sur le message pertinent qui t'as aidé en cliquant sur +1 et de mettre cette discussion comme résolue en cliquant aussi sur le bouton
    Bonne Chance !

  10. #10
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Points : 108
    Points
    108
    Par défaut
    les amis,juste une dernier question.

    Comment faire pour supprimer la dernier ligne dans un fichier .txt.(supprimer la ligne définitivement pas seulement le contenu de la ligne)

    Merci

  11. #11
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut
    Citation Envoyé par benhsaien Voir le message
    Comment faire pour supprimer la dernier ligne dans un fichier .txt.(supprimer la ligne définitivement pas seulement le contenu de la ligne)
    Tu as oublié de voter sur le ou les message(s) pertinent(s) qui t'as aidé en cliquant sur +1 et de mettre cette discussion comme résolue en cliquant aussi sur le bouton , car chaque question = une nouvelle discussion
    Donc je te suggère d'ouvrir une nouvelle discussion en détaillant ton nouveau problème avec un exemple si tu peux
    de ta compréhension

Discussions similaires

  1. Delete Last Ligne In Txt File.
    Par benhsaien dans le forum VBScript
    Réponses: 8
    Dernier message: 10/10/2013, 12h47
  2. write et bad file descriptor
    Par Torx26 dans le forum Débuter
    Réponses: 5
    Dernier message: 30/11/2011, 10h48
  3. BLOB => Document4D Write => RTF/TXT
    Par Klixx dans le forum 4D
    Réponses: 2
    Dernier message: 08/09/2010, 10h27

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