mercoledì 23 gennaio 2019

Eliminare le righe numero X da un file di testo - vbscript

Buongiorno a tutti!
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.