http://digilander.libero.it/Cenati

Funzioni per gestire files

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript

 

 

 

 

 

Funzioni utili per gestire files di testo

Chi è abituato ad usare qualsiasi altro linguaggio di programmazione si trova stupito di fronte a vbScript, in quanto non esistono le consuete istruzioni "open" e "close", ma per accedere ai files è necessario creare una istanza di un oggetto dedicato a questo scopo.

Rimandando una trattazione più completa del file system object, illustro qui di seguito alcune funzioni che permettono in modo semplice di creare e manipolare un file ascii. Non sono funzioni mie, ma averle trovate già pronte mi ha fatto molto piacere. Sono ben fatte ed hanno una buona gestione degli errori. Infatti alcune mie funzioni davano per scontato che la lettura o la scrittura andassero a buon fine. Cosa che non sempre succede.

Una di queste funzioni (FindInFileR) è mia. In un programma generavo una lista dei processi attivi in memoria. Mi serviva una funzione per vedere se l'antivirus era effettivamente funzionante oppure no.

L'approccio di queste funzioni non è dei più efficienti, in termini di velocità di esecuzione. Per esempio, per scrivere 10 righe si chiama dieci volte la funzione che scrive una riga, istanziando e rimuovendo per altrettante volte l'oggetto FSO.

Tuttavia in alcuni casi si può preferire la velocità nella scrittura del codice piuttosto che la velocità di esecuzione, salvo poi ritornare sullo script per ottimizzarlo con calma.

Prima di tutto definiamo il nome del file al quale vogliamo accedere in lettura, in scrittura o in append (aggiunge alla fine del file). Dopo che è stato fatto posso usare queste funzioni.

FName="c:\test.txt" 
if File_IsExist( FName ) then msgbox("Il file esiste già") 
File_Create( FName ) 'Crea il file 
File_AppendLine( FName, "Riga scritta nel file" ) 
File_AppendLine( FName, "Seconda riga scritta nel file" )


Il file viene chiuso automaticamente dopo ogni scrittura.
Per cancellarlo uso quest'altra funzione.

File_Delete( FName )


Posso anche cercare una singola riga che contiene un testo determinato. Questa funzione scorre il file specificato e quando incontra una riga che contiene "prompt" (nell'esempio) restituisce l'intera riga. Se non trova nulla restituisce una stringa nulla.

msgbox FindInFileR("c:\autoexec.bat", "prompt")


oppure caricare l'intero file in una variabile.

A =  File_ReadEntireFile( FName )


e magari creare un vettore delle singole righe (identificate dal fatto che terminano con un ritorno a capo).

vett = split (a, vbcrlf)
for i=0 to ubound (vett)
 msgbox vett(i)
next


Insomma, con questa manciata di funzioni ci si può dedicare al cuore del
programma senza preoccuparsi troppo della creazione dell'output su file.

Se trovate utili queste funzioni potreste metterle, insieme ad altre, in un file da includere nei vostri script. In questo modo basterà fare riferimento alla libreria per avere automaticamente queste estensioni. Per sapere come includere una libreria ho scritto una pagina apposita sulla funzione "include".

Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente lo script queste funzioni contenute nel file fso1.vbs.

        
'======================================================================== ' Crea un file. Nel caso in cui gia' esiste, lo sovrascrive '======================================================================== Sub File_Create( sFileName ) Dim opfs, fp On Error Resume Next File_Create=True Set opfs = CreateObject("Scripting.FileSystemObject") if Err <> 0 then File_Create=False Exit Function end if Set fp = opfs.CreateTextFile( sFileName, True ) if Err <> 0 then set opfs = nothing File_Create=False Exit Function end if fp.Close set opfs = nothing Err.Clear On Error Goto 0 End Sub '======================================================================== ' Controlla se esiste il file passato come parametro. ' Ritorna TRUE nel caso in cui il file E' stato trovato. '======================================================================== Function File_IsExist( sFileName ) Dim opfs On Error Resume Next File_IsExist=False Set opfs = CreateObject("Scripting.FileSystemObject") if Err <> 0 then Exit Function end if ' Test per l'esistenza del file File_IsExist = opfs.FileExists( sFileName ) set opfs = nothing Err.Clear On Error Goto 0 End Function '======================================================================== ' Legge il contenuto del file ' Ritorna il testo letto '======================================================================== Function File_ReadEntireFile( sFileName ) Const ForReading = 1 'Apre un file in lettura. Dim opfs, fp, retstring On Error Resume Next File_ReadEntireFile = "" Set opfs = CreateObject("Scripting.FileSystemObject") if Err <> 0 then Exit Function end if Set fp = opfs.OpenTextFile( sFileName, ForReading, False ) if Err <> 0 then set opfs = nothing Exit Function end if Do While fp.AtEndOfStream <> True retstring = retstring + fp.ReadLine Loop fp.Close set opfs = nothing File_ReadEntireFile = retstring Err.Clear On Error Goto 0 End Function '======================================================================== ' Aggiunge al file sFileName una riga '======================================================================== Function File_AppendLine( sFileName, sData ) Const ForAppending= 8 Dim opfs, fp, retstring On Error Resume Next File_AppendLine=False Set opfs = CreateObject("Scripting.FileSystemObject") if Err <> 0 then Exit Function end if Set fp = opfs.OpenTextFile( sFileName, ForAppending, False ) if Err <> 0 then set opfs = nothing Exit Function end if fp.WriteLine sData if Err <> 0 then set opfs = nothing Exit Function end if fp.Close File_AppendLine=True set opfs = nothing Err.Clear On Error Goto 0 End Function '======================================================================== ' Crea il file sFileName ed aggiunge al file una riga '======================================================================== Function File_WriteLine( sFileName, sData ) Const ForWriting = 2 'Apre un file in scrittura. Dim opfs, fp On Error Resume Next File_WriteLine=False Set opfs = CreateObject("Scripting.FileSystemObject") if Err <> 0 then Exit Function end if Set fp = opfs.OpenTextFile( sFileName, ForWriting, False ) if Err <> 0 then set opfs = nothing Exit Function end if fp.WriteLine sData if Err <> 0 then set opfs = nothing Exit Function end if fp.Close File_WriteLine=True set opfs = nothing Err.Clear On Error Goto 0 End Function '======================================================================== ' Cancella il file sFileName '======================================================================== Function File_Delete( sFileName ) Dim opfs On Error Resume Next File_Delete = False Set opfs = CreateObject("Scripting.FileSystemObject") if Err <> 0 then Exit Function opfs.DeleteFile sFileName, True if Err <> 0 then Exit Function File_Delete = true set opfs = nothing Err.Clear On Error Goto 0 End Function '======================================================================== ' Cerca nel file sFileName l'occorrenza str e ritorna la riga '======================================================================== Function FindInFileR( sFileName, str ) Const ForReading = 1 'Apre un file in lettura. Dim fso, fp Set fso = CreateObject("Scripting.FileSystemObject") Set fp = fso.OpenTextFile( sFileName, ForReading, False) FindInFileR = "" Do While fp.AtEndOfStream <> True strdata = fp.ReadLine if instr(strdata ,str ) then FindInFileR = strdata fp.Close exit function End If Loop fp.Close End Function

Cenati Giovanni

 

 
 

© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript