MID$: Difference between revisions
Jump to navigation
Jump to search
Code by Steve McNeill
Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link
(Created page with "The MID$ function returns a portion of a string. {{PageSyntax}} : {{Parameter|portion$}} = MID$({{Parameter|stringValue$}}, {{Parameter|startPosition%}}[, {{Parameter|bytes%}}]) {{Parameters}} * {{Parameter|stringValue$}} can be any literal or variable non-empty STRING value. Use LEN to check the length of a string. * {{Parameter|startPosition%}} designates the non-zero position of the first character to be returned by the function. * {{Par...") |
No edit summary |
||
Line 9: | Line 9: | ||
* {{Parameter|stringValue$}} can be any literal or variable non-empty [[STRING]] value. Use [[LEN]] to check the length of a string. | * {{Parameter|stringValue$}} can be any literal or variable non-empty [[STRING]] value. Use [[LEN]] to check the length of a string. | ||
* {{Parameter|startPosition%}} designates the non-zero position of the first character to be returned by the function. | * {{Parameter|startPosition%}} designates the non-zero position of the first character to be returned by the function. | ||
* {{Parameter|bytes%}} (optional) tells the function how many characters to return including the first character at {{Parameter|startPosition%}}. | * {{Parameter|bytes%}} (optional) tells the function how many characters to return including the first character at {{Parameter|startPosition%}}. | ||
Line 25: | Line 25: | ||
{{PageExamples}} | {{PageExamples}} | ||
''Example 1:'' Getting the hour and minutes from [[TIME$]] | ''Example 1:'' Getting the hour and minutes from [[TIME$]] | ||
{{CodeStart}} | {{CodeStart}} | ||
{{Cl|PRINT}} {{Cl|TIME$}} | {{Cl|PRINT}} {{Cl|TIME$}} | ||
Line 31: | Line 31: | ||
minutes$ = {{Cl|MID$}}({{Cl|TIME$}}, 4, 2) ' skip hours and the colon (first 3 characters) | minutes$ = {{Cl|MID$}}({{Cl|TIME$}}, 4, 2) ' skip hours and the colon (first 3 characters) | ||
{{Cl|PRINT}} "hour = "; hour$; ": minutes = "; minutes$ | {{Cl|PRINT}} "hour = "; hour$; ": minutes = "; minutes$ | ||
{{CodeEnd}} | {{CodeEnd}} | ||
{{OutputStart}}11:23:30 | {{OutputStart}}11:23:30 | ||
hour = 11: minutes = 23 | hour = 11: minutes = 23 | ||
Line 39: | Line 39: | ||
''Example 2:'' Comparing MID$, the '''QB64''' byte position version of [[ASC]] and [[_MEMGET]] speeds parsing string characters: | ''Example 2:'' Comparing MID$, the '''QB64''' byte position version of [[ASC]] and [[_MEMGET]] speeds parsing string characters: | ||
{{CodeStart}} | {{CodeStart}} | ||
{{Cl|_TITLE}} "String Speed Test" | {{Cl|_TITLE}} "String Speed Test" | ||
{{Cl|DEFLNG}} A-Z | {{Cl|DEFLNG}} A-Z | ||
Line 89: | Line 89: | ||
{{Cl|PRINT USING}} "##.###### seconds for ASC"; t3# - t2# | {{Cl|PRINT USING}} "##.###### seconds for ASC"; t3# - t2# | ||
{{Cl|PRINT USING}} "##.###### seconds for _MEMGET String"; t4# - t3# | {{Cl|PRINT USING}} "##.###### seconds for _MEMGET String"; t4# - t3# | ||
{{Cl|PRINT USING}} "##.###### seconds for _MEMGET Byte"; t5# - t4# | {{Cl|PRINT USING}} "##.###### seconds for _MEMGET Byte"; t5# - t4# | ||
{{CodeEnd}} {{small|Code by Steve McNeill}} | {{CodeEnd}} {{small|Code by Steve McNeill}} | ||
{{OutputStart}}6.593750 seconds for MID$ | {{OutputStart}}6.593750 seconds for MID$ | ||
Line 102: | Line 102: | ||
* [[MID$ (statement)]], [[ASC]] | * [[MID$ (statement)]], [[ASC]] | ||
* [[LEFT$]], [[RIGHT$]] | * [[LEFT$]], [[RIGHT$]] | ||
* [[LTRIM$]], [[RTRIM$]] | * [[LTRIM$]], [[RTRIM$]] | ||
* [[INSTR]], [[LEN]] | * [[INSTR]], [[LEN]] | ||
* [[_MEMPUT]], [[_MEMGET]] | * [[_MEMPUT]], [[_MEMGET]] | ||
{{PageNavigation}} | {{PageNavigation}} |
Revision as of 02:05, 23 January 2023
The MID$ function returns a portion of a string.
Syntax
- portion$ = MID$(stringValue$, startPosition%[, bytes%])
- stringValue$ can be any literal or variable non-empty STRING value. Use LEN to check the length of a string.
- startPosition% designates the non-zero position of the first character to be returned by the function.
- bytes% (optional) tells the function how many characters to return including the first character at startPosition%.
Description
- When the bytes% value is not passed, the function returns the remainder of the string from the starting character position.
- Number of character bytes% should be within the string's length from the start position, but will only return the string's remainder when exceeded.
- If the bytes% value is 0 or the startPosition% is 0 or greater than the length of the string, an empty string is returned (no error is triggered).
- In QB64, ASC string byte position reads are about 5 times faster than MID$ when parsing strings. See Example 2 below.
QBasic/QuickBASIC
- In QBasic the startPosition% could not be zero (0) or an Illegal function call error would occur.
Examples
Example 1: 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 |
Example 2: 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: