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

Reply via email to