QB64.com

QB64 is a modern extended BASIC programming language that retains QBasic/QuickBASIC 4.5 compatibility and compiles native binaries for Windows, Linux, and macOS.

The MID$ function returns a portion of a STRING.

Syntax

portion$ = MID$(stringValue$, startPosition%[, bytes%])

Parameter(s)

Description

QBasic

Example(s)

Getting the hour and minutes from TIME$


PRINT TIME$

hour$ = LEFT$(TIME$, 2)
minutes$ = MID$(TIME$, 4, 2) ' skip hours and the colon (first 3 characters)

PRINT "hour = "; hour$; ": minutes = "; minutes$ 


11:23:30
hour = 11: minutes = 23

Comparing MID$, the QB64 byte position version of ASC and _MEMGET speeds parsing string characters:


_TITLE "String Speed Test"
DEFLNG A-Z

'First let's build a string for testing.
Limit = 100000 'the size of the string
LoopCount = 1000 'the number of times we want to deconstruct it

FOR i = 1 TO Limit
  t$ = t$ + CHR$(RND * 255)
NEXT

'now for some times

t1# = TIMER
FOR j = 1 TO LoopCount
  FOR i = 1 TO Limit
    m$ = MID$(t$, i, 1)
  NEXT
NEXT
t2# = TIMER
FOR j = 1 TO LoopCount
  FOR i = 1 TO Limit
    m = ASC(t$, i)
  NEXT
NEXT

t3# = TIMER
$CHECKING:OFF
DIM m AS _MEM, m1 AS STRING * 1, m2 AS _UNSIGNED _BYTE
m = _MEMNEW(Limit) 'create new memory space for string
_MEMPUT m, m.OFFSET, t$ 'put string t$ into memory space
FOR j = 1 TO LoopCount
  FOR i = 1 TO Limit
    _MEMGET m, m.OFFSET + i - 1, m1
  NEXT
NEXT
t4# = TIMER
FOR j = 1 TO LoopCount
  FOR i = 1 TO Limit
    _MEMGET m, m.OFFSET + i - 1, m2
  NEXT
NEXT
t5# = TIMER

'results

PRINT USING "##.###### seconds for MID$"; t2# - t1#
PRINT USING "##.###### seconds for ASC"; t3# - t2#
PRINT USING "##.###### seconds for _MEMGET String"; t4# - t3#
PRINT USING "##.###### seconds for _MEMGET Byte"; t5# - t4# 


6.593750 seconds for MID$
1.044922 seconds for ASC
0.494141 seconds for _MEMGET String
0.494141 seconds for _MEMGET Byte

Note: _MEMGET can be used with $CHECKING:OFF to cut the parsing speed even more. STRING * 1 or _BYTE are similar speeds.

See Also