File e directory (libreria runtime di Apache OpenOffice)
L'utilizzo dei file rappresenta una delle attività di base di un'applicazione. L'API di Apache OpenOffice fornisce un'intera gamma di oggetti con cui potete creare, aprire e modificare i documenti Office. Questi oggetti sono presentati nel capitolo Introduzione all'API di Apache OpenOffice. In ogni caso, talvolta occorre accedere direttamente al file system, eseguire ricerche nelle directory o modificare i file di testo. La libreria runtime di Apache OpenOffice Basic mette a vostra disposizione numerose funzioni fondamentali per queste attività.
Amministrazione dei file
Ricerca nelle directory
La funzione Dir in Apache OpenOffice Basic esegue la ricerca di file e sottodirectory nelle directory. Alla prima richiesta, deve essere assegnata a Dir come suo primo parametro una stringa contenente il percorso delle directory in cui eseguire la ricerca. Il secondo parametro di Dir specifica il file o la directory da cercare. Apache OpenOffice Basic restituisce il nome della prima voce di directory individuata. Per richiamare la voce successiva, la funzione Dir dovrebbe essere richiesta senza parametri. Se la funzione Dir non individua più voci, restituisce una stringa vuota.
L'esempio seguente mostra come utilizzare la funzione Dir per richiedere tutti i file situati in una directory. La procedura salva i singoli nomi di file nella variabile AllFiles e quindi la visualizza in una finestra di messaggio.
Sub ShowFiles
Dim NextFile As String
Dim AllFiles As String
AllFiles = ""
NextFile = Dir("C:\", 0)
While NextFile <> ""
AllFiles = AllFiles & Chr(13) & NextFile
NextFile = Dir
Wend
MsgBox AllFiles
End Sub
Lo 0 (zero) utilizzato come secondo parametro nella funzione Dir assicura che Dir restituisca solo i nomi dei file e che le directory siano ignorate. I parametri seguenti possono essere specificati qui:
- 0: restituisce i file normali
- 16: sottodirectory
L'esempio seguente è praticamente identico a quello precedente, ma la funzione Dir trasferisce il valore 16 come parametro, che restituisce le sottodirectory di una cartella anziché i nomi dei file.
Sub ShowDirs
Dim NextDir As String
Dim AllDirs As String
AllDirs = ""
NextDir = Dir("C:\", 16)
While NextDir <> ""
AllDirs = AllDirs & Chr(13) & NextDir
NextDir <nowiki>= Dir</nowiki>
Wend
MsgBox AllDirs
End Sub
Creazione ed eliminazione di directory
Apache OpenOffice Basic dispone della funzione MkDir per la creazione di directory.
MkDir ("C:\SubDir1")
Questa funzione consente di creare directory e sottodirectory. Se richiesto, si possono creare anche tutte le directory necessarie all'interno di una gerarchia. Ad esempio, se esiste solo la directory C:\SubDir1, la chiamata
MkDir ("C:\SubDir1\SubDir2\SubDir3\")
crea sia la directory C:\SubDir1\SubDir2 che la directory C:\SubDir1\SubDir2\SubDir3.
La funzione RmDir consente di eliminare le directory.
RmDir ("C:\SubDir1\SubDir2\SubDir3\")
Qualora la directory contenga sottodirectory o file, verranno eliminati anch'essi. Si consiglia pertanto di utilizzare RmDir con cautela.
In VBA, le funzioni MkDir e RmDir sono relative alla sola directory corrente. In Apache OpenOffice Basic, MkDir e RmDir si possono invece utilizzare per creare o eliminare livelli di directory. |
Copia, ridenominazione, eliminazione e controllo dell'esistenza dei file
La chiamata seguente crea una copia del file Source sotto il nome di Destination:
FileCopy(Source, Destination)
Con l'ausilio della seguente funzione è possibile rinominare il file OldName in NewName. La sintassi della parola chiave As e il fatto che non è utilizzata una virgola risalgono alle radici del linguaggio Basic.
Name OldName As NewName
La chiamata seguente elimina il file Filename. Per eliminare le directory (e i relativi file) avvalersi della funzione RmDir.
Kill(Filename)
La funzione FileExists può essere utilizzata per controllare se esiste un file:
If FileExists(Filename) Then
MsgBox "file exists."
End If
Lettura e modifica delle proprietà dei file
Quando si lavora con i file, è talvolta importante essere in grado di stabilire le proprietà dei file, l'ora dell'ultima modifica del file e la sua lunghezza.
La chiamata seguente restituisce alcune proprietà su un file.
Dim Attr As Integer
Attr = GetAttr(Filename)
Il valore restituito è fornito come maschera di bit in cui sono possibili i valori seguenti:
- 1: file di sola lettura
- 16: nome di una directory
L'esempio seguente determina la maschera di bit del file test.txt e controlla se è di sola lettura e se si tratta di una directory. Se nessuna delle due è applicabile, a FileDescription è assegnata la stringa "normal".
Dim FileMask As Integer
Dim FileDescription As String
FileMask = GetAttr("test.txt")
If (FileMask AND 1) > 0 Then
FileDescription = FileDescription & " read-only "
End IF
If (FileMask AND 16) > 0 Then
FileDescription = FileDescription & " directory "
End IF
If FileDescription = "" Then
FileDescription = " normal "
End IF
MsgBox FileDescription
La funzione SetAttr consente di modificare le proprietà di un file. La chiamata seguente può pertanto essere utilizzata per fornire un file con stato di sola lettura.
SetAttr("test.txt", 1)
Per eliminare uno stato di sola lettura preesistente, avvalersi della chiamata seguente:
SetAttr("test.txt", 0)
La data e l'ora dell'ultima modifica operata su un file sono fornite dalla funzione FileDateTime. Qui la data è formattata in conformità alle impostazioni specifiche del paese utilizzate sul sistema.
FileDateTime("test.txt") ' Provides date and time of the last file amendment.
La funzione FileLen determina la lunghezza di un file in byte (come numero intero lungo).
FileLen("test.txt") ' Provides the length of the file in bytes
Scrittura e lettura di file di testo
Apache OpenOffice Basic mette a disposizione una gamma completa di metodi di lettura e scrittura dei file. Le informazioni riportate di seguito sono relative alle operazioni con i file di testo (non i documenti di testo).
Scrittura di file di testo
Per accedere a un file di testo occorre aprirlo. Per eseguire questa operazione, è necessario un descrittore di file libero, che identifichi chiaramente il file per il successivo accesso.
Per creare un descrittore di file libero, avvalersi della funzione FreeFile. Il descrittore di file è utilizzato come parametro per l'istruzioneOpen che apre il file. Per aprire un file in modo da specificarlo come file di testo, usare la chiamata Open seguente:
Open Filename For Output As #FileNo
Filename è una stringa contenente il nome del file. FileNo è il descrittore creato dalla funzione FreeFile.
Una volta aperto il file, l'istruzione Print può essere descritta riga per riga:
Print #FileNo, "This is a test line."
FileNo rappresenta anche qui il descrittore di file. Il secondo parametro specifica il testo da salvare come riga del file di testo.
Una volta completato il processo di scrittura, il file deve essere chiuso utilizzando una chiamata Close:
Close #FileNo
Anche qui dovrete specificare il gestore di file.
L'esempio seguente mostra come aprire, descrivere e chiudere un file di testo:
Dim FileNo As Integer
Dim CurrentLine As String
Dim Filename As String
Filename = "c:\data.txt" ' Define file name
FileNo = Freefile ' Establish free file handle
Open Filename For Output As #FileNo ' Open file (writing mode)
Print #FileNo, "This is a line of text" ' Save line
Print #FileNo, "This is another line of text" ' Save line
Close #FileNo ' Close file
Lettura di file di testo
La lettura dei file di testo avviene secondo le stesse modalità della scrittura. L'istruzione Open utilizzata per aprire il file contiene l'espressione For Input in luogo dell'espressione For Output. Per leggere i dati è opportuno utilizzare l'istruzione Line Input anziché il comando Print di scrittura dei dati.
Infine, quando si richiama un file di testo, viene impiegata l'istruzione eof per controllare se è stata raggiunta la fine del file:
eof(FileNo)
L'esempio seguente illustra come eseguire la lettura di un file di testo:
Dim FileNo As Integer
Dim CurrentLine As String
Dim File As String
Dim Msg as String
' Define filename
Filename = "c:\data.txt"
' Establish free file handle
FileNo = Freefile
' Open file (reading mode)
Open Filename For Input As FileNo
' Check whether file end has been reached
Do While not eof(FileNo)
' Read line
Line Input #FileNo, CurrentLine
If CurrentLine <>"" then
Msg = Msg & CurrentLine & Chr(13)
end if
Loop
' Close file
Close #FileNo
Msgbox Msg
Le singole righe sono richiamate in un ciclo Do While, salvate nella variabile Msg e visualizzate nella parte finale di una finestra di messaggio.
Content on this page is licensed under the Public Documentation License (PDL). |