Module: sems Branch: master Commit: 542eccfd1b3dd93cdef1b860f5831034736aa9a4 URL: https://github.com/sems-server/sems/commit/542eccfd1b3dd93cdef1b860f5831034736aa9a4
Author: Juha Heinanen <[email protected]> Committer: Juha Heinanen <[email protected]> Date: 2015-12-26T09:18:18+02:00 dsm/mod_utils: added general purpose splitString function - similar to PHP explode --- Modified: apps/dsm/mods/mod_utils/ModUtils.cpp Modified: apps/dsm/mods/mod_utils/ModUtils.h Modified: doc/dsm/mods/Readme.mod_utils.txt --- Diff: https://github.com/sems-server/sems/commit/542eccfd1b3dd93cdef1b860f5831034736aa9a4.diff Patch: https://github.com/sems-server/sems/commit/542eccfd1b3dd93cdef1b860f5831034736aa9a4.patch --- diff --git a/apps/dsm/mods/mod_utils/ModUtils.cpp b/apps/dsm/mods/mod_utils/ModUtils.cpp index f7f0971..3667f3e 100644 --- a/apps/dsm/mods/mod_utils/ModUtils.cpp +++ b/apps/dsm/mods/mod_utils/ModUtils.cpp @@ -56,6 +56,7 @@ MOD_ACTIONEXPORT_BEGIN(MOD_CLS_NAME) { DEF_CMD("utils.md5", SCUMD5Action); DEF_CMD("utils.replace", SCUReplaceAction); DEF_CMD("utils.splitStringCR", SCUSplitStringAction); + DEF_CMD("utils.splitString", SCUGenSplitStringAction); DEF_CMD("utils.escapeCRLF", SCUEscapeCRLFAction); DEF_CMD("utils.unescapeCRLF", SCUUnescapeCRLFAction); DEF_CMD("utils.playRingTone", SCUPlayRingToneAction); @@ -467,6 +468,45 @@ EXEC_ACTION_START(SCUSplitStringAction) { } } EXEC_ACTION_END; +CONST_ACTION_2P(SCUGenSplitStringAction, ',', true); +EXEC_ACTION_START(SCUGenSplitStringAction) { + string str = resolveVars(par1, sess, sc_sess, event_params); + string delim = resolveVars(par2, sess, sc_sess, event_params); + + string varname = par1; + if (varname.length() == 0) { + ERROR("varname is empty\n"); + sc_sess->SET_ERRNO(DSM_ERRNO_UNKNOWN_ARG); + sc_sess->SET_STRERROR("varname is empty\n"); + return false; + } + if (varname[0] == '$') + varname = varname.substr(1); + + unsigned int i; + if (delim.length() == 0) { + for(i = 0; i < str.size(); ++i) { + sc_sess->var[varname + "[" + int2str(i) + "]"] = str[i]; + } + } else { + size_t p = 0, last_p = 0; + i = 0; + while (true) { + p = str.find(delim, last_p); + if (p == string::npos) { + if (last_p <= str.length()) + sc_sess->var[varname + "[" + int2str((unsigned int)i) + "]"] = + str.substr(last_p); + break; + } + sc_sess->var[varname + "[" + int2str(i) + "]"] = + str.substr(last_p, p - last_p); + last_p = p + delim.length(); + i++; + } + } +} EXEC_ACTION_END; + EXEC_ACTION_START(SCUEscapeCRLFAction) { string varname = arg; if (varname.length() && varname[0]=='$') diff --git a/apps/dsm/mods/mod_utils/ModUtils.h b/apps/dsm/mods/mod_utils/ModUtils.h index f0171ab..207ee63 100644 --- a/apps/dsm/mods/mod_utils/ModUtils.h +++ b/apps/dsm/mods/mod_utils/ModUtils.h @@ -53,6 +53,7 @@ DEF_ACTION_2P(SCUSAddAction); DEF_ACTION_2P(SCUSSubAction); DEF_ACTION_2P(SCUIntAction); DEF_ACTION_2P(SCUSplitStringAction); +DEF_ACTION_2P(SCUGenSplitStringAction); DEF_ACTION_2P(SCUMD5Action); DEF_ACTION_2P(SCUReplaceAction); diff --git a/doc/dsm/mods/Readme.mod_utils.txt b/doc/dsm/mods/Readme.mod_utils.txt index b39fc3e..3e581a7 100644 --- a/doc/dsm/mods/Readme.mod_utils.txt +++ b/doc/dsm/mods/Readme.mod_utils.txt @@ -64,6 +64,9 @@ Actions sys.popen($myresult="/bin/ls wav/*"); utils.splitStringCR($myresult); +utils.splitString($var, delim|$delim) + split string in $var on delim or $delim into array $var[0], ... + utils.escapeCRLF($var) replace CRLF (\r\n) in string with escaped CRLF (\\r\\n) _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
