Search (Scan) String Array

Category: Arrays

Date: 03-28-2012

Return to Index


 
'The built-in PowerBASIC Array Scan is capable of searching all or part of
'an array for elements which match search criteria
 
'Syntax (String array):
'ARRAY SCAN array ([index]) [For count] [, FROM start TO end] [, COLLATE {UCASE | cstring}], expression, TO lvar&
 
'iResult& is first elemement, relative to starting point, that meets the search expression
'iResult& is set to 0 if match not found
'relational operators supported:     =, >, <, <>, >=, =>, <=, =<
'By default Array SCAN is case-sensitive. Use Collate UCase below for case-insensitive scan
 
'Primary Code (4 examples):
Array Scan MyArray(), ="Yes", TO iResult&              'starting at 0, search for "Yes"
Array Scan MyArray(2), ="Yes", TO iResult&             'starting at 2, search for "Yes"
Array Scan MyArray(3), For 6, ="Yes", TO iResult&      'starting at 3, search for "Yes" within 6 elements (2-7)
Array Scan MyArray(2), For 6, From 6 to 8, ="Yes", TO iResult&
     'starting at 2, search for "Yes" within 6 elements (2-7)
     'limit search to characters 6-8 in each array element
Array Scan MyArray() ,Collate UCase, ="YES", To iResult&   'treating array as all UCASE, starting at 0, search for "YES"
 
 
'Compilable Example:
#Compiler PBWin 9, PBWin 10
#Compile EXE
#Dim All
#Include "Win32API.inc"
Global hDlg As DWord, MyArray() as String
 
Function PBMain() As Long
   Dim MyArray(8), i as Long
   Array Assign MyArray() = "no", "yes", "YES", "NO", "dog", "cat", "Yes", "no", "cow"
   Dialog New Pixels, 0, "Array Scan Test Code",300,300,270,200, %WS_OverlappedWindow To hDlg
   Control Add Label, hDlg, 100, "Array Values:  " + Join$(MyArray(), " "), 10,10,270,25
   Control Add Button, hDlg, 200, "Start at 0, search for Yes", 10,40,240,25
   Control Add Button, hDlg, 300, "Start at 2, search for Yes", 10,70,240,25
   Control Add Button, hDlg, 400, "Start at 3, search for Yes within 6", 10,100,240,25
   Control Add Button, hDlg, 500, "Start at 2, search for Yes within 6, cols 6-8 only", 10,130,240,25
   Control Add Button, hDlg, 600, "Start at 0, search for YES", 10,160,240,25
   Dialog Show Modal hDlg Call DlgProc
End Function
 
CallBack Function DlgProc() As Long
   Local iResult&
   If CB.Msg = %WM_Command AND CB.Ctlmsg = %BN_Clicked Then
      Select Case CB.Ctl
         Case 200
            Array Scan MyArray(), ="Yes", TO iResult&              'starting at 0, search for "Yes"
            MsgBox "Note: result is relative to start: " + Str$(iResult&)
         Case 300
            Array Scan MyArray(2), ="Yes", TO iResult&             'starting at 2, search for "Yes"
            MsgBox "Note: result is relative to start: " +  Str$(iResult&)
         Case 400
            Array Scan MyArray(3) For 6, ="Yes", TO iResult&       'starting at 3, search for "Yes" within 6 elements (2-7)
            MsgBox "Note: result is relative to start: " +  Str$(iResult&)
         Case 500
            Array Scan MyArray(2)  For 6, From 6 to 8, ="Yes", TO iResult&
            'starting at 2, search for "Yes" within 6 elements (2-7)
            'limit search to characters 6-8 in each array element
            MsgBox "Note: result is relative to start: " +  Str$(iResult&)
         Case 600
            Array Scan MyArray() ,Collate UCase, ="YES", To iResult&   'treating array as all UCASE, starting at 0, search for "YES"
            MsgBox "Note: result is relative to start: " +  Str$(iResult&)
      End Select
   End If
End Function
 
'gbs_00073
'Date: 03-10-2012


created by gbSnippets
http://www.garybeene.com/sw/gbsnippets.htm