![](/profiles/wavemetrics/themes/wavemetrics/logo.png)
search for matching text iteratively through a text wave
I have three waves 1. text , 2. date, 3. numeric. I wrote some code but am having trouble with the part where I am trying to iterate through the text wave, point by point and search for target text. Any help is appreciated.
What I am trying to accomplish is:
1. If the PID is the same 2+ times in a row (not unique), but all corresponding (same row) dates are the same, store the most recent date from all rows where PID is the same, while removing duplicate rows
2. If the PID is the same 2+ times in a row (not unique), and all dates are different, check the text wave for a corresponding matching string "arc", then store this date else, store most recent date while removing duplicate rows
3. If the PID is unique (no difference between 2 adjacent row) - keep the corresponding date
The idea is two have only unique PIDs, each with a date (real date wave) that matched the criteria 1-3
function filt() wave pid variable i = 0 wave test_date wave/t test_type string temp wave real_date ///create wave to keep the latest date Make /O/N = (numpnts(pid)) real_date do if(pid[i+1] == pid[i]) if(test_date[i+1] == test_date[i]) real_date[i] = test_date[i+1] i+=1 elseif(test_date[i+1] != test_date[i]) if(GrepString(temp,"(?i)arc")) real_date[i] = test_date[i+1] //matches src i+=1 else real_date[i] = test_date[i] i+=1 endif endif else real_date[i] = test_date[i+1] i+=1 //does not match endif while(i<(numpnts(pid))) end
Upload example waves for this, and I'll take a look.
As I read it, task 1 and 2 reduce to the same thing.
Your loop is pretty untidy, with lots of redundant i= i+1 statments, and a bad loop termination, since when i = numpnts(pid)-1, test_date[i+1] will be beyond the bounds of the wave (presuming the waves all have the same length).
February 7, 2023 at 07:54 pm - Permalink
Thank you Jim - I have uploaded a table containing the three waves.
February 8, 2023 at 06:25 am - Permalink
I don't understand the search task, but you can do simple indexing using wave assignments rather than loops, e.g.
maybe this helps along the way...
February 8, 2023 at 07:58 am - Permalink
i think your logic translates to this:
February 8, 2023 at 08:41 am - Permalink