Home

La libreria Runtime Basic in OOo

Non ci si faccia spaventare dal nome, sono semplicemente delle funzioni di base del Basic in OOo.

CONVERSIONI

La conversione di una variabile da un tipo ad un altro tipo può essere fatta in due maniere:

  1. implicitamente, dando ad una variabile di un tipo un valore di una variabile di un altro tipo:

Option Explicit



Sub prova

Dim a As String

Dim b As Integer

b = 5

a = b +1

print a





End Sub

dà come risultato

ma attenzione, se avessimo fatto più semplicemente

Option Explicit



Sub prova

Dim a As String

a = 5

a = a +1

print a



End Sub

avremmo ottenuto un poco utile

  1. esplicitamente, utilizzando le funzioni: CStr, CInt, CSng, CDbl, CBool, CDate, CLng, rispettivamente per: String, Integer, Single, Double, Boolean, Date, Long .

    Il loro utilizzo è immediato:

Dim a As String

Dim b As Integer

a = 5

b = CInt(a)

b = b + 1

print b

dà correttamente

Solo per i valori, in alternativa a CSng e CDbl, c'è Val(), a cui però bisogna sempre passare il punto come separatore decimale, mentre CSng e CDbl accettano il punto o la virgola in funzione dell'impostazione locale.

Per controllare se una variabile è di un determinato tipo, si possono utilizzare le funzioni: IsNumeric, IsDate, IsArray.



STRINGHE

Ci sono diverse funzioni che riguardano le stringhe:

CODICI UNICODE:

  1. Asc() per determinare il codice UNICODE di una stringa: per esempio

    codiceUnicode = Asc(“a”)

    print codiceUnicode

    restituisce il codice Unicode di a, che è uguale a 97

  2. Chr() invece, al contrario, permette di scegliere un carattere inserendo il codice UNICODE.

  3. ACCESSO A PARTI DI UNA STRINGA:

  4. Left (stringa, lunghezza) restituisce la parte sinistra della stringa per la lunghezza indicata;

  5. Right (stringa, lunghezza) restituisce la parte destra della stringa per la lunghezza indicata;

  1. Len (stringa) restituisce la lunghezza della stringa;

  2. Mid (stringa, inizio, lunghezza) restituisce la parte della stringa a partire da inizio per la lunghezza indicata.

RICERCA E SOSTITUZIONE NELLE STRINGHE

  1. InStr (stringa, ricerca) restituisce la posizione iniziale della prima occorrenza di ricerca all'interno di stringa, per esempio:

    a = InStr (“calcio”, “io”)

    print a

    restituisce 5.

  2. InStr (inizio, stringa, ricerca) come sopra, solo che la ricerca parte dal punto inizio, per es:

    a = InStr (2,“calcio domenicale”, “ca”)

    print a

    restituisce 14.

    Si può anche determinare che InStr distingua tra maiuscole e minuscole, aggiungendo il parametro 0 alla fine, però bisogna passare anche l'inizio della ricerca:

Option Explicit

Sub prova

Dim a As String

a = InStr (1,"capcapCAPcap","CAP", 0)

print a

End Sub

restituisce



  1. Mid (stringa, inizio, lunghezza, stringaDaInserire) sostituisce nella stringa, dalla posizione inizio, per la lunghezza, la stringaDaInserire, però si deve inserire la stringa come variabile perchè funzioni, e non si deve assegnare ad una variabile (non chiedetemi perchè :P), cioè:

Sub prova

Dim a As String

a = "siamo a cavallo"

Mid (a, 9 , 7, "piedi")

print a

End Sub

    restituisce

FORMATTAZIONE

La formattazione dei numeri è possibile con il comando Format() e attraverso i simboli: 0 # . , $

Per esempio:

Format(-1343.885, "0.00") restituisce -1343,89. Si noti che il separatore decimale, all'interno della funzione, è il punto, e che la cifra viene arrotondata e non troncata.

Lo 0 indica una posizione numerica obbligatoria, quindi Format(5.15, "000.00") rende 005,15

Il # invece indica una posizione numerica non obbligatoria, quindi Format(5.15, "##0.00") dà 5,15

Il . indica il separatore decimale impostato dal sistema (quindi da noi la virgola)

La , indica il separatore delle migliaia impostato dal sistema (quindi da noi il punto)

Il $ indica la valuta (es. Format(1500.00, "#,##0.00 $") restituisce 1.500,00 €)



DATA E ORA



La data può essere definita in due modi, in maniera semplice con un'assegnazione:



Sub prova

Dim a as Date

a = "18/10/2007"

a = a +1

print a

End Sub

dà correttamente

che però ha lo svantaggio di essere dipendente dall'impostazione locale del sistema, e quindi può funzionare o meno in determinate condizioni, oppure in maniera più sicura con:

data = DateSerial(2007,10,18)



Per l'ora c'è un comando molto simile che richiede l'ora, i minuti e i secondi:

Sub prova

Dim a

a = TimeSerial(22,32,35)

a = a + TimeSerial(00,01,00)

print a

End Sub

restituisce



Si possono richiedere al sistema:

la data con Date()

l'ora con Time()

la data e l'ora con Now()



Si possono estrarre dalla data:

il giorno con Day()

il mese con Month()

l'anno con Year()

il giorno della settimana con WeekDay()

per esempio:

Option Explicit



Sub prova

Dim oggi As Date

Dim giorno As Integer

Dim giornoSettimana As String



oggi = Date

giorno = WeekDay ( oggi )



Select Case giorno

Case 1

giornoSettimana = "Domenica"

Case 2

giornoSettimana = "Lunedì"

Case 3

giornoSettimana = "Martedì"

Case 4

giornoSettimana = "Mercoledì"

Case 5

giornoSettimana = "Giovedì"

Case 6

giornoSettimana = "Venerdì"

Case 7

giornoSettimana = "Sabato"

End Select



print giornoSettimana

End Sub



dà quale giorno della settimana è oggi.



Per l'ora, i minuti e i secondi ci sono invece le funzioni:

Hour()

Minute()

Second()



GESTIONE DEI FILE E DELLE DIRECTORY



Per la gestione di file e directory ci sono vari comandi:

  1. Dir ("C:\dir1", "0") REM legge tutti i file nella directory C:\dir1 e nelle sottodirectory. Il parametro 0 serve per leggere solo i file, mentre per leggere solo le directory si passa il paramentro 16. Per creare una lista si può utilizzare un macro del genere:

Sub listaFile

Dim nomi As String

Dim lista As String

lista = ""

nomi = Dir ("/home/io/","0")

while nomi <> ""

lista = lista & chr(13) & nomi

nomi = Dir REM questa assegnazione serve per richiamare la voce successiva nella lista dei file e delle directory

wend

print lista

End Sub



Si possono utilizzare i caratteri jolly ? e * nella ricerca, però l'ultimo può essere utilizzato solo alla fine del nome o dell'estensione del file.

  1. MkDir ("/home/io/Desktop/dir3") REM per creare nuove directory, comprese eventuali sottodirectory

  2. RmDir ("C:\dir1\dir2") REM per l'eliminazione di directory, compreso tutto quello che contengono (attenzione: il programma non richiede ulteriori conferme)

  3. FileCopy ("origine", "destinazione") REM per la copia di file

  4. Name vecchionome As nuovonome REM per rinominare un file di nome vecchionome con il nome nuovonome

  5. Kill ("nomeDelFile") REM elimina il file

  6. FileExists("nomeDelFile") REM controlla se il file esiste e prende il valore di Vero/Falso

  7. GetAttr("nomeDelFile") REM rileva gli attributi del file e prende il valore di 0 per file normale, 1 per sola lettura, 16 per directory

  8. SetAttr("nomeDelFile") REM assegna gli attributi al file, con 0 lo rende un file normale, con 1 lo rende in sola lettura

  9. FileDateTime("nomeDelFile") REM restituisce la data e l'ora di sistema dell'ultima modifica del file

  10. FileLen ("nomeDelFile") REM restituisce la lunghezza in byte del file.

Un discorso a parte merita la scrittura di file di testo, che è possibile fare con la seguente macro:

Sub Main

Dim NomeDelFile As String

Dim Riga As String

Dim NrFile As Integer

NomeDelFile = ("/home/io/Desktop/text.txt")

NrFile = Freefile REM Freefile è una funzione che crea un "descrittore di file libero" che identifica il file

Open NomeDelFile For Output As #NrFile REM Il comando Open ... For Output As ... apre (o crea, o sovrascrive, se già presente, il file) e

indirizza le istruzioni successive in scrittura sul file stesso

print #NrFile, "ciao" REM scrive nel file la parola: ciao

Close #NrFile REM chiude il file

End Sub


mentre per la lettura:

Sub Main

Dim NomeDelFile As String

Dim Riga As String

Dim NrFile As Integer

Dim msg As String

NomeDelFile = ("/home/io/Desktop/text.txt")

NrFile = Freefile

Open NomeDelFile For Input As NrFile REM Per la lettura, si utilizza sempre il comando Open... seguito da For Input As ... senza il #

Do While not eof(NrFile) REM il ciclo Do While Not ... esegue il lavoro finchè non ... eof(File) non si raggiunge la fine del file End Of File, REM E.O.F. appunto

Line Input #NrFile, Riga REM Line Input prende i valori che ci sono nella riga del file, e li salva nella variabile Riga

If Riga <> "" Then REM Il ciclo If ... Then è annidato all'interno del ciclo Do While... Loop, e se la Riga contiene qualcosa la salva...

msg = msg & Riga & Chr (13) REM .. nella variabile msg, sommandola alla riga precedente e ad un carattere di invio successivo

End If

Loop

Close NrFile

MsgBox msg

End Sub


CASELLE DI DIGITAZIONE E DI MESSAGGI


Il comango MsgBox che abbiamo usato sopra in maniera molto semplice, ha delle varianti molto utili:

MsgBox "Formattazione Hard Disk: continuare? ", 0

non dà molta scelta, i vari parametri sono:

Inoltre, si può scegliere quale è il pulsante predefinito per la scelta, sommando al valore precedente il seguente:

Cioè, se voglio fare una casella con Ok e Annulla e con il Annulla come pulsante predefinito, scriverò:

MsgBox "Formattazione Hard Disk: continuare? ", 257

che restituisce


Inoltre si possono aggiungere alcuni simboli esplicativi, sempre sommando al valore ottenuto prima uno dei seguenti:

MsgBox "Formattazione Hard Disk: continuare? ", 289


Infine, si può dare un nome più significativo alla casella, invece di soffice, così:

MsgBox "Formattazione Hard Disk: continuare? ", 289, "Attenzione"


Dopo aver scelto uno dei pulsanti (Ok o Annulla nel caso sopra) MsgBox prende un valore, che è possibile utilizzare ai nostri fini:

che è possibile leggere così:


Sub Main

if MsgBox ("Formattazione Hard Disk: continuare? ", 289, "Attenzione") = 1 Then

print "ha detto ok"

else

print "ha detto annulla"

End If

End Sub


Il comando InputBox invece permette di richiedere all'utente di inserire una stringa e di salvarla in una variabile:

Variabile = InputBox ("Prego inserisca il codice: ", "Inserimento codice", "...")


ALTRE FUNZIONI


Beep

crea un suono di errore


Shell

avvia programmi esterni


Wait ...

fa una pausa di ... millisecondi, per esempio

Wait 1000 REM fa una pausa di 1 secondo

può essere utile ad esempio quando si scrive un file sull'hard-disk, e bisogna attendere il tempo materiale di scrittura del file.


Environ

restituisce variabili di sistema.



Ultima modifica: 26/10/07