1 / 27

Lezione 8

Lezione 8. Date Valutazione di espressioni File di testo sequenziali. 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

vlad
Télécharger la présentation

Lezione 8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lezione 8 Date Valutazione di espressioni File di testo sequenziali Elementi di Programmazione

  2. 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# Elementi di Programmazione

  3. 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: • DateSerial(aaaa,mm,gg) • DateValue(stringaConData) • Restituire orari: • TimeSerial(hh,mm,ss) • TimeValue(stringaConOrario) Elementi di Programmazione

  4. Tipo Date 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 dell’anno 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) • vbMondayLu vbTuesdayMa vbWednesdayMe • vbThursdayGi vbFridayVe vbSaturdaySa • primaSanno indica da quando si iniziano a contare le settimane di un anno • vbUseSystem impostazione API • vbFirstJan1 settimana 1 gennaio (predefinita) • vbFirstFourDaysprima settimana di almeno quattro giorni • vbFirstFullWeekInizia con la prima settimana completa dell'anno. Elementi di Programmazione

  5. 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 Elementi di Programmazione

  6. 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 Elementi di Programmazione

  7. Tipo Date • Alle date si possono aggiungere dei giorni con l’operatore + • 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 Elementi di Programmazione

  8. Valutazione di espressioni Elementi di Programmazione

  9. 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()) Elementi di Programmazione

  10. 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 l’ultimo 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 Elementi di Programmazione

  11. 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 Elementi di Programmazione

  12. Lettura e scrittura file Elementi di Programmazione

  13. 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 Elementi di Programmazione

  14. Lettura e scrittura file sequenziali • 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) Elementi di Programmazione

  15. Lettura e scrittura file sequenziali Apertura file OpenpercorsoFormodalità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 Elementi di Programmazione

  16. Lettura e scrittura file sequenziali 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 Elementi di Programmazione

  17. Lettura e scrittura file sequenziali 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 Elementi di Programmazione

  18. 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) Elementi di Programmazione

  19. 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 Elementi di Programmazione

  20. Lettura e scrittura file sequenziali 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 Elementi di Programmazione

  21. Lettura e scrittura file sequenziali 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 Elementi di Programmazione

  22. 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 Elementi di Programmazione

  23. 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 Elementi di Programmazione

  24. 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 6 false (0) b=a-6 Esercizi Elementi di Programmazione

  25. Esercizi • 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 vt 3 0 -3 -6 0 LBound 1 2 3 UBound Elementi di Programmazione

  26. Esercizi • 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) vt(i) = UBound(vt) - i * 3 Next NON ENTRA NEL CICLO! Elementi di Programmazione

  27. 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 ^yric 5 0 0 0 10 1 ^yric 5 0 0 0 10 1 ^yric 15 0 0 0 10 1 ^yric 15 0 2 2 10 1 2 10 3 2 10 3 ^yric 7 0 0 2 14 3 ^yric 7 0 0 2 14 3 ^yric 21 0 0 2 14 3 ^yric 21 0 2 2 0 3 2 0 5 Esercizi Elementi di Programmazione

More Related