stringdm-script

How to use a for loop to judge whether the string contains any word in the list?


I'd like to know whether a string contains the word from a list. For example, I have 3 strings, 120kV_xxxx, 200kV_abc, abcdefg. I'd like to choose the string started with voltage, and exclude the last one. Now my code is as below. But in python, I can give a list like ["80kV", "120kV", "200kV"], and then use a for loop to judge whether the string contains any word in the list. Is there any similar method in dm-script?

Number find_voltage_prefix(String input)
{
Number sum = -1
sum *= input.find("80kV")
sum *= input.find("120kV")
sum *= input.find("200kV")

if (sum==0) return 1
else return 0
}

Result(find_voltage_prefix("120kV_xxxx"))

Solution

  • Your solution seems fine to me and there is - to my knowledge at least - no internal command that would do the same. You might want to make your routine a bit more flexible by placing the "search for" strings in a TagGroup (TagList) and iterate over it in your search (breaking on first match).

    f.e.

    number StringContains( string input, tagGroup searchList ){
        for (number i=0;i<searchlist.TagGroupCountTags();i++){
            string search
            if ( !searchList.TagGroupGetIndexedTagAsString(i,search) ) continue
            if  (-1 != input.find(search)) return i
        }
        return -1
    }
    
    
    TagGroup searchTerms = NewTagList()
    searchTerms.TagGroupInsertTagAsString(Infinity(),"80kV")
    searchTerms.TagGroupInsertTagAsString(Infinity(),"100kV")
    searchTerms.TagGroupInsertTagAsString(Infinity(),"120kV")
    string test = "I'm at 80kV"
    
    
    Result("\n The string '"+test+"'...")
    number foundTermIndex = test.StringContains(searchTerms) 
    if ( -1 < foundTermIndex ){
        string foundTerm
        searchTerms.TagGroupGetIndexedTagAsString(foundTermIndex,foundTerm)
        Result("... does not contain the search terms '" + foundTerm + "'.")
    }
    else
        Result("... does not contain any of the search terms.")