/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Omregning fra hh:mm:ss til sekunder
Fra : Henrik Jensen


Dato : 06-06-01 00:30

Hej NG

Nedenstående kode giver mig lidt problemer:
Jeg har en mask box hvor man kan indtaste en tid i formatet h:mm:ss,
som så bliver omregnet til sekunder.

Men hvis man ikke taster alle tal ind, men kun eks.: 1:45:
og altså ingen sekunder, så går det galt!

Faktisk går det galt uanset om det er timer, minutter eller sekunder
der ikke bliver indtastet.

Kan nogen hjælpe?
Eller er der en smarter måde at omregne på?

-----------------------------
Private Sub maskHHmmss_LostFocus()

LengthTmp = maskHHmmss.Text

Timer = Mid(LengthTmp, 1, 1)
Minutter = Mid(LengthTmp, 2, 2)
Sekunder = Mid(LengthTmp, 4, 2)

If Timer > 9 Or Minutter > 59 Or Sekunder > 59 Then
If Timer > 9 Then
Timer = 9
End If
If Minutter > 59 Then
Minutter = 59
End If
If Sekunder > 59 Then
Sekunder = 59
End If
maskHHmmss.Text = Right(Str(Timer), 1) + Right(Str(Minutter), 2) +
Right(Str(Sekunder), 2)
End If

Tid = Val(Timer) * 3600 + Val(Minutter) * 60 + Val(Sekunder)
txtSec.Text = Tid

End Sub
-------------------------------------

--
Venlig Hilsen/Best Regards

Henrik



 
 
Lars Kim Lund (06-06-2001)
Kommentar
Fra : Lars Kim Lund


Dato : 06-06-01 01:05

Hej "Henrik Jensen" <henrik-jensen@big_NO_SPAM_foot.com>

>Kan nogen hjælpe?
>Eller er der en smarter måde at omregne på?
>
>-----------------------------
>Private Sub maskHHmmss_LostFocus()
>
>LengthTmp = maskHHmmss.Text
>
> Timer = Mid(LengthTmp, 1, 1)
> Minutter = Mid(LengthTmp, 2, 2)
> Sekunder = Mid(LengthTmp, 4, 2)

Dit problem er her. Du forudsætter at det rigtige står på nogle faste
positioner, det fungerer kun hvis du i dialog-boksen også tvinger folk
til at indtaste korrekt.

Jeg er for dårlig til VB til at give dig et eksempel (fatter egentlig
ikke hvad jeg laver i denne gruppe), men prøv følgende algoritme:

1. Split streng i tre, f.eks. TimeSplit = split(MyTime,":",-1,1)

2. Check antallet af elementer i array

3. Tildel h,m,s baseret på antallet af elementer og beslut dig for
hvordan du vil håndtere implicitte værdier. Ønsker du f.eks. at
1:20 skal opfattes som 1 minut og 20 sekunder eller 1 time og 20
min.?

HTH,

--
Lars Kim Lund
http://www.net-faq.dk/

Niels G (06-06-2001)
Kommentar
Fra : Niels G


Dato : 06-06-01 09:25

Det kunne også løses ved at rette tre linje:

Timer = "0" & Mid$(LengthTmp, 1, 1)
Minutter = "0" & Mid$(LengthTmp, 2, 2)
Sekunder = "0" & Mid$(LengthTmp, 4, 2)

Mvh
Niels G.

"Henrik Jensen" <henrik-jensen@big_NO_SPAM_foot.com> wrote in message
news:ZXdT6.403$Uz1.16299@news.get2net.dk...
> Hej NG
>
> Nedenstående kode giver mig lidt problemer:
> Jeg har en mask box hvor man kan indtaste en tid i formatet h:mm:ss,
> som så bliver omregnet til sekunder.
>
> Men hvis man ikke taster alle tal ind, men kun eks.: 1:45:
> og altså ingen sekunder, så går det galt!
>
> Faktisk går det galt uanset om det er timer, minutter eller sekunder
> der ikke bliver indtastet.
>
> Kan nogen hjælpe?
> Eller er der en smarter måde at omregne på?
>
> -----------------------------
> Private Sub maskHHmmss_LostFocus()
>
> LengthTmp = maskHHmmss.Text
>
> Timer = Mid(LengthTmp, 1, 1)
> Minutter = Mid(LengthTmp, 2, 2)
> Sekunder = Mid(LengthTmp, 4, 2)
>
> If Timer > 9 Or Minutter > 59 Or Sekunder > 59 Then
> If Timer > 9 Then
> Timer = 9
> End If
> If Minutter > 59 Then
> Minutter = 59
> End If
> If Sekunder > 59 Then
> Sekunder = 59
> End If
> maskHHmmss.Text = Right(Str(Timer), 1) + Right(Str(Minutter), 2) +
> Right(Str(Sekunder), 2)
> End If
>
> Tid = Val(Timer) * 3600 + Val(Minutter) * 60 + Val(Sekunder)
> txtSec.Text = Tid
>
> End Sub
> -------------------------------------
>
> --
> Venlig Hilsen/Best Regards
>
> Henrik
>
>



Bjarke Walling Peter~ (06-06-2001)
Kommentar
Fra : Bjarke Walling Peter~


Dato : 06-06-01 13:36

Henrik Jensen skrev:
> Hej NG
>
> Nedenstående kode giver mig lidt problemer:
> Jeg har en mask box hvor man kan indtaste en tid i formatet h:mm:ss,
> som så bliver omregnet til sekunder.
>
> Men hvis man ikke taster alle tal ind, men kun eks.: 1:45:
> og altså ingen sekunder, så går det galt!
>
> Faktisk går det galt uanset om det er timer, minutter eller sekunder
> der ikke bliver indtastet.
>
> Kan nogen hjælpe?
> Eller er der en smarter måde at omregne på?
>
> -----------------------------
> Private Sub maskHHmmss_LostFocus()
>
> LengthTmp = maskHHmmss.Text

Det kunne også løses på denne måde (med lidt "snyd"):

LengthTmp = maskHHmmss.Text & "00000"

.... så er du sikker på at strengen er lang nok - og det som bruger ikke
indtaster bliver bare nogle nuller.
Desuden tager det du har skrevet ikke højde for at brugeren taster koloner:

Timer = Mid(LengthTmp, 1, 1)
Minutter = Mid(LengthTmp, 2, 2)
Sekunder = Mid(LengthTmp, 4, 2)

.... hvis nu strengen LengthTmp indeholder "5:28:12", så giver det du har
skrevet følgende output:

Timer = "5"
Minutter = ":2"
Sekunder = "8:"

Men du kan jo også løse det med Split-funktionen som Lars skrev.
Foresten så ville det være godt at skrive følgende : (f.eks.)

If maskHHmmss.Text = "" Then
Msgbox "Du skal indtaste en tid!", vbOKOnly, "Fejl"
maskHHmmss.SetFocus
Exit Sub
End If

.... men man bestemmer jo selv hvor brugervenligt det skal være!

- Bjarke Walling Petersen



Tomas Christiansen (07-06-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 07-06-01 00:50

Henrik Jensen skrev:
> Jeg har en mask box hvor man kan indtaste en tid i formatet h:mm:ss,
> som så bliver omregnet til sekunder.
> Faktisk går det galt uanset om det er timer, minutter eller sekunder
> der ikke bliver indtastet.

Hvordan ser din maske ud?
Jeg har prøvet med masken "#:##:##", og fået det til at virke ganske
strålende (se nedenfor).

> LengthTmp = maskHHmmss.Text
>
> Timer = Mid(LengthTmp, 1, 1)
> Minutter = Mid(LengthTmp, 2, 2)
> Sekunder = Mid(LengthTmp, 4, 2)

Hvis du i stedet bruger følgende:

Timer = NormaliserTal(LengthTmp, 1, 1)
Minutter = NormaliserTal(LengthTmp, 3, 2)
Sekunder = NormaliserTal(LengthTmp, 6, 2)

og indsætter funktionen:

Function NormaliserTal(ByVal sTalStreng As String, _
ByVal lStartPos As Long, ByVal lLængde As Long) As Long
Dim sWrk As String
sWrk = Replace(Mid(sTalStreng, lStartPos, lLængde), "_", "")
If Len(sWrk) > 0 Then
NormaliserTal = CLng(sWrk)
Else
NormaliserTal = 0
End If
End Function

så virker det helt fint hos mig.

Bemærk at jeg benytter mig af PromptInclude=True på MaskEdBox'en - ellers
ved jeg jo ikke hvor der er tastet noget, og hvor der ikke er.
Bemærk desuden at Replace funktionen først findes fra VB 6.0.

-------
Tomas



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste