基金净值短信内容的拆分
2007-07-10 15:53
295 查看
单条短信长度有限制,为64或60个字符,尾部预留6个公司标识([XXXX]),如果短信内容超长这个限制,需要分拆成两条或多条。实际应用中碰到一个问题,运用定长拆分时,一个完整的数字可能被截断,造成短信阅读困难。所以需要用程序加以控制,如下面的净值短信需要拆分,数值部分可能需要新起一条短信。
7月9日净值:成长1.4394增长3.761稳健1.039债券1.190服务3.414保本1 .553超短债1.0026主题1.562策略1.354沪深三百1.491货币基金万份收益0.6250元,七日年化收益率5.720%,将被拆分为:
7月9日净值:成长1.4394增长3.761稳健1.039债券1.190服务3.414保本1 .553超短债1.0026主题
1.562策略1.354沪深三百1.491货币基金万份收益0.6250元,七日年化收益率5.720%
程序逻辑比较简单,就是寻找短信切分位置,先将指针置到单条短信最大长度处(如第64个字符处),然后判断是否需要回溯,若刚好落在一个完整的数值中时,需要回溯指针到非数字字符上。切分位置确定后,即可进行字符串分割操作。需要注意的是'.‘小数点的处理。附上参考程序,希冀能抛砖引玉
附,存储过程(oracle9i,pl/sql代码)
--CREATE PROCEDURE p_split_sms AS
declare
smscontent VARCHAR2(2000); -- 剩余短信内容
smspart VARCHAR2(100); -- 分拆后单条短信
len INTEGER; -- 剩余短信内容长度
pos INTEGER; -- 短信分拆位置
n INTEGER; -- pos位置的字符ASCII码
n1 INTEGER; -- pos+1位置的字符ASCII码
n2 INTEGER; -- pos+2位置的字符ASCII码
MAXLEN INTEGER := 64; -- 最大短信长度
begin
-- Test statements here
smscontent := '6月22日净值:成长1.4691增长3.91稳健1.092债券1.201服务3.544保本1.567超短债1.0033主题1.869策略1.459沪深三百1.576货币基金万份收益1.8759元,七日年化收益率7.475%';
len := length(smscontent);
-- 短信内容是否需要拆分成多条
WHILE len > MAXLEN LOOP
pos := MAXLEN; -- 短信拆分位置
n := ascii(substr(smscontent, pos, 1));
n1 := ascii(substr(smscontent, pos + 1, 1));
n2 := ascii(substr(smscontent, pos + 2, 1)); -- 可能返回NULL值(指针越界)
-- ...主题1.869策略...(充分考虑pos指针位置,即位于数值任意位置时的相应处理)
-- 下一个字符为数字,或后两字符为小数点+数字形式('5', '.5')
-- ASCII: [0-9]~[48-57], '.'~46
IF ((n1 >= 48 AND n1 <= 57) OR (n1 = 46 AND (n2 >= 48 AND n2 <= 57))) THEN
-- 回溯至第一个非[0-9.]的字符所在位置
WHILE (pos > 0 AND (n >= 48 AND n <= 57) OR n = 46) LOOP -- 匹配[0-9.]
pos := pos - 1;
n := ascii(substr(smscontent, pos, 1));
END LOOP;
END IF;
-- 若数字部分超长,则不考虑数值显示完整性(即无需另起一行)
IF pos < (MAXLEN / 2) THEN
pos := MAXLEN;
END IF;
smspart := substr(smscontent, 1, pos);
smscontent := substr(smscontent, pos + 1);
len := length(smscontent);
dbms_output.put_line(smspart);
END LOOP;
IF (len IS NOT NULL) THEN
-- 最后剩余部分,长度不足MAXLEN
dbms_output.put_line(smscontent);
END IF;
end;
7月9日净值:成长1.4394增长3.761稳健1.039债券1.190服务3.414保本1 .553超短债1.0026主题1.562策略1.354沪深三百1.491货币基金万份收益0.6250元,七日年化收益率5.720%,将被拆分为:
7月9日净值:成长1.4394增长3.761稳健1.039债券1.190服务3.414保本1 .553超短债1.0026主题
1.562策略1.354沪深三百1.491货币基金万份收益0.6250元,七日年化收益率5.720%
程序逻辑比较简单,就是寻找短信切分位置,先将指针置到单条短信最大长度处(如第64个字符处),然后判断是否需要回溯,若刚好落在一个完整的数值中时,需要回溯指针到非数字字符上。切分位置确定后,即可进行字符串分割操作。需要注意的是'.‘小数点的处理。附上参考程序,希冀能抛砖引玉
附,存储过程(oracle9i,pl/sql代码)
--CREATE PROCEDURE p_split_sms AS
declare
smscontent VARCHAR2(2000); -- 剩余短信内容
smspart VARCHAR2(100); -- 分拆后单条短信
len INTEGER; -- 剩余短信内容长度
pos INTEGER; -- 短信分拆位置
n INTEGER; -- pos位置的字符ASCII码
n1 INTEGER; -- pos+1位置的字符ASCII码
n2 INTEGER; -- pos+2位置的字符ASCII码
MAXLEN INTEGER := 64; -- 最大短信长度
begin
-- Test statements here
smscontent := '6月22日净值:成长1.4691增长3.91稳健1.092债券1.201服务3.544保本1.567超短债1.0033主题1.869策略1.459沪深三百1.576货币基金万份收益1.8759元,七日年化收益率7.475%';
len := length(smscontent);
-- 短信内容是否需要拆分成多条
WHILE len > MAXLEN LOOP
pos := MAXLEN; -- 短信拆分位置
n := ascii(substr(smscontent, pos, 1));
n1 := ascii(substr(smscontent, pos + 1, 1));
n2 := ascii(substr(smscontent, pos + 2, 1)); -- 可能返回NULL值(指针越界)
-- ...主题1.869策略...(充分考虑pos指针位置,即位于数值任意位置时的相应处理)
-- 下一个字符为数字,或后两字符为小数点+数字形式('5', '.5')
-- ASCII: [0-9]~[48-57], '.'~46
IF ((n1 >= 48 AND n1 <= 57) OR (n1 = 46 AND (n2 >= 48 AND n2 <= 57))) THEN
-- 回溯至第一个非[0-9.]的字符所在位置
WHILE (pos > 0 AND (n >= 48 AND n <= 57) OR n = 46) LOOP -- 匹配[0-9.]
pos := pos - 1;
n := ascii(substr(smscontent, pos, 1));
END LOOP;
END IF;
-- 若数字部分超长,则不考虑数值显示完整性(即无需另起一行)
IF pos < (MAXLEN / 2) THEN
pos := MAXLEN;
END IF;
smspart := substr(smscontent, 1, pos);
smscontent := substr(smscontent, pos + 1);
len := length(smscontent);
dbms_output.put_line(smspart);
END LOOP;
IF (len IS NOT NULL) THEN
-- 最后剩余部分,长度不足MAXLEN
dbms_output.put_line(smscontent);
END IF;
end;
相关文章推荐
- 把短信内容按照字节拆分条数
- 获取手机短信内容
- 什么是基金的净值增长率和累计净值增长率?
- android获取短信所有内容
- android拦截短信并提取内容
- android broadcast 广播机制对短信处理 获取短信内容
- androidの读取短信内容
- Android之短信监听与内容获取
- 关于textarea内容为回车分隔的值,提交后的拆分
- Android开发中通过广播接受短信并提取短信内容
- 关于串口控制GTM900C模块发送短信内容与长度
- 内容提供者复习——短信备份
- 选好基金不能只看净值
- Android 观察系统中短信内容的变化(内容观察者)
- 调用iPhone的地图、电话、邮件、短信及内容
- Android 调用系统发短信界面,给指定号码发短信,并带短信内容
- Android中获取短信的内容
- 安卓使用ContentProvider实现读取手机联系人和短信内容
- wm下拦截指定内容或电话号码的短信
- JavaScript 通过plus读取android手机短信内容