Lezione 7 Matrici di Celle Tipi String e

  • Slides: 32
Download presentation
Lezione 7 Matrici di Celle Tipi String e Date Lez. 7 (10/11) - PB

Lezione 7 Matrici di Celle Tipi String e Date Lez. 7 (10/11) - PB Elementi di Programmazione 1

Riferirsi ad intervalli di celle • Per le routine può essere necessario riferirsi a

Riferirsi ad intervalli di celle • Per le routine può essere necessario riferirsi a blocchi di celle di un foglio di lavoro – Per avere una interazione corretta basta ricordare: • Un intervallo di celle è SEMPRE una matrice bidimensionale • Una singola cella non è una matrice – Il predicato Is. Array(variabile) restituisce True se la variabile è una matrice • Il parametro che indica l’intervallo va passato come Variant e va poi assegnato ad una variabile locale di tipo Variant Lez. 7 (10/11) - PB Elementi di Programmazione 2

Riferirsi ad intervalli di celle Function interv(inte As Variant) As Double Dim X As

Riferirsi ad intervalli di celle Function interv(inte As Variant) As Double Dim X As Variant, i As Integer, j As Integer X = interv = 0 If Is. Array(X) Then For i = LBound(X) To UBound(X) For j = LBound(X, 2) To UBound(X, 2) If Is. Numeric(X(i, j)) Then interv = interv + X(i, j) End If Next: Next Else interv = X End If End Function Sub total() Range("A 10"). Value = interv(Range("a 1: d 5")) Range("A 12"). Value = interv(Cells(10, 1)) Range("A 14"). Value = interv(432) End Sub Lez. 7 (10/11) - PB Elementi di Programmazione 3

Tipo String • Una stringa è un insieme ordinato di caratteri • In VB

Tipo String • Una stringa è un insieme ordinato di caratteri • In VB esistono – Stringhe di lunghezza fissa che possono contenere fino a 216 caratteri • Si dichiarano con Dim nome As String * N – N indica la lunghezza massima della stringa, oltre questa dimensione la stringa è troncata – Non possono essere assegnate a variabili di tipo Variant – Stringhe di lunghezza variabile • Si dichiarano con Dim nome As String Lez. 7 (10/11) - PB Elementi di Programmazione 4

Tipo String Sub uso. String() Dim st. Fix As String * 5 Dim st.

Tipo String Sub uso. String() Dim st. Fix As String * 5 Dim st. Var As String st. Fix = "ciao" st. Var = "ciao" Msg. Box (st. Fix) Msg. Box (st. Var) End Sub Lez. 7 (10/11) - PB Elementi di Programmazione 5

Tipo String • Per manipolare le stringhe esistono diverse funzioni: – – – Confrontare

Tipo String • Per manipolare le stringhe esistono diverse funzioni: – – – Confrontare (Str. Comp) Convertire (Str. Conv, Format, LCase, UCase) Creare stringhe di caratteri ripetuti (Space, String) Trovare la lunghezza di una stringa (Len) Allineare una stringa (LSet, RSet) Manipolare Stringhe (In. Str, Left, Mid, Right, Replace, LTrim, RTrim, Trim) – Manipolare i valori ASCII e ANSI (Asc, Chr) Lez. 7 (10/11) - PB Elementi di Programmazione 6

Tipo String Str. Comp (str 1, str 2, modo) – Confronta str 1 con

Tipo String Str. Comp (str 1, str 2, modo) – Confronta str 1 con str 2 come specificato da modo • modo (facoltativo) può valere – vb. Use. Compare. Option confronta secondo l'impostazione di Option Compare. » Option Compare valore definita a livello di modulo valore può essere Binary (default) o Text – vb. Binary. Compare confronto binario. – vb. Text. Compare confronto di testo. – Restituisce -1 str 1 < str 2 0 str 1 = str 2 1 str 1 > str 2 Null se una delle due stringhe è Null Lez. 7 (10/11) - PB Elementi di Programmazione 7

Tipo String Str. Comp (str 1, str 2, modo) – Considerazioni particolari: • Nella

Tipo String Str. Comp (str 1, str 2, modo) – Considerazioni particolari: • Nella modalità vb. Text. Compare non si distingue fra maiuscolo e minuscolo. • I caratteri accentati sono considerati diversi da quelli non accentati ed hanno una posizione diversa a seconda del tipo di accento! Lez. 7 (10/11) - PB Elementi di Programmazione 8

Str. Comp Scrivere una subroutine che richiede all’utente due stringhe e le compara prima

Str. Comp Scrivere una subroutine che richiede all’utente due stringhe e le compara prima in modo “default” (binario) e poi “text”, visualizzando in un message. Box se il risultato è lo stesso Lez. 7 (10/11) - PB Elementi di Programmazione 9

Str. Comp Sub uso. String() Dim st. A As String Dim st. B As

Str. Comp Sub uso. String() Dim st. A As String Dim st. B As String Dim res. D As Integer Dim res. T As Integer st. A = Input. Box("Prima stringa : ") st. B = Input. Box("Seconda stringa : ") res. D = Str. Comp(st. A, st. B) Msg. Box ("Str. Comp [" & st. A & "] [" & st. B & "] = " & res. D) res. T = Str. Comp(st. A, st. B, vb. Text. Compare) Msg. Box ("Str. Comp Test [" & st. A & "] [" & st. B & "] = " & res. T) If (res. D = res. T) Then Msg. Box ("I due modi sono equivalenti") Else Msg. Box ("I due modi NON sono equivalenti") End If End Sub Lez. 7 (10/11) - PB Elementi di Programmazione 10

Tipo String Str. Conv(stringa, conversione) • Converte stringa secondo le impostazioni specificate in conversione

Tipo String Str. Conv(stringa, conversione) • Converte stringa secondo le impostazioni specificate in conversione (le opzioni di conversione possono essere sommate per ottenere più effetti) • conversione può valere: vb. Upper. Case converte i caratteri in maiuscolo » Equivale all’uso di UCase(stringa) vb. Lower. Case converte i caratteri in minuscolo » Equivale all’uso di LCase(stringa) vb. Proper. Case converte in maiuscolo il primo carattere di ogni parola Lez. 7 (10/11) - PB Elementi di Programmazione 11

Tipo String – Alcune funzioni permettono di scrivere stringhe con caratteri ripetuti: • Space(numero):

Tipo String – Alcune funzioni permettono di scrivere stringhe con caratteri ripetuti: • Space(numero): restituisce una stringa con numero spazi • String(numero, carattere): restituisce una stringa con carattere ripetuto numero volte – Carattere può essere una costante o un numero che rappresenta la posizione del carattere nella tabella ASCII – Per conoscere la lunghezza di una stringa in caratteri si usa • Len(stringa) – Len(nome. Variabile) in generale restituisce il numero di byte con cui è rappresentata la variabile Lez. 7 (10/11) - PB Elementi di Programmazione 12

Tipo String In. Str(inizio, str 1, str 2, modo) • Cerca in str 1

Tipo String In. Str(inizio, str 1, str 2, modo) • Cerca in str 1 le occorrenze di str 2 a partire dalla posizione inizio (se non specificato inizia dal primo carattere) di str 1 confrontando in base al valore di modo (facoltativo) – vb. Use. Compare. Option / vb. Binary. Compare / vb. Text. Compare • Restituisce 0 se non è trovata corrispondenza >0 inizio della corrispondenza Null se str 1 o str 2 valgono Null Lez. 7 (10/11) - PB Elementi di Programmazione 13

Esercizio • Data una stringa X verificare quante volte compare in essa la stringa

Esercizio • Data una stringa X verificare quante volte compare in essa la stringa Y • X |rosa bella rosetta bellina| • Y |ros| Lez. 7 (10/11) - PB Elementi di Programmazione 14

Esercizio Function conta. Volte(s 1 As String, s 2 As String) _ As Integer

Esercizio Function conta. Volte(s 1 As String, s 2 As String) _ As Integer Dim pos As Integer, l. S 2 As Integer l. S 2 = Len(s 2) pos = 1 conta. Volte = 0 While (In. Str(pos, s 1, s 2) <> 0) conta. Volte = conta. Volte + 1 pos = In. Str(pos, s 1, s 2) pos = pos + l. S 2 Wend End Function Lez. 7 (10/11) - PB Elementi di Programmazione 15

Esercizio • Data una stringa X verificare quante volte compare in essa la stringa

Esercizio • Data una stringa X verificare quante volte compare in essa la stringa Y • X |rosa bella rosetta bellina| • Y |ros| Instr(1, X, Y) => In. Str(4, X, Y) => In. Str(15, X, Y) => Lez. 7 (10/11) - PB pos 1 12 0 conta. Volte 1 -> pos = 4 2 -> pos = 15 2 -> exit Elementi di Programmazione 16

Left, Right, Mid – Le seguenti funzioni restituiscono porzioni della stringa argomento • Left(stringa,

Left, Right, Mid – Le seguenti funzioni restituiscono porzioni della stringa argomento • Left(stringa, N) – Restituisce i primi N Caratteri di stringa • Right(stringa, N) – Restituisce gli ultimi N caratteri di stringa • Mid(stringa, partenza, N) – Restituisce i primi N caratteri di stringa a partire dalla posizione partenza; se N è omesso restituisce la stringa a partire dalla posizione partenza Lez. 7 (10/11) - PB Elementi di Programmazione 17

Like Operatore Like risultato = stringa Like criterio stringa è confrontata con criterio Il

Like Operatore Like risultato = stringa Like criterio stringa è confrontata con criterio Il valore in risultato è: – True se vi è corrispondenza con criterio – False se non vi è corrispondenza con criterio – Null se stringa o criterio valgono Null. • Il confronto è fatto sulla base del valore di Option Compare – Binary (default) » fatto in base alla posizione del carattere nell’alfabeto in uso – Text » Fatto in base al valore alfabetico dei caratteri (maiuscolo e minuscolo indifferente, ma i caratteri accentati seguono quelli non accentati) Lez. 7 (10/11) - PB Elementi di Programmazione 18

Like criterio può contenere dei metacaratteri: ? Un carattere qualsiasi * Zero o più

Like criterio può contenere dei metacaratteri: ? Un carattere qualsiasi * Zero o più caratteri qualsiasi # una singola cifra [elenco. Car] qualsiasi carattere in elenco. Car [!elenco. Car] qualsiasi carattere non in elenco. Car – elenco. Car contiene un elenco di caratteri fra cui (non) trovare corrispondenza. Può contenere » Intervalli di caratteri consecutivi (il primo e l’ultimo elemento della sequenza son separati dal segno -) » Il carattere – deve essere il primo o l’ultimo dell’elenco se non utilizzato in un intervallo (per evitare confusioni) » Il carattere ! Se non è in prima posizione mantiene il suo significato » Il metacaratteri [ ? * # debbono essere racchiusi fra parentesi quadre la parentesi quadra chiusa ] NON può essere usata in un elenco di caratteri Lez. 7 (10/11) - PB Elementi di Programmazione 19

Esempio Sub prova() Dim s 1 As String, s 2 As String, dove As

Esempio Sub prova() Dim s 1 As String, s 2 As String, dove As Integer 'criterio tre caratteri qualunque ma non a b c (minuscoli) s 1 = "*AK" Range("C 1") = s 1 Like "[!a-c][!a-c]" 'criterio: tutte le stringhe che iniaziano con ca s 1 = "cosa di montagna" Range("C 2") = s 1 Like "ca*" 'criterio: tutte le stringhe che iniziano con ca quindi ' hanno un carattere qls e quindi una a s 1 = "casa" Range("C 2") = s 1 Like "ca? a*" End Sub Lez. 7 (10/11) - PB Elementi di Programmazione 20

Esempio Sub prova() Dim s 1 As String s 1 = Range("A 1") Range("C

Esempio Sub prova() Dim s 1 As String s 1 = Range("A 1") Range("C 1") = s 1 Like Range("B 1") End Sub Lez. 7 (10/11) - PB Elementi di Programmazione 21

Replace – La funzione Replace() permette di sostituire parti di una stringa con un’altra

Replace – La funzione Replace() permette di sostituire parti di una stringa con un’altra restituisce la stringa con le sostituzioni Replace(expr, trova, sost, da, tot, modo) expr trova sost da tot modo indica dove cercare indica cosa cercare indica con cosa sostituire posizione da cui partire (se omessa 1) quante sostituzione fare (se omessa -1 tutte) tipo di confronto vb. Use. Compare. Option vb. Binary. Compare vb. Text. Compare Lez. 7 (10/11) - PB usa valore di Option confronto binario confronto testuale Elementi di Programmazione 22

Esempio Sub rimpiazza() Range("D 3") = Replace("rosa gialla", _ "os", "ciliegia", 1, 2) End

Esempio Sub rimpiazza() Range("D 3") = Replace("rosa gialla", _ "os", "ciliegia", 1, 2) End Sub rosa gialla diventa rciliegiasa rosa gialla Lez. 7 (10/11) - PB Elementi di Programmazione 23

Trim – Le seguenti funzioni eliminano spazi • LTrim(stringa) – Elimina gli spazi iniziali

Trim – Le seguenti funzioni eliminano spazi • LTrim(stringa) – Elimina gli spazi iniziali di stringa • RTrim(stringa) – Elimina gli spazi finali di stringa • Trim(stringa) – Elimina gli spazi iniziali e finali di stringa Lez. 7 (10/11) - PB Elementi di Programmazione 24

Asc & Chr – La funzione • Asc(stringa) restituisce il codice del primo carattere

Asc & Chr – La funzione • Asc(stringa) restituisce il codice del primo carattere di stringa (valore intero) • Chr(intero) restituisce la stringa che contiene il carattere corrispondente al valore di intero Lez. 7 (10/11) - PB Elementi di Programmazione 25

Esempio Option Compare Binary Function my. Str. Comp(s 1 As String, _ s 2

Esempio Option Compare Binary Function my. Str. Comp(s 1 As String, _ s 2 As String) As Integer Dim i As Integer, lun As Integer If Len(s 1) > Len(s 2) Then lun = Len(s 2) Else lun = Len(s 1) End If Sub prova() Dim s 1 As String, s 2 As String i = 1 While i <= lun If Asc(Mid(s 1, i, i)) <> _ Asc(Mid(s 2, i, i)) Then If (Asc(Mid(s 1, i, i)) < _ Asc(Mid(s 2, i, i))) Then my. Str. Comp = -1 Else my. Str. Comp = 1 End If i = lun + 2 End If i = i + 1 Wend Lez. 7 (10/11) - PB If (i = lun + 1) Then 'le due stringhe sono diverse my. Str. Comp = 0 End If End Function s 1 = "Rosa" s 2 = "Cosa" Range("A 1") = Str. Comp(s 1, s 2) Range("A 2") = my. Str. Comp(s 1, s 2) End Sub Elementi di Programmazione 26

Tipo Date • Serve per gestire le date che vengono memorizzate come numeri decimali

Tipo Date • Serve per gestire le date che vengono memorizzate come numeri decimali di 8 byte – Le date fra • • 01/01/100 e 30/12/1899 sono numeri negativi 31/12/1899 e 31/12/9999 sono numeri positivi 0 rappresenta il giorno 0. 0. 0000 Se si usano i numeri decimali la parte decimale rappresenta l’ora – Possono essere dei valori letterali compresi fra # che somigliano ad una data • #15 Apr 2009# #12/5/2007# Lez. 7 (10/11) - PB Elementi di Programmazione 27

Tipo Date • Le principali funzioni di manipolazione: – Dai valori orologio di sistema:

Tipo Date • Le principali funzioni di manipolazione: – Dai valori orologio di sistema: • Date(): restituisce gg/mm/aaaa • Time(): restituisce hh: mm: ss • Now(): gg/mm/aaa hh: mm: ss – Restituire date: • Date. Serial(aaaa, mm, gg) • Date. Value(stringa. Con. Data) – Restituire orari: • Time. Serial(hh, mm, ss) • Time. Value(stringa. Con. Orario) Lez. 7 (10/11) - PB Elementi di Programmazione 28

Tipo Date. Part(interval, data, primo. Gset, prima. Sanno) • Restituisce una parte delle informazioni

Tipo Date. Part(interval, data, primo. Gset, prima. Sanno) • Restituisce una parte delle informazioni contenute in data • interval indica quale parte interessa (valore fra “): – – yyyy Anno q Trimestre y Giorno dell’anno d Giorno w Giorno della settimana ww Settimana h Ora n Minuti m s Mese Secondi • primo. Gset indica quale è il primo giorno della settimana – vb. Use. System – vb. Monday Lu – vb. Thursday Gi impostazione API vb. Tuesday Ma vb. Friday Ve vb. Sunday Do (predefinita) vb. Wednesday Me vb. Saturday Sa • prima. Sanno indica da quando si iniziano a contare le settimane di un anno – – vb. Use. System impostazione API vb. First. Jan 1 settimana 1 gennaio (predefinita) vb. First. Four. Days prima settimana di almeno quattro giorni vb. First. Full. Week Inizia con la prima settimana completa dell'anno. Lez. 7 (10/11) - PB Elementi di Programmazione 29

Esercizio • Le celle da A 1 a F 1 contengono delle date. Scrive

Esercizio • Le celle da A 1 a F 1 contengono delle date. Scrive il codice necessario per – Verificare se la cella contiene effettivamente una data – Scrivere nella riga sottostante il giorno della settimana o nulla se non ha la forma di una data Lez. 7 (10/11) - PB Elementi di Programmazione 30

Esercizio Sub giorno. Settimana() Dim g. S(7) As String Dim el As Variant, i

Esercizio Sub giorno. Settimana() Dim g. S(7) As String Dim el As Variant, i As Integer, g As Integer g. S(1) g. S(2) g. S(3) g. S(4) g. S(5) g. S(6) g. S(7) = = = = "lunedì" "martedì" "mercoledì" "giovedì" "venerdì" "sabato" "domenica" i = 1 For Each el In Range("A 1: F 1") If Is. Date(el. Value) Then g = Date. Part("w", el. Value, vb. Monday) Cells(2, i). Value = g. S(g) End If i = i + 1 Next End Sub Lez. 7 (10/11) - PB Elementi di Programmazione 31

Tipo Date • Alle date si possono aggiungere dei giorni con l’operatore + •

Tipo Date • Alle date si possono aggiungere dei giorni con l’operatore + • Più corretto è usare le funzioni – Date. Add(interval, periodi, data) • Somma il numero periodi a data aumentando del valore di interval specificato – Date. Diff(interval, data 1, data 2, primo. Gset, prima. Sanno) • Restituisce i periodi trascorsi fra due date specificate Lez. 7 (10/11) - PB Elementi di Programmazione 32