Non ci si faccia spaventare dal nome, sono semplicemente delle funzioni di base del Basic in OOo.
La conversione di una variabile da un tipo ad un altro tipo può essere fatta in due maniere:
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

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.
Ci sono diverse funzioni che riguardano le stringhe:
CODICI UNICODE:
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
Chr() invece, al contrario, permette di scegliere un carattere inserendo il codice UNICODE.
ACCESSO A PARTI DI UNA STRINGA:
Left (stringa, lunghezza) restituisce la parte sinistra della stringa per la lunghezza indicata;
Right (stringa, lunghezza) restituisce la parte destra della stringa per la lunghezza indicata;
Len (stringa) restituisce la lunghezza della stringa;
Mid (stringa, inizio, lunghezza) restituisce la parte della stringa a partire da inizio per la lunghezza indicata.
RICERCA E SOSTITUZIONE NELLE STRINGHE
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.
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

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 €)
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()
Per la gestione di file e directory ci sono vari comandi:
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.
MkDir ("/home/io/Desktop/dir3") REM per creare nuove directory, comprese eventuali sottodirectory
RmDir ("C:\dir1\dir2") REM per l'eliminazione di directory, compreso tutto quello che contengono (attenzione: il programma non richiede ulteriori conferme)
FileCopy ("origine", "destinazione") REM per la copia di file
Name vecchionome As nuovonome REM per rinominare un file di nome vecchionome con il nome nuovonome
Kill ("nomeDelFile") REM elimina il file
FileExists("nomeDelFile") REM controlla se il file esiste e prende il valore di Vero/Falso
GetAttr("nomeDelFile") REM rileva gli attributi del file e prende il valore di 0 per file normale, 1 per sola lettura, 16 per directory
SetAttr("nomeDelFile") REM assegna gli attributi al file, con 0 lo rende un file normale, con 1 lo rende in sola lettura
FileDateTime("nomeDelFile") REM restituisce la data e l'ora di sistema dell'ultima modifica del file
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
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:
0 è il pulsante OK
1 sono i pulsanti OK e Annulla
2 sono i pulsanti Annulla e Riprova
3 sono i pulsanti Sì, No e Annulla
4 sono i pulsanti Sì e No
5 sono i pulsanti Riprova e Annulla
Inoltre, si può scegliere quale è il pulsante predefinito per la scelta, sommando al valore precedente il seguente:
0 il pulsante predefinito è il primo
256 il pulsante predefinito è il secondo
512 il pulsante predefinito è il terzo
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:
16 Stop
32 Punto interrogativo
48 Punto esclamativo
64 Suggerimento
MsgBox "Formattazione Hard Disk: continuare? ", 289
dà

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:
1 è il valore risultante se è stato premuto il tasto OK
2 come sopra per il tasto Annulla
4 come sopra per il tasto Riprova
5 come sopra per il tasto Ignora
6 come sopra per il tasto Sì
7 come sopra per il tasto No
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", "...")
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: