Monatsarchiv für September 2008

Da zumindest Visual Basic 6 keine Funktion zum Auslesen von einzelnen Zeilen eines Textfeldes (Textbox) hat, muss man solch eine Funktion selbst realisieren.

'Funktion zum Auslesen einzelner Zeilen
'Aufruf: z.B. strNeu = SelectLine(txtText1, 2)
'Die Nummerierung beginnt bei 1 (oberste Zeile -> 1). Ist die
'gewünschte Zeile nicht vorhanden, so wird ein leerer String
'zurückgegeben.

Function SelectLine(txt As Control, line As Long) As String
    Dim a As String
    Dim i As Long
    Dim linecnt As Long
 
    linecnt = 1
    a = ""
    For i = 1 To Len(txt.text)
        If InStr(Mid(txt.text, i, 2), vbCrLf) Then
            linecnt = linecnt + 1
            i = i + 2
        End If
        If linecnt > line Then
            Exit For
        End If
        If linecnt = line Then
            a = a + Mid(txt.text, i, 1)
        End If
    Next
 
    SelectLine = a
End Function
wewa

Single in Float umwandeln

Wer schon ein wenig mit Visualbasic zu tun hatte, dem ist sicher bekannt, dass VB zwar C ähnlich ist aber ansonsten nicht viel mit C gemeinsam hat.
Und so schert sich VB auch nichts um Internationale Standards wie z.B. den 32-Bit Float Standard (siehe Wiki.

Darum war ich gezwungen, mir eine Funktion zu schreiben, welche die Umrechnung vom VB-Format Single in das Float-Format übernimmt.

Static Function SingleToFloat(X)
    Dim e As Integer
    Dim float As Long
    Dim m As Long
 
    If X <> 0 Then
        e = Math.Round(Log2(Abs(X)) - 0.5)
        m = (Abs(X) / (2 ^ e) - 1) * 2 ^ 23
        e = e + 127
        float = m
        float = float Or (e * &H800000)
        If X < 0 Then
            float = float Or &H80000000
        End If
    Else
        float = 0
    End If
 
    SingleToFloat = float
End Function
 
Static Function Log2(X)
   Log2 = Log(X) / Log(2#)
End Function

Und die Umkehrung dazu:

Static Function FloatToSingle(X)
    Dim e As Integer
    Dim m As Long
    Dim singl As Single
    Dim vz As Boolean
 
        If X And &H80000000 Then
            vz = 1
        Else
            vz = 0
        End If
 
        m = X And &H7FFFFF
        e = (X And &H7F800000) / &H800000
 
        FloatToSingle = (-1) ^ vz * (1 + m / (2 ^ 23)) * 2 ^ (e - 127)
End Function
wewa

Codearchiv

Da ich ziemlich viel mit Programmierung, vor allem in C, zu tun habe, habe ich nun beschlossen ein kleines Codearchiv anzulegen. So tue auch ich mir leichter, Funktionen die ich immer wieder benötige zu finden.

Hier geht’s zum Codearchiv.