Kirjautuminen

Haku

Tehtävät

Koodit: VB6: Päivämäärien laskennallinen vertailu

Kirjoittaja: neau33

Kirjoitettu: 13.12.2006 – 13.12.2006

Tagit: koodi näytille, vinkki

Eräs tapa tutkia laskennallisesti onko jokin päivämäärä kahden muun annetun päivämäärän väliltä.

Kun ensimmäisen muuttujan arvo on toisen muuttujan arvoa pienempi vähennetään

)

'Määritellään neljä muuttujaa
Dim pvm1Val As Long, pvm2Val As Long, pvm3Val As Long, OnValilta As Boolean

'Määritellään kolme kolmen alkion taulukkoa
ReDim Taulu1(0 To 2) As String, Taulu2(0 To 2) As String, Taulu3(0 To 2) As String

'Erotetaan kolmen esimmäisen tekstiruudun päivämääristä päivät, kuukaudet ja vuodet
'ja sijoitetaan niistä muodostuvat arvot taukukoihin
 Taulu1 = Split(DateValue(Format$(Text1.Text, "dd.mm.yyyy")), ".")
 Taulu2 = Split(DateValue(Format$(Text2.Text, "dd.mm.yyyy")), ".")
 Taulu3 = Split(DateValue(Format$(Text3.Text, "dd.mm.yyyy")), ".")

'Sijoitetaan muuttujiin kustakin taulukosta vuosien arvon kerrottuna 10000:lla,
'kuukausien arvon kerrottuna 100:lla ja päivien arvon muodostama summa
 pvm1Val = (Val(Taulu1(2)) * 10000) + (Val(Taulu1(1)) * 100) + (Val(Taulu1(0)))
 pvm2Val = (Val(Taulu2(2)) * 10000) + (Val(Taulu2(1)) * 100) + (Val(Taulu2(0)))
 pvm3Val = (Val(Taulu3(2)) * 10000) + (Val(Taulu3(1)) * 100) + (Val(Taulu3(0)))

'Ehdollistetaan ensimmäisen (pvm1Val) muuttujan arvo
Select Case pvm1Val

'suhteessa toisen muuttujan (pvm2Val) arvoon.
 Case Is < pvm2Val '*
'* Kun ensimmäisen muuttujan arvo on toisen muuttujan arvoa pienempi vähennetään
'esimmäisen muuttujan arvosta luku 1 ja toisen muuttujan arvoon lisätään luku 1.
 pvm1Val = pvm1Val - 1: pvm2Val = pvm2Val + 1

'Verrataan onko kolmannen muuttujan (pvm3Val) arvo suuermpi, kuin esimmäisen
'muuttujan arvo ja onko kolmannen muuttujan arvo pienempi, kuin toisen muuttujan arvo
'sekä sijoitetaan lausekkeen totuusarvo neljänteen (OnValilta) muuttujaan.
  OnValilta = (pvm3Val > pvm1Val And pvm3Val < pvm2Val)

Case Is > pvm2Val '*
'* Kun toisen muuttujan arvo on ensimmäisen muuttujan arvoa pienempi lisätään
'ensimmäisen muuttuja arvoon luku 1 ja toisen muuttujan arvosta vähennetään luku 1.
  pvm1Val = pvm1Val + 1: pvm2Val = pvm2Val - 1

'Verrataan onko kolmannen muuttujan (pvm3Val) arvo pienempi, kuin esimmäisen
'muuttujan arvo ja onko kolmannen muuttujan arvo suurmpi, kuin toisen muuttujan arvo
'sekä sijoitetaan lausekkeen totuusarvo neljänteen (OnValilta) muuttujaan.
  OnValilta = (pvm3Val < pvm1Val And pvm3Val > pvm2Val)

 Case Is = pvm2Val '*
'* Kun esimmäisen ja toisen muuttujan arvot ovat samat verrataan onko kolmannen
'muuttujan arvo myös sama sekä sijoitetaan lausekkeen totuusarvo neljänteen
'(OnValilta) muuttujaan.
  OnValilta = (pvm3Val = pvm1Val And pvm3Val = pvm2Val)

End Select 'Päätetään ehtorakenne

 Text4.Text = OnValilta 'Sijotetaan muutujan arvo neljänteen tekstiruutuun

 Erase Taulu1, Taulu2, Taulu3 'Tuhotaan taulukot

End Sub

Kommentit

Antti Laaksonen [16.12.2006 20:29:56]

#

Päivämääriä voi myös vertailla näin:

Dim pv1 As Date, pv2 As Date, pv3 As Date
pv1 = "10.12.2006"
pv2 = "16.12.2006"
pv3 = "22.12.2006"
If pv1 <= pv2 And pv2 <= pv3 Then
    MsgBox "Päivämäärä on välillä."
End If
If pv1 < pv2 And pv2 < pv3 Then
    MsgBox "Päivämäärä on aidosti välillä."
End If

Lisää aikojen käsittelystä:
https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=vbpvm
https://www.ohjelmointiputka.net/hak/?kieli­=Visual Basic&alue=Aika

Merri [17.12.2006 16:19:33]

#

Matemaattisesti/teknisesti katseltuna päivämäärät (Date) ovat Double-liukulukuja, joita vain käsitellään hieman eri sääntöjen mukaisesti erikoistilanteissa, kuten muutettaessa niiden sisältö merkkijonoksi.

Suosittelen myös käyttämään DateSerial-funktiota päivämääriä asettaessa, koska pakotetut muunnokset merkkijonosta päivämääräksi eivät välttämättä toimi kaikilla koneilla oletetulla tavalla: Windowsin alueelliset asetukset voivat vaikuttaa mm. päivämäärän ja kuukauden järjestyksen tulkitsemiseen.

A-P [18.12.2006 14:52:36]

#

Antti Laaksosen esityksessä on huomattava, että päivämäärät tallennetaan Date-tyyppiin. Vaikka vertailu näyttää merkkijonovertailulta, niin näin ei kuitenkaan ole. Varomaton päivämäärien vertailu merkkijonojen avulla kostautuu varmasti.

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta