Article View: be.comp.programming
Article #14970Re: Visual Basic punt of komma probleem
From: AquatiK
Date: Tue, 05 Dec 2000 00:00
Date: Tue, 05 Dec 2000 00:00
128 lines
4167 bytes
4167 bytes
xiniks wrote:
> Als je met gegevens uit standaard VB tekstvensters wilt rekenen
> moet het gegevens met een punt zijn en niet met een komma.
In principe moeten je 'localisatie' instellingen dit oplossen maar daar
zitten naar mijn ervaring ettelijke bugs in (Val), tenminste in Visual
Basic. Daarom heb ik zelf teneinde raad de functie maar herschreven. Wat
we zelf doen, doen we beter, nietwaar? ;-). (Public Function
TextToSingle)
Tevens diezelfde functie voor Integers (Public Function TextToInteger).
En de TrimTabSpaces die ik al vroeger eens gepost heb.
Veel plezier ermee en geen auteursrechten er op. Gratis code en vrije
liefde voor iedereen ;-).
mvg, Hugo Maes
-------------
Public Function TextToSingle(T As String, S As Single) As Boolean
' Return True = bad number.
Dim Tx As String, MinusFlag As Boolean, DecPointFlag As Boolean
Dim I As Integer, A As String, N As Integer, Sd As Single
'
Tx = TrimTabSpaces(T)
S = 0#
Sd = 1#
If Left(Tx, 1) = "-" Then
Tx = Right(Tx, Len(Tx) - 1)
MinusFlag = True
Else
If Left(Tx, 1) = "+" Then Tx = Right(Tx, Len(Tx) - 1)
MinusFlag = False
End If
DecPointFlag = False
If Len(Tx) > 0 Then
For I = 1 To Len(Tx)
A = Mid(Tx, I, 1)
Select Case A
Case ".", ","
If DecPointFlag Then GoTo BadNumber
DecPointFlag = True
Case "0" To "9"
On Error GoTo BadNumber
N = Asc(A) - Asc("0")
If DecPointFlag Then
Sd = Sd / 10#
S = S + N * Sd
Else
S = S * 10# + N
End If
Case Else
BadNumber:
TextToSingle = True
Exit Function
End Select
Next I
End If
If MinusFlag Then S = -S
TextToSingle = False
End Function
Public Function TextToInteger(T As String, S As Integer) As Boolean
' Return True = bad number.
Dim Tx As String, MinusFlag As Boolean
Dim I As Integer, A As String, N As Integer
'
Tx = TrimTabSpaces(T)
S = 0
If Left(Tx, 1) = "-" Then
Tx = Right(Tx, Len(Tx) - 1)
MinusFlag = True
Else
If Left(Tx, 1) = "+" Then Tx = Right(Tx, Len(Tx) - 1)
MinusFlag = False
End If
If Len(Tx) > 0 Then
For I = 1 To Len(Tx)
A = Mid(Tx, I, 1)
Select Case A
Case "0" To "9"
On Error GoTo BadNumber
N = Asc(A) - Asc("0")
S = S * 10 + N
Case Else
BadNumber:
TextToInteger = True
Exit Function
End Select
Next I
End If
If MinusFlag Then S = -S
TextToInteger = False
End Function
Public Function LTrimTabSpaces(S As String) As String
Dim I As Long, L As Long, C As String
L = Len(S)
If L > 0 Then
For I = 1 To L
C = Mid(S, I, 1)
If (C <> " ") And (C <> Chr(9)) Then
LTrimTabSpaces = Right(S, L - I + 1)
Exit Function
End If
Next I
End If
LTrimTabSpaces = ""
End Function
Public Function RTrimTabSpaces(S As String) As String
Dim I As Long, L As Long, C As String
L = Len(S)
If L > 0 Then
For I = L To 1 Step -1
C = Mid(S, I, 1)
If (C <> " ") And (C <> Chr(9)) Then
RTrimTabSpaces = Left(S, I)
Exit Function
End If
Next I
End If
RTrimTabSpaces = ""
End Function
Public Function TrimTabSpaces(S As String) As String
TrimTabSpaces = RTrimTabSpaces(LTrimTabSpaces(S))
End Function
Technical Details
Message-ID:
<3A2D60AA.C9D9F062@chello.be>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<3A263543.2339A67@iname.com>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,a9c1610d90687a44 X-Google-Attributes: gidfcea4,public From: AquatiK <Hugo.Maes@chello.be> Subject: Re: Visual Basic punt of komma probleem Date: 2000/12/05 Message-ID: <3A2D60AA.C9D9F062@chello.be> X-Deja-AN: 701514043 Content-Transfer-Encoding: 7bit References: <3A263543.2339A67@iname.com> X-Accept-Language: en Content-Type: text/plain; charset=us-ascii X-Complaints-To: abuse@chello.be X-Trace: news.chello.be 976052215 195.162.213.139 (Tue, 05 Dec 2000 22:36:55 MET) Organization: Chello Usenet Service MIME-Version: 1.0 NNTP-Posting-Date: Tue, 05 Dec 2000 22:36:55 MET Newsgroups: be.comp.programming