VB6Parse / Library / String / left

VB6 Library Reference

Left Function

Returns a String containing a specified number of characters from the left side of a string.

Syntax

Left(string, length)

Parameters

Return Value

Returns a String (or Variant containing String): - Contains the specified number of characters from the left side of the string - Returns empty string if length is 0 - Returns entire string if length >= Len(string) - Returns Null if string argument is Null - Always returns String type (Left$ variant returns String, not Variant)

Remarks

The Left function extracts characters from the beginning of a string:

Typical Uses

  1. Extract Prefix: Get first N characters of string
  2. Parse Codes: Extract code prefixes from identifiers
  3. Truncate Text: Limit string length for display
  4. File Extensions: Extract drive letter or path prefix
  5. Validation: Check string starts with specific pattern
  6. Data Parsing: Extract fixed-width field data
  7. Formatting: Create abbreviations or short forms
  8. Pattern Matching: Compare string prefixes

Basic Usage Examples

' Example 1: Basic left extraction
Dim text As String
text = "Hello World"

Debug.Print Left(text, 5)            ' "Hello"
Debug.Print Left(text, 3)            ' "Hel"
Debug.Print Left(text, 1)            ' "H"

' Example 2: Length exceeds string length
Debug.Print Left("ABC", 10)          ' "ABC" - entire string
Debug.Print Left("Test", 4)          ' "Test" - exact length

' Example 3: Zero length
Debug.Print Left("Hello", 0)         ' "" - empty string

' Example 4: Extract file extension check
Dim fileName As String
fileName = "C:\Data\file.txt"

If Left(fileName, 3) = "C:\" Then
Debug.Print "File on C: drive"
End If

Common Patterns

' Pattern 1: Extract first N characters
Function GetPrefix(text As String, length As Long) As String
If length <= 0 Then
GetPrefix = ""
Else
GetPrefix = Left(text, length)
End If
End Function

' Pattern 2: Truncate with ellipsis
Function Truncate(text As String, maxLength As Long) As String
If Len(text) <= maxLength Then
Truncate = text
Else
Truncate = Left(text, maxLength - 3) & "..."
End If
End Function

' Pattern 3: Check if string starts with prefix
Function StartsWith(text As String, prefix As String) As Boolean
StartsWith = (Left(text, Len(prefix)) = prefix)
End Function

' Pattern 4: Extract first word
Function GetFirstWord(text As String) As String
Dim spacePos As Long

spacePos = InStr(text, " ")
If spacePos > 0 Then
GetFirstWord = Left(text, spacePos - 1)
Else
GetFirstWord = text
End If
End Function

' Pattern 5: Extract initials
Function GetInitials(fullName As String) As String
Dim parts() As String
Dim i As Long
Dim initials As String

parts = Split(Trim(fullName), " ")
initials = ""

For i = LBound(parts) To UBound(parts)
If Len(parts(i)) > 0 Then
initials = initials & UCase(Left(parts(i), 1))
End If
Next i

GetInitials = initials
End Function

' Pattern 6: Safe Left with Null check
Function SafeLeft(value As Variant, length As Long) As String
If IsNull(value) Then
SafeLeft = ""
Else
SafeLeft = Left(value, length)
End If
End Function

' Pattern 7: Extract drive letter
Function GetDriveLetter(path As String) As String
If Len(path) >= 2 And Mid(path, 2, 1) = ":" Then
GetDriveLetter = Left(path, 2)
Else
GetDriveLetter = ""
End If
End Function

' Pattern 8: Pad left to fixed width
Function PadLeft(text As String, width As Long, Optional padChar As String = " ") As String
If Len(text) >= width Then
PadLeft = Left(text, width)
Else
PadLeft = String(width - Len(text), padChar) & text
End If
End Function

' Pattern 9: Extract area code from phone
Function GetAreaCode(phone As String) As String
Dim digitsOnly As String
Dim i As Long
Dim char As String

' Extract digits only
digitsOnly = ""
For i = 1 To Len(phone)
char = Mid(phone, i, 1)
If char >= "0" And char <= "9" Then
digitsOnly = digitsOnly & char
End If
Next i

' Get first 3 digits as area code
If Len(digitsOnly) >= 3 Then
GetAreaCode = Left(digitsOnly, 3)
Else
GetAreaCode = ""
End If
End Function

' Pattern 10: Create abbreviation
Function Abbreviate(text As String, maxLength As Long) As String
If Len(text) <= maxLength Then
Abbreviate = text
Else
' Take first letter of each word
Dim words() As String
Dim i As Long
Dim abbr As String

words = Split(text, " ")
abbr = ""

For i = LBound(words) To UBound(words)
If Len(words(i)) > 0 Then
abbr = abbr & UCase(Left(words(i), 1))
If Len(abbr) >= maxLength Then Exit For
End If
Next i

Abbreviate = abbr
End If
End Function

Advanced Usage Examples

' Example 1: Fixed-width file parser
Public Class FixedWidthParser
Private m_fieldLengths() As Long

Public Sub SetFieldLengths(ParamArray lengths() As Variant)
Dim i As Long
ReDim m_fieldLengths(LBound(lengths) To UBound(lengths))
For i = LBound(lengths) To UBound(lengths)
m_fieldLengths(i) = CLng(lengths(i))
Next i
End Sub

Public Function ParseLine(line As String) As Variant
Dim fields() As String
Dim i As Long
Dim pos As Long

ReDim fields(LBound(m_fieldLengths) To UBound(m_fieldLengths))
pos = 1

For i = LBound(m_fieldLengths) To UBound(m_fieldLengths)
If pos <= Len(line) Then
fields(i) = Trim(Mid(line, pos, m_fieldLengths(i)))
Else
fields(i) = ""
End If
pos = pos + m_fieldLengths(i)
Next i

ParseLine = fields
End Function

Public Function GetField(line As String, fieldIndex As Long) As String
Dim pos As Long
Dim i As Long

pos = 1
For i = LBound(m_fieldLengths) To fieldIndex - 1
pos = pos + m_fieldLengths(i)
Next i

If pos <= Len(line) Then
GetField = Trim(Mid(line, pos, m_fieldLengths(fieldIndex)))
Else
GetField = ""
End If
End Function
End Class

' Example 2: Text preview/truncation utility
Public Class TextPreview
Public Function CreatePreview(text As String, maxLength As Long, _
Optional ellipsis As String = "...") As String
If Len(text) <= maxLength Then
CreatePreview = text
Exit Function
End If

' Try to break at word boundary
Dim truncated As String
Dim lastSpace As Long

truncated = Left(text, maxLength - Len(ellipsis))
lastSpace = InStrRev(truncated, " ")

If lastSpace > maxLength \ 2 Then
' Break at word if space found in second half
CreatePreview = Left(truncated, lastSpace - 1) & ellipsis
Else
' Break at character
CreatePreview = truncated & ellipsis
End If
End Function

Public Function WordWrap(text As String, lineWidth As Long) As String
Dim result As String
Dim remaining As String
Dim line As String
Dim spacePos As Long

result = ""
remaining = text

Do While Len(remaining) > lineWidth
' Try to break at word
line = Left(remaining, lineWidth)
spacePos = InStrRev(line, " ")

If spacePos > 0 Then
result = result & Left(line, spacePos - 1) & vbCrLf
remaining = Mid(remaining, spacePos + 1)
Else
result = result & line & vbCrLf
remaining = Mid(remaining, lineWidth + 1)
End If
Loop

result = result & remaining
WordWrap = result
End Function
End Class

' Example 3: Code prefix analyzer
Public Class CodeAnalyzer
Private m_prefixes As Collection

Private Sub Class_Initialize()
Set m_prefixes = New Collection
End Sub

Public Sub RegisterPrefix(prefix As String, description As String)
m_prefixes.Add Array(prefix, description), prefix
End Sub

Public Function GetCodeType(code As String) As String
Dim i As Long
Dim prefix As Variant
Dim info As Variant

For i = 1 To m_prefixes.Count
info = m_prefixes(i)
prefix = info(0)

If Left(code, Len(prefix)) = prefix Then
GetCodeType = info(1)
Exit Function
End If
Next i

GetCodeType = "Unknown"
End Function

Public Function ExtractPrefix(code As String, prefixLength As Long) As String
ExtractPrefix = Left(code, prefixLength)
End Function

Public Function StripPrefix(code As String, prefixLength As Long) As String
If Len(code) > prefixLength Then
StripPrefix = Mid(code, prefixLength + 1)
Else
StripPrefix = ""
End If
End Function
End Class

' Example 4: String comparison helper
Public Class StringComparer
Public Function StartsWith(text As String, prefix As String, _
Optional ignoreCase As Boolean = False) As Boolean
Dim textPrefix As String
Dim comparePrefix As String

If Len(prefix) = 0 Then
StartsWith = True
Exit Function
End If

If Len(text) < Len(prefix) Then
StartsWith = False
Exit Function
End If

textPrefix = Left(text, Len(prefix))

If ignoreCase Then
StartsWith = (LCase(textPrefix) = LCase(prefix))
Else
StartsWith = (textPrefix = prefix)
End If
End Function

Public Function GetCommonPrefix(str1 As String, str2 As String) As String
Dim i As Long
Dim minLen As Long

minLen = IIf(Len(str1) < Len(str2), Len(str1), Len(str2))

For i = 1 To minLen
If Left(str1, i) <> Left(str2, i) Then
If i = 1 Then
GetCommonPrefix = ""
Else
GetCommonPrefix = Left(str1, i - 1)
End If
Exit Function
End If
Next i

GetCommonPrefix = Left(str1, minLen)
End Function

Public Function RemovePrefix(text As String, prefix As String, _
Optional ignoreCase As Boolean = False) As String
If StartsWith(text, prefix, ignoreCase) Then
RemovePrefix = Mid(text, Len(prefix) + 1)
Else
RemovePrefix = text
End If
End Function
End Class

Error Handling

Left handles several special cases:

' Empty string
Debug.Print Left("", 5)              ' "" - empty string

' Zero length
Debug.Print Left("Hello", 0)         ' "" - empty string

' Length exceeds string
Debug.Print Left("Hi", 10)           ' "Hi" - entire string

' Null propagates
Dim value As Variant
value = Null
Debug.Print IsNull(Left(value, 3))   ' True

' Negative length causes error
' Debug.Print Left("Test", -1)       ' Error 5: Invalid procedure call

' Safe pattern with error handling
Function SafeLeft(text As Variant, length As Long) As String
On Error Resume Next
If IsNull(text) Then
SafeLeft = ""
ElseIf length < 0 Then
SafeLeft = ""
Else
SafeLeft = Left(text, length)
End If
On Error GoTo 0
End Function

Performance Considerations

Performance tips:

' Efficient for single use
If Left(fileName, 2) = "C:" Then

' Cache if used multiple times
Dim prefix As String
prefix = Left(code, 3)
If prefix = "ABC" Or prefix = "DEF" Then

Best Practices

  1. Validate Length: Ensure length is non-negative
  2. Null Safety: Check for Null before calling Left if needed
  3. StartsWith Pattern: Use Left for prefix checking
  4. Truncation: Consider word boundaries when truncating display text
  5. Use Left$: For String variables, use Left$ for type safety
  6. Combine with Len: Check string length before extracting
  7. Fixed-Width Data: Use Left for fixed-width field extraction
  8. Path Manipulation: Use Left for drive/path prefix extraction
Function Purpose Parameters Use Case
Left Extract from left (string, length) Get prefix/first N chars
Right Extract from right (string, length) Get suffix/last N chars
Mid Extract from middle (string, start, [length]) Get substring from any position
InStr Find substring ([start,] string1, string2) Locate substring position
Len Get string length (string) Measure string
## Left vs Mid
Dim text As String
text = "Hello World"

' Left - simpler for leftmost characters
Debug.Print Left(text, 5)            ' "Hello"

' Mid - equivalent but more verbose
Debug.Print Mid(text, 1, 5)          ' "Hello"

' Use Left for clarity when extracting from start
' Use Mid when start position is not 1

Left, Right, and Mid Together

Dim text As String
text = "ABCDEFGH"

' Left - first 3 characters
Debug.Print Left(text, 3)            ' "ABC"

' Right - last 3 characters
Debug.Print Right(text, 3)           ' "FGH"

' Mid - middle characters
Debug.Print Mid(text, 3, 4)          ' "CDEF"

' Combine for complex extraction
Dim part As String
part = Left(Right(text, 5), 2)       ' "DE"

Platform and Version Notes

Limitations

← Back to String | View all functions