Purpose
Select table rows that match the value of a regular expression

Regular expressions while not intuitive are nonetheless a powerful tool when selecting strings; many useful examples and tutorials for regular expressions can be found on the internet.

Solution
We use the match= and -regex options of the ReadRow  command. To show the effect of the following examples we use a table of cities similar to the example in the previous article:

// create structured variable
CreateStructure V[cityinfo] city latitude longitude country countrycode population

// table variable with all cities from .csv file
CreateTable V[allcities] include=V[cityinfo]

// create structure for city search
CreateStructure V[citysearch] city

We search a specific city "xxx" using the commands

Set V[citysearch.city] "xxx"
ReadRow
V[cityinfo] table=V[allcities] _
       match=
V[citysearch] -regex  _
       returnindex="row"

Let's assume that we have the following city names in our table:

1  Park Grove
2  Spring Hill
3  Spring Lake
4  Spring Lake Park
5  Spring Valley

7  Springboro
8  Springdale
9  Springfield
10 Springhill 12080
11 Hill City
12 Dale

Sample calls and results:

  • Set V[citysearch.city] "Lake"
    ReadRow ...
    Returns row 3, Spring Lake

  • Set V[citysearch.city] "lake"
    ReadRow ...
    Returns row -1, not found

  • Set V[citysearch.city] "lake"
    ReadRow ... -ignorecase
    Returns row 3, Spring Lake

  • Set V[citysearch.city] "hill"
    ReadRow ...
    Returns row 10,  Springhill

  • Set V[citysearch.city] "^Hill"
    ReadRow ...
    Returns  row  11, Hill City (^ means: start of string)

  • Set V[citysearch.city] "o$"
    ReadRow ...
    Returns  row  7, Springboro ($ means: end of string)

  • Set V[citysearch.city] "DALE"
    ReadRow ... -ignorecase
    Returns  row  8, Springdale

  • Set V[citysearch.city] "^DALE"
    ReadRow ... -ignorecase
    Returns row  12, Dale

  • Set V[citysearch.city] "^$"
    ReadRow ...
    Returns row  6 (empty string)


    Same as
    Set V[citysearch.city] ""
    ReadRow ...
  • Set V[citysearch.city] "city|valley"
    ReadRow ...
    Returns row  5, Spring valley (| means OR)


  • Set V[citysearch.city] "[0-9]"
    ReadRow ...
    Returns row  10, Springhill 12080 ([0-9] means: contains at least one digit)

 

Components
InputAssistant