Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoAzzolino Mancini Modificato 11 anni fa
1
Lez. 8 (11/12) - PBElementi di Programmazione1 Lezione 8 Date Valutazione di espressioni File di testo sequenziali
2
Lez. 8 (11/12) - PBElementi di Programmazione2 Tipo Date (1) 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 lora –Possono essere dei valori letterali compresi fra # che somigliano ad una data #15 Apr 2009# #12/5/2007#
3
Lez. 8 (11/12) - PBElementi di Programmazione3 Tipo Date (2) 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: DateSerial(aaaa,mm,gg) DateValue(stringaConData) –Restituire orari: TimeSerial(hh,mm,ss) TimeValue(stringaConOrario)
4
Lez. 8 (11/12) - PBElementi di Programmazione4 Tipo Date (3) DatePart(interval, data, primoGset,primaSanno) Restituisce una parte delle informazioni contenute in data interval indica quale parte interessa (valore fra ): –yyyy Anno q Trimestre m Mese –y Giorno dellanno d Giorno –w Giorno della settimana ww Settimana –h Ora n Minuti s Secondi primoGset indica quale è il primo giorno della settimana –vbUseSystem impostazione API vbSunday Do (predefinita) – vbMonday Lu vbTuesday Ma vbWednesday Me – vbThursday Gi vbFriday Ve vbSaturday Sa primaSanno indica da quando si iniziano a contare le settimane di un anno –vbUseSystem impostazione API – vbFirstJan1 settimana 1 gennaio (predefinita) –vbFirstFourDays prima settimana di almeno quattro giorni –vbFirstFullWeek Inizia con la prima settimana completa dell'anno.
5
Lez. 8 (11/12) - PBElementi di Programmazione5 Esercizio Le celle da A1 a F1 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
6
Lez. 8 (11/12) - PBElementi di Programmazione6 Esercizio Sub giornoSettimana() Dim gS(7) As String Dim el As Variant, i As Integer, g As Integer gS(1) = "lunedì" gS(2) = "martedì" gS(3) = "mercoledì" gS(4) = "giovedì" gS(5) = "venerdì" gS(6) = "sabato" gS(7) = "domenica" i = 1 For Each el In Range("A1:F1") If IsDate(el.Value) Then g = DatePart("w", el.Value, vbMonday) Cells(2, i).Value = gS(g) End If i = i + 1 Next End Sub
7
Lez. 8 (11/12) - PBElementi di Programmazione7 Tipo Date (4) Alle date si possono aggiungere dei giorni con loperatore + Più corretto è usare le funzioni –DateAdd(interval, periodi, data) Somma il numero periodi a data aumentando del valore di interval specificato –DateDiff(interval, data1, data2,primoGset,primaSanno) Restituisce i periodi trascorsi fra due date specificate
8
Lez. 8 (11/12) - PBElementi di Programmazione8 Valutazione di espressioni
9
Lez. 8 (11/12) - PBElementi di Programmazione9 Valutare Espressioni –Se una stringa contiene una formula sintatticamente corretta per Excel con una variabile si può valutare la formula per diversi valori della variabile creando una tabella Si deve usare la proprietà Formula di una cella insieme alla funzione Replace –Nella formula i numeri debbono avere come separatore il punto decimale –La variabile da sostituire è meglio che non sia un carattere o una sequenza di caratteri che può essere contenuta in funzioni di libreria »Preferire ad esempio _x ad x ( x è contenuto anche in funzioni come Exp() )
10
Lez. 8 (11/12) - PBElementi di Programmazione10 Valutazione di una Espressione –Supponiamo che la cella A2 contenga una formula con una incognita _x (es: _x*2+C2 ) La cella B2 il primo valore per _x (es: 1) La cella C2 lultimo valore per _x (es: 100) La cella D2 il passo (es: 5) –Il codice nella pagina che segue permette di tabulare tutti i valori della formula
11
Lez. 8 (11/12) - PBElementi di Programmazione11 Valutazione di una Espressione Sub Tabula() Dim x As Double, y As Double, iniX As Double Dim finX As Double, passo As Double Dim formula As String, i As Integer formula = Cells(2, 1).Value formula = Replace(formula, ",", ".") iniX = Cells(2, 2).Value finX = Cells(2, 3).Value passo = Cells(2, 4).Value i = 0 For x = iniX To finX Step passo Cells(4 + i, 2).Value = x Cells(4 + i, 3).formula = "=" & _ Replace(formula, "_x", _ CStr(Replace(x, ",", "."))) Cells(4 + i, 3).NumberFormat = ".##" i = i + 1 Next End Sub
12
Lez. 8 (11/12) - PBElementi di Programmazione12 Lettura e scrittura file
13
Lez. 8 (11/12) - PBElementi di Programmazione13 Lettura e scrittura file VB presenta diverse possibilità di accesso ai file ma si illustrerà solo quella per la gestione dei file di testo sequenziali Si ricorda che è possibile esportare o importare in Excel file separati da virgola (Comma Separated Values) direttamente
14
Lez. 8 (11/12) - PBElementi di Programmazione14 Lettura e scrittura file sequenziali (1) Questo genere di file sono utili come meccanismo di deposito e scambio di dati Le fasi in cui si suddividono le operazioni sono: –Apertura ( Open ) –Lettura ( Input ) o scrittura ( Write ) –Chiusura ( Close )
15
Lez. 8 (11/12) - PBElementi di Programmazione15 Lettura e scrittura file sequenziali (2) Apertura file Open percorso For modalità As #nfile percorso indica il percorso compreso il nome del file da aprire –Per ottenere il percorso della directory dove si trova il foglio di lavoro usare: »ThisWorkbook.Path modalità indica come si accederà al file: –Input, Output, Append nfile numero fra 1 e 511 che identificherà il file aperto
16
Lez. 8 (11/12) - PBElementi di Programmazione16 Lettura e scrittura file sequenziali (3) PERCORSO Attenzione : –Per ottenere il percorso della directory dove si trova il foglio di lavoro usare: »ThisWorkbook.Path Ma questo valore non è utilizzabile fino a che non si salva il file Excel almeno la prima volta !!!
17
Lez. 8 (11/12) - PBElementi di Programmazione17 Lettura e scrittura file sequenziali (4) Chiusura file close #nfile SEMPRE CHIUDERE I FILE !!! Se un file non viene chiuso non lo si può riaprire, bisogno prima richiuderlo –È possibile chiudere un file prima di aprirlo …..
18
Lez. 8 (11/12) - PBElementi di Programmazione18 Lettura e scrittura file sequenziali (5) Scrittura Write #nfile, elencoDati Nfile : numero del file da aprire elencoDati : elenco dei dati da scrivere separato da virgola –I dati decimali sono sempre scritti separando col punto la parte decimale –Per i tipi Boolean viene scritto #True# o #False# –Per i tipi Date si usa il formato #aaaa-mm-gg# –Se omesso scrive il carattere di a capo Scrive elencoDati e poi va a capo
19
Lez. 8 (11/12) - PBElementi di Programmazione19 Lettura e scrittura file sequenziali (6) Sub usoFileScritt() Dim i As Integer, j As Integer Open ThisWorkbook.Path & "\p.txt" For Output As #1 For i = 1 To 6 Write #1, Cells(i, 1), " ", Cells(i, 2) Next Close #1 End Sub
20
Lez. 8 (11/12) - PBElementi di Programmazione20 Lettura e scrittura file sequenziali (7) Sub usoFileScritt() Dim i As Integer, j As Integer Close #1 per non restare bloccati se file già aperto Open ThisWorkbook.Path & "\p.txt" For Output As #1 For i = 1 To 6 Write #1, Cells(i, 1), " ", Cells(i, 2) Next Close #1 End Sub
21
Lez. 8 (11/12) - PBElementi di Programmazione21 Esempio Scrivere il codice che dato il foglio di lavoro corrente che contiene dalla posizione A1 alla posizione D2 dei numeri interi scrive sul file pari.txt i valori pari, sul file dispari.txt i valori dispari Attenzione x Mod 2 restituisce -1 se X è un numero dispari negativo (fare il test su 0)
22
Lez. 8 (11/12) - PBElementi di Programmazione22 Esempio Option Explicit Sub usaFile() Dim Y As Variant deve essere per forza variant Open ThisWorkbook.Path & "\pari.txt" For Output As #1 Open ThisWorkbook.Path & "\dispari.txt" For Output As #2 For Each Y In Range("A1:D2") If Y Mod 2 = 0 Then Write #1, CInt(Y) Else Write #2, CInt(Y) End If Next Close #1 Close #2 End Sub
23
Lez. 8 (11/12) - PBElementi di Programmazione23 Lettura file sequenziali (1) Lettura Input #nfile, elencovariabili nfile : numero identificativo del file elencovariabili : elenco delle variabili in cui scrivere i valori (usare solo variabili) Per verificare la fine del file si usa la funzione EOF(nfile) –True se fine file, False altrimenti
24
Lez. 8 (11/12) - PBElementi di Programmazione24 Lettura file sequenziali (2) Sub usoFileLett() Dim i As Integer, j, k, h Open ThisWorkbook.Path & "\p.txt" For Input As #1 i = 0 Do While Not EOF(1) Input #1, k, j, h Cells(i + 10, 10) = k Cells(i + 10, 11) = h i = i + 1 Loop Close #1 End Sub
25
Lez. 8 (11/12) - PBElementi di Programmazione25 Esempio Scrivere il programma che legge i valori dal file dati.txt, li scrive nel foglio corrente a partire dalla colonna A e quindi su ciascuno applica la formula contenuta nella cella C1 (dove la variabile si chiama _x) e scrive nella colonna B il valore ottenuto sostituendo nella formula in C1 il valore in A
26
Lez. 8 (11/12) - PBElementi di Programmazione26 Esempio Option Explicit Sub leggiTabula() Dim val As Double, i As Integer Dim fml As String, fmlS As String fml = Range("C1").Value Open ThisWorkbook.Path & "\dati.txt" For Input As #1 i = 1 While Not EOF(1) Input #1, val Cells(i, 1) = val fmlS = Replace(fml, "_x", Replace(CStr(val), ",", ".")) Cells(i, 2).Formula = "=" & fmlS i = i + 1 Wend Close #1 End Sub
27
Esercizi di ripasso Di seguito alcuni esercizi per ripassare i concetti principali visti nelle lezioni precedenti e fondamentali per la risoluzione di un tipico tema desame Lez. 8 (11/12) - PBElementi di Programmazione27
28
Lez. 8 (11/12) - PBElementi di Programmazione28 Esercizio 1 Date le seguenti dichiarazioni Dim a As Integer Dim b As Boolean Ed i seguenti valori iniziali a=4 b=true Indicare il valore delle seguenti espressioni a = b + 7 b = a - 6
29
Lez. 8 (11/12) - PBElementi di Programmazione29 Esercizio 1 Date le seguenti dichiarazioni Dim a As Integer Dim b As Boolean Ed i seguenti valori iniziali a=4 b=true Indicare il valore delle seguenti espressioni a = b + 7 b = a - 6 a b 4 true (-1) 6 true (-1) a=b+7 7 false (0) b=a-6
30
Lez. 8 (11/12) - PBElementi di Programmazione30 Esempio di risoluzione Option Explicit Sub esercizio() Dim a As Integer Dim b As Boolean a = 4 b = True a = b + 7 b = a - 6 Cells(2, 2) = a Cells(2, 3) = b End Sub
31
Lez. 8 (11/12) - PBElementi di Programmazione31 Esercizio 2 Data la seguente dichiarazione Dim vt(3) As Double Dim i As Integer indicare il contenuto di vt dopo aver eseguito il seguente codice For i = UBound(vt) To LBound(vt) Step -1 vt(i) = UBound(vt) - i * 3 Next
32
Lez. 8 (11/12) - PBElementi di Programmazione32 Risultato 2 Option Explicit Sub leggiTabula() Dim vt(3) As Double Dim i As Integer For i = UBound(vt) To LBound(vt) Step -1 vt(i) = UBound(vt) - i * 3 Next For i = LBound(vt) To UBound(vt) cells(2,i+1) = vt(i) Next End Sub 0 LBound 123 UBound vt -6-303
33
Lez. 8 (11/12) - PBElementi di Programmazione33 Review Esercizio 2 Data la seguente dichiarazione Dim vt(3) As Double Dim i As Integer indicare il contenuto di vt dopo aver eseguito il seguente codice For i = UBound(vt) To LBound(vt) Step -1 vt(i) = UBound(vt) - i * 3 Next 0 LBound 123 UBound vt -6-303
34
Lez. 8 (11/12) - PBElementi di Programmazione34 Note sullesercizio precedente Nel ciclo dellesercizio precedente è fondamentale lo step -1, dato che iniziamo da Ubound ed usciamo confrontando con Lbound. Lo step negativo impone che il confronto di uscita sia per i > Lbound Se facciamo senza lo step -1 For i = UBound(vt) To LBound(vt) vt(i) = UBound(vt) - i * 3 Next NON ENTRA NEL CICLO!
35
Lez. 8 (11/12) - PBElementi di Programmazione35 Esercizio 3 – Stack di Chiamate Option Explicit Function fz(ByRef x As Integer, _ ByVal y As Integer) As Double Dim a As Integer a = 0 x = y * 2 + a y = y * 3 fz = a + 2 End Function Sub ric() Dim x As Integer, y As Integer Dim z As Integer x = 0 y = 0 z = 1 While (z < 4) x = fz(y, 5 + x) z = z + 2 Wend End Sub
36
Lez. 8 (11/12) - PBElementi di Programmazione36 Esercizio 3 – Stack di Chiamate Option Explicit Function fz(ByRef x As Integer, _ ByVal y As Integer) As Double Dim a As Integer x = y * 2 + a y = y * 3 fz = a + 2 End Function Sub ric() Dim x As Integer, y As Integer Dim z As Integer z = 1 While (z < 4) x = fz(y, 5 + x) z = z + 2 Wend End Sub
37
Lez. 8 (11/12) - PBElementi di Programmazione37 Esercizio 3 – Stack di Chiamate Option Explicit Function fz(ByRef x As Integer, _ ByVal y As Integer) As Double Dim a As Integer x = y * 2 + a y = y * 3 fz = a + 2 End Function Sub ric() Dim x As Integer, y As Integer Dim z As Integer z = 1 While (z < 4) x = fz(y, 5 + x) z = z + 2 Wend End Sub ric x y z 0 0 0 0 0 1 fz() 0 0 1 x y a fz 0 0 1 ^y ric 5 0 0 0 10 1 ^y ric 5 0 0 0 10 1 ^y ric 15 0 0 0 10 1 ^y ric 15 0 2 2 10 1 2 10 3 2 10 3 ^y ric 7 0 0 2 14 3 ^y ric 7 0 0 2 14 3 ^y ric 21 0 0 2 14 3 ^y ric 21 0 2 2 14 3 2 14 5
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.