Oggi, in questo brevissimo post, voglio condividere con voi uno
dei mitici script che ho creato nel mio “viaggio” come Sysadmin…
Capita a volte di trovarsi a dover manipolare programmaticamente
dei file e di doverne analizzare e modificare di davvero ENORMI…
…a questo punto ecco entrare in gioco il mitico scripting,
che permette di programmare on-the-fly ed avere il risultato pronto, senza
bisogno di scomodare il signor compilatore… 😊
Con questo script è possibile eliminare, da un file di testo
MOOOOLTO grande, un elenco specifico di righe.
In pratica mi avevano chiesto di ricevere un file ed un
elenco delle righe da eliminare e… bumble bumble magicabula … generare un file corretto…
ma ecco lo script, sperando che possa tornare utile a qualcun altro.
' Elimina le righe numero X da un file di testo. i numeri riga da eliminare li prende da un file di testo.
const ForReading = 1
const ForWriting = 2
const ForAppending = 8
set Dic = createObject("Scripting.dictionary")
Set objFSO1 = createObject("Scripting.FilesystemObject")
Set objFSO2 = createObject("Scripting.FilesystemObject")
Set objFSO3 = createObject("Scripting.FilesystemObject")
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "regex"
percBase="C:\Users\DiegoC\Desktop\TMP\2014-10-21_varie\ScriptAmministrazione\"
numFile=4
fileRighe = percBase & "errori file" & numFile & ".csv"
fileOrigine = percBase & "contratti_" & numFile & ".txt"
fileDestinazione = percBase & "contratti_pulito_" & numFile & ".txt"
Set objFileRighe = objFSO1.OpenTextFile(fileRighe, ForReading)
Set objFileOrigine = objFSO2.OpenTextFile(fileOrigine, ForReading)
Set objFileDestinazione = objFSO3.OpenTextFile(fileDestinazione, ForAppending, True)
' caccia i numeri riga da eliminare in un dictionary
'apri file di testo, e parsalo row-by-row nel dic. (includendo 1) perch� la riga 1 (la zero sarebbe) contiene le intestazioni
REM Dic.Add 0, ""
Do Until objFileRighe.AtEndOfStream
strLine = objFileRighe.ReadLine
strArr=split(strLine, ";")
strRowToDel=CLng(strArr(2))
strRowToDel=strRowToDel-1
Dic.Add strRowToDel, ""
REM wscript.echo " ciaociao " & strRowToDel
Loop
'apri il file di destinazione (un nuovo file di testo for append.
'apri il file di origine for reading.
i=0
Do Until objFileOrigine.AtEndOfStream
'row by row incrementa puntatore, se puntatore � in dictionary delle righe da eliminare, salta la riga, altrimenti appendila nel file di destinazione.
strLine = objFileOrigine.ReadLine
REM wscript.echo "riga " & i
if Dic.Exists(i) then
REM wscript.echo "byebye"
else
objFileDestinazione.WriteLine strLine
end if
i=i+1
Loop
HAPPY SCRIPTING!
Nessun commento:
Posta un commento
I commenti sono soggetti a moderazione, prima di essere pubblicati.
Qualsiasi contenuto illecito, immorale o che io ritenga (arbitrariamente) offensivo od inappropriato, verrà cancellato.