Visualizza la versione completa : [VBS] Sostituire stringa utilizzando RegEx in un file di testo
[trodat]
28-03-2020, 19:35
Ciao a tutti.
Il file di testo expiration.txt contiene 197.015 righe.
Per ciascuna riga ho la necessità di sostituire :
2020-03-01 13:33 >>> 2020-03-01
2020-02-01 08:45 >>> 2020-02-01
2020-01-01 11:30 >>> 2020-01-01
...
...
2018-01-01 12:40 >>> 2018-01-01 (questa è l'ultima riga numero 197.015 )
Questo è il codice che sto provando, che però non funziona.
Non dà errori, ma la sostituzione non avviene, il file rimane nel formato iniziale.
Come posso risolvere.
Grazie.
Const ForReading = 1
Const ForWriting = 2
intCount = 0
intIndex = 1
Set oFSO = CreateObject("Scripting.FileSystemObject")
str_input = ""
Set oInFile = oFSO.OpenTextFile("expiration.txt", 1)
str_input = oInFile.ReadAll()
Set oRegEx = CreateObject("VBScript.RegExp")
With oRegEx
.Multiline = True
.Global = True
.Pattern = "(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+);"
End With
Do Until oInFile.AtEndOfStream
str_input = oInFile.ReadLine
If (intCount = 0) Then
str_input = oRegEx.Replace(str_input, "$1-$2-$3;")
Set oInFile = oFSO.OpenTextFile("expiration.txt", 2)
oInFile.Write str_input
oInFile.Close
End If
intCount = intCount + 1
If (intCount = 200) Then
intCount = 0
intIndex = intIndex + 1
oInFile.Close
End If
Loop
oInFile.Close
set oFSO = nothing WScript.echo "ok"
Il codice è illeggibile
Comunque la data/ora si trova sempre all'inizio della riga?
[trodat]
28-03-2020, 21:24
Quando provo ad accedere con Chorme, mi dà questo errore e non mi fa andare avanti :
Messaggio vBulletinUn campo obbligatorio chiamato ip è mancante o ha un valore non valido.
L'unico modo è stato cambiare browser (Edge) e inserire una risposta al topic.
Questo è il codice :
Const ForReading = 1
Const ForWriting = 2
intCount = 0
intIndex = 1
Set oFSO = CreateObject("Scripting.FileSystemObject")
str_input = ""
Set oInFile = oFSO.OpenTextFile("expiration.txt", 1)
str_input = oInFile.ReadAll()
Set oRegEx = CreateObject("VBScript.RegExp")
With oRegEx
.Multiline = True
.Global = True
.Pattern = "(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+);"
End With
Do Until oInFile.AtEndOfStream
str_input = oInFile.ReadLine
If (intCount = 0) Then
str_input = oRegEx.Replace(str_input, "$1-$2-$3;")
Set oInFile = oFSO.OpenTextFile("expiration.txt", 2)
oInFile.Write str_input
oInFile.Close
End If
intCount = intCount + 1
If (intCount = 200) Then
intCount = 0
intIndex = intIndex + 1
oInFile.Close
End If
Loop
oInFile.Close
set oFSO = nothing
WScript.echo "ok"
KillerWorm
28-03-2020, 23:12
Quando provo ad accedere con Chorme, mi dà questo errore e non mi fa andare avanti :
Grazie per la segnalazione, la riferisco all'amministrazione
[trodat]
28-03-2020, 23:21
Il codice è illeggibile
Comunque la data/ora si trova sempre all'inizio della riga?
Grazie
Riesco ad accedere correttamente solo dallo Smartphone.
Dal pc praticamente impossibile con qualsiasi browser.
La risposta alla tua domanda è no.
La data non è mai all'inizio della riga.
Purtroppo dallo Smartphone non posso postare il tracciato record.
[trodat]
28-03-2020, 23:33
Il codice è illeggibile
Comunque la data/ora si trova sempre all'inizio della riga?
Tracciato record :
foo1; 2020-03-01 13:33;
foo2; 2020-02-01 08:45;
foo3; 2020-01-01 11:30;
...
...
...
Ok, non è all'inizio, ma sempre il secondo campo come hai mostrato?
Se è così, puoi usare questa versione di codice (la tua tenta di scrivere nel file di input ...)
Const ForReading = 1
str_input = ""
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oInFile = oFSO.OpenTextFile("test.txt", ForReading)
Set oOutFile = oFSO.CreateTextFile("test2.txt", True)
Do Until oInFile.AtEndOfStream
str_input = oInFile.ReadLine
flds = Split(str_input, ";")
flds(1) = Trim(Left(flds(1), len(flds(1))-5))
for each f in flds
oOutFile.Write f & ";"
next
oOutFile.WriteLine
Loop
oInFile.Close
oOutFile.Close
set oFSO = nothing
WScript.echo "ok"
[trodat]
29-03-2020, 09:30
Ok, non è all'inizio, ma sempre il secondo campo come hai mostrato?
Se è così, puoi usare questa versione di codice (la tua tenta di scrivere nel file di input ...)
Const ForReading = 1
str_input = ""
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oInFile = oFSO.OpenTextFile("test.txt", ForReading)
Set oOutFile = oFSO.CreateTextFile("test2.txt", True)
Do Until oInFile.AtEndOfStream
str_input = oInFile.ReadLine
flds = Split(str_input, ";")
flds(1) = Trim(Left(flds(1), len(flds(1))-5))
for each f in flds
oOutFile.Write f & ";"
next
oOutFile.WriteLine
Loop
oInFile.Close
oOutFile.Close
set oFSO = nothing
WScript.echo "ok"
Grazie
Errore ;
Indice non incluso nell intervallo
Alla riga flds(1) = ....
Scusa ma ti rispondo dallo Smartphone
Dal pc non riesco ad accedere al forum
Hai detto che la riga tipo è
foo1; 2020-03-01 13:33;
ma dall'errore si capisce che esistono righe fatte diversamente.
Devi dirci se ci sono eccezioni a questo formato record
[trodat]
29-03-2020, 10:20
Sempre da smartphone
Le righe sono quelle che ho postato nel primo msg
Ho provato a ridurre il numero delle righe ma da lo stesso errore