Extract elements from recreation string of a control
patg
//=========================================================================================================
// recExtract
// -----------
// 'recExtract' is a service function for extracting simple keyword pairs from the
// S_Recreation string returned by 'controlInfo'. This saves extracting using 'execute'
// directly where the S_Recreation string may overflow the command line buffer of 'execute'.
// It is not able to extract multiline elements such as 'userdata[(name)]' but this has its
// own Igor function (getUserdata).
//
// ARGUMENTS:
// - win: window of the calling control
// - ctrl: name of the calling control
// - iStr: keyword to be extracted.
// - trim: if present, the character[s] in 'trim' will be removed from the beginning
// and end of the result string, if they are present. Useful for trimming
// the " character when assigning to a string variable. If there are two
// characters, e.g. "{}", the first will be trimmed from the start of the
// string and the second from the end. Further characters are ignored.
// - [listSep]: Optional. If present the default list separator of ',' is changed to this,
// allowing grouped parameters like {var,var,var} to be matched: see below.
//
// RETURNS: The value of the string requested (or numerical value as a string)
//
// SOURCES: Patrick Groenestein 2006, WaveMetrics Igor 5 Help.
//
//--------------------------------+------------------------------------------------------------------------
static FUNCTION/S recExtract(win,ctrl,iStr,trim[,listSep])
string ctrl,win,iStr,trim,listSep;
variable i,n,pos;
string rStr="",rec,sep,add="";
sep = "\r";
if(paramIsDefault(listSep))
listSep = ",";
// allows a kludge: if the parameter is of the form key=(value,value,value)
// like a colour definition or key={value,value} then the string won't match,
// as the list separator will get only the first element of the sublist.
// By redefining the list separator to the closing container ')' or '}' for
// example, the correct element is extracted, and can still be cleaned up
// with the 'trim' parameter.
//
else
add = listSep;
endif;
controlInfo/W=$win $ctrl;
for(i=0,n=itemsInList(S_Recreation,sep) ; i<n ; i+=1)
rec = stringFromList(i,S_Recreation,sep);
if(strlen(rec))
pos = strsearch(rec,iStr,0,2);
if(pos>=0)
rStr += stringByKey(iStr,rec[pos,min(strlen(rec)-1,pos+1000)],"=",listSep,0);
break;
endif;
endif;
endfor;
n = strlen(trim);
if(n)
if(stringMatch(rStr[0],trim[0]))
rStr[0,0] = "";
endif;
rStr = removeEnding(rStr,selectstring(n>1,trim[0],trim[1]));
endif;
return(rStr);
END
// recExtract
// -----------
// 'recExtract' is a service function for extracting simple keyword pairs from the
// S_Recreation string returned by 'controlInfo'. This saves extracting using 'execute'
// directly where the S_Recreation string may overflow the command line buffer of 'execute'.
// It is not able to extract multiline elements such as 'userdata[(name)]' but this has its
// own Igor function (getUserdata).
//
// ARGUMENTS:
// - win: window of the calling control
// - ctrl: name of the calling control
// - iStr: keyword to be extracted.
// - trim: if present, the character[s] in 'trim' will be removed from the beginning
// and end of the result string, if they are present. Useful for trimming
// the " character when assigning to a string variable. If there are two
// characters, e.g. "{}", the first will be trimmed from the start of the
// string and the second from the end. Further characters are ignored.
// - [listSep]: Optional. If present the default list separator of ',' is changed to this,
// allowing grouped parameters like {var,var,var} to be matched: see below.
//
// RETURNS: The value of the string requested (or numerical value as a string)
//
// SOURCES: Patrick Groenestein 2006, WaveMetrics Igor 5 Help.
//
//--------------------------------+------------------------------------------------------------------------
static FUNCTION/S recExtract(win,ctrl,iStr,trim[,listSep])
string ctrl,win,iStr,trim,listSep;
variable i,n,pos;
string rStr="",rec,sep,add="";
sep = "\r";
if(paramIsDefault(listSep))
listSep = ",";
// allows a kludge: if the parameter is of the form key=(value,value,value)
// like a colour definition or key={value,value} then the string won't match,
// as the list separator will get only the first element of the sublist.
// By redefining the list separator to the closing container ')' or '}' for
// example, the correct element is extracted, and can still be cleaned up
// with the 'trim' parameter.
//
else
add = listSep;
endif;
controlInfo/W=$win $ctrl;
for(i=0,n=itemsInList(S_Recreation,sep) ; i<n ; i+=1)
rec = stringFromList(i,S_Recreation,sep);
if(strlen(rec))
pos = strsearch(rec,iStr,0,2);
if(pos>=0)
rStr += stringByKey(iStr,rec[pos,min(strlen(rec)-1,pos+1000)],"=",listSep,0);
break;
endif;
endif;
endfor;
n = strlen(trim);
if(n)
if(stringMatch(rStr[0],trim[0]))
rStr[0,0] = "";
endif;
rStr = removeEnding(rStr,selectstring(n>1,trim[0],trim[1]));
endif;
return(rStr);
END
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More