Sostizuzione in file txt



  • Sostizuzione in file txt
    di Enzo (utente non iscritto) data: 13/03/2009

    Buongiorno, avrei un problema di questo tipo
    stavo cercando di costruirmi una istruzione ma mi sono arenato
    ossia, ho un file txt con diverse righe
    alcune di queste cominciano con 0, quindi cercavo di dire
    all'istruzione
    se comincia per zero sostituiscimi i 5 caratteri della stringa
    partendo dal 316 (codice2) con il valore xxxxx
    il problema nasce in quanto individuo la riga per 0 individuo il
    codice ma non riesco a sostituire il vaore con xxxxx
    qualcuno sa dirmi dove sbalglio nell'istruzione o darmi qualche
    suggerimento


     
    Open "C:PROVA.TXT" For Input As #1 
    Do Until EOF(1) 
    Line Input #1, DATA 
    CODICE = Mid(DATA, 1, 1) 
    If CODICE = 0 Then 
    CODICE2 = Mid(DATA, 316, 5) 
    DATA = Replace(DATA, CODICE2, "XXXXX") 
    Debug.Print DATA 
    End If 
    Loop 
    Close 
    
    
    



  • di Ricky53 data: 13/03/2009

    Ciao enzo,
    tu hai aperto il file in "input", non puoi aggiornarlo.
    devi aprirlo in i/o (al momento non ricordo se con il vba si può fare) oppure scrivere un altro file (open in "output") con tutte le righe dell'input ed i dati sostituiti.

    ciao da ricky53



  • di R (utente non iscritto) data: 13/03/2009

    Aggiungi i riferimenti a microsoft scripting runtime e
    microsoft vbscript regular expression 5.5
    vedi se va bene ... eventualmente la scrivo
    con create object per evitare i riferimenti.

    quello che fa :
    la prima rouine crea un file di testo prova
    in documenti
    la seconda viene chiamata per sostituire
    gli zeri di inizio riga con un altro codice

    non son sicuro di aver capito ... ma anche te devi imparare
    ad esprimerti
    ciao
    r

     
    Sub test_txt()
    Dim FSO As New FileSystemObject
    Dim tsT As TextStream
    Dim s As String
    s = FSO.BuildPath(Environ("userprofile"), "Documenti")
    s = FSO.BuildPath(s, "prova.txt")
    
    Set tsT = FSO.OpenTextFile(s, ForWriting, True)
    
    With tsT
        .Write "123 roberto mensa"
        .WriteBlankLines (1)
        .Write "0 enzo pellegrino"
        .WriteBlankLines (1)
        .Write "1 enzo pellegrino"
        .WriteBlankLines (1)
        .Write "0 enzo pellegrino"
        .WriteBlankLines (1)
        .Write "1 enzo pellegrino"
        .Close
    End With
    
    Replace_in_txt s, "0", "xxx"
    
    End Sub
    
    Sub Replace_in_txt(sPath As String, _
        sTrova As String, sRip As String)
    
    Dim FSO As New FileSystemObject
    Dim tsT As TextStream
    Dim s As String
    Dim RE As New RegExp
    
    Set tsT = FSO.OpenTextFile(sPath, ForReading, True)
    
    With tsT
        s = tsT.ReadAll
    End With
    
    tsT.Close
    
    Set tsT = FSO.OpenTextFile(sPath, ForWriting, True)
    
    RE.Global = True
    RE.Pattern = "
    0"
    
    If RE.Test(s) Then
        s = RE.Replace(s, Chr(10) & sRip)
    End If
    
    tsT.Write s
    tsT.Close
    End Sub
    
    
    
    






  • di Enzo (utente non iscritto) data: 16/03/2009

    Inizialmente grazie a ricky e a roberto
    volevo solo specificare che se puo' essere d'aiuto la soluzione che ho utilizzato, per onesta' mi e' stata data in altra sede e l'ho postata qui sotto
    ciao e grazie lo stesso
     
    Open "C:PROVA.TXT" For Input As #1
    Open "C:PROVA2.TXT" For Output As #2
    Do Until EOF(1)
    Line Input #1, data
    CODICE = Mid(data, 1, 1)
    If CODICE = 0 Then
    CODICE2 = Mid(data, 316, 5)
    data = Replace(data, CODICE2, "XXXXX")
    Debug.Print data
    End If
    Print #2, data
    Loop
    Close
    Kill "C:PROVA.TXT"
    Name "C:PROVA2.TXT" As "C:PROVA.TXT"



  • di Ricky53 data: 16/03/2009

    Ciao enzo,
    solo per precisione:
    se rileggi il mio intervento noterai che la soluzione da te riportata è la stessa di quella che ti avevo suggerito io ossia scrivere un altro archivo txt mediante la "open in output".

    buon lavoro.
    ciao da ricky53



  • di Enzo (utente non iscritto) data: 16/03/2009

    Hai ragioneme me ne sono accorto dopo ma mi sono dimenticato di apportare la correzione alla risposta
    grazie