巧取簡訊中的回覆程式碼
這兩天接到這樣一個需求,要從簡訊內容中找出簡訊的業務程式碼和名稱:例如如下的一條簡訊
尊敬的使用者,您的話機,本月消費總額:96.91元.當前餘額:16.89元.親!請回復序號獲取更多服務:
61.當月生效流量包辦理
103.查詢本月消費明細
104.繳費記錄查詢
105.查詢賬戶積分
108.查詢套餐使用量
112.3G流量卡查詢
1131.查詢上月賬單情況
0000.查詢本機增值業務
但存在的問題是,簡訊的種類很多,好在有欄位可以大致區分出來類似的回覆簡訊,但是即便如此,還是存在很多沒有業務程式碼的簡訊,查詢了很多簡訊記錄總算是總結出來一條規律就是包含業務程式碼的簡訊總是>=3行的,當然也存在=3行但是沒有回覆程式碼的簡訊,由於實在是缺乏剔除的規律性因此決定在取出後再做二次剔除,於是就編寫了下面這段程式碼,後來發現取出來的還是不準確,原來還存在程式碼和名稱用空格的方式
2/2溫馨提醒,使用簡訊營業廳查詢業務、充值交費、積分兌換優惠業務包,方便快捷、省時省心。回程式碼體驗:
111 銀聯卡交費
518 數字競猜獎30元話費活動介紹
50321 確認100積分兌換15條簡訊
實際上,只需要將空格替換成小數點就解決了。 最終的程式碼如下:
SQL> set serveroutput on
SQL> declare n number;
2 n1 number;
3 v_id varchar2(200);
4 v_content varchar2(4000);
5 begin
6 --1.先判斷回車的數量 從而確定需要迴圈的次數
7 select (length(replace(smscontent_ys,' ','.'))-length(replace(replace(smscontent_ys,' ','.')||chr(10),chr(10),null))) into n
/* 首先計算長度減掉將回車符替換為空的長度,從而得出存在的回車數量 */
/*replace(smscontent_ys,' ','.') 將可能為空格的替換為小數點, 因為最後一行沒有空格,因此需要給簡訊內容新增一個回車符,這樣便於一次性迴圈取出所有的程式碼 */
8 from TMP_SMSRESULT_1403_108_D where sessionid='SMS201403010000060071';
9 --2.找出第一個回車前還有幾個非有效的小數點
10 select length(substrreplace(smscontent_ys,' ','.')||chr(10),1,instr(replace(smscontent_ys,' ','.')||chr(10),chr(10),1,1)))-
11 length(replace(substr(replace(smscontent_ys,' ','.')||chr(10),1,instr(replace(smscontent_ys,' ','.')||chr(10),chr(10),1,1)),'.',null)) into n1
12 from TMP_SMSRESULT_1403_108_D where sessionid='SMS201403010000060071';
13 for i in 1..n loop --迴圈之前確定的次數
14 select substr(replace(smscontent_ys,' ','.')||chr(10),instr(replace(smscontent_ys,' ','.')||chr(10),chr(10),1,i),instr(replace(smscontent_ys,' ','.')||chr(10),'.',1,n1+i)-instr(replace(smscontent_ys,' ','.')||chr(10),chr(10),1,i)),
15 substr(replace(smscontent_ys,' ','.')||chr(10),instr(replace(smscontent_ys,' ','.')||chr(10),'.',1,n1+i)+1,instr(replace(smscontent_ys,' ','.')||chr(10),chr(10),1,1+i)-instr(replace(smscontent_ys,' ','.')||chr(10),'.',1,n1+i)) into v_id,v_content--獲取id和內容
16 from TMP_SMSRESULT_1403_108_D where sessionid='SMS201403010000060071';
17 dbms_output.put_line(v_id||':'||v_content); --將收集到的程式碼和內容列印出來以便檢視是否有效。
18 end loop;
19 end;
20 /
61:當月生效流量包辦理
103:查詢本月消費明細
104:繳費記錄查詢
105:查詢賬戶積分
108:查詢套餐使用量
112:3G流量卡查詢
1131:查詢上月賬單情況
0000:查詢本機增值業務
PL/SQL procedure successfully completed
尊敬的使用者,您的話機,本月消費總額:96.91元.當前餘額:16.89元.親!請回復序號獲取更多服務:
61.當月生效流量包辦理
103.查詢本月消費明細
104.繳費記錄查詢
105.查詢賬戶積分
108.查詢套餐使用量
112.3G流量卡查詢
1131.查詢上月賬單情況
0000.查詢本機增值業務
但存在的問題是,簡訊的種類很多,好在有欄位可以大致區分出來類似的回覆簡訊,但是即便如此,還是存在很多沒有業務程式碼的簡訊,查詢了很多簡訊記錄總算是總結出來一條規律就是包含業務程式碼的簡訊總是>=3行的,當然也存在=3行但是沒有回覆程式碼的簡訊,由於實在是缺乏剔除的規律性因此決定在取出後再做二次剔除,於是就編寫了下面這段程式碼,後來發現取出來的還是不準確,原來還存在程式碼和名稱用空格的方式
2/2溫馨提醒,使用簡訊營業廳查詢業務、充值交費、積分兌換優惠業務包,方便快捷、省時省心。回程式碼體驗:
111 銀聯卡交費
518 數字競猜獎30元話費活動介紹
50321 確認100積分兌換15條簡訊
實際上,只需要將空格替換成小數點就解決了。 最終的程式碼如下:
SQL> set serveroutput on
SQL> declare n number;
2 n1 number;
3 v_id varchar2(200);
4 v_content varchar2(4000);
5 begin
6 --1.先判斷回車的數量 從而確定需要迴圈的次數
7 select (length(replace(smscontent_ys,' ','.'))-length(replace(replace(smscontent_ys,' ','.')||chr(10),chr(10),null))) into n
/* 首先計算長度減掉將回車符替換為空的長度,從而得出存在的回車數量 */
/*replace(smscontent_ys,' ','.') 將可能為空格的替換為小數點, 因為最後一行沒有空格,因此需要給簡訊內容新增一個回車符,這樣便於一次性迴圈取出所有的程式碼 */
8 from TMP_SMSRESULT_1403_108_D where sessionid='SMS201403010000060071';
9 --2.找出第一個回車前還有幾個非有效的小數點
10 select length(substrreplace(smscontent_ys,' ','.')||chr(10),1,instr(replace(smscontent_ys,' ','.')||chr(10),chr(10),1,1)))-
11 length(replace(substr(replace(smscontent_ys,' ','.')||chr(10),1,instr(replace(smscontent_ys,' ','.')||chr(10),chr(10),1,1)),'.',null)) into n1
12 from TMP_SMSRESULT_1403_108_D where sessionid='SMS201403010000060071';
13 for i in 1..n loop --迴圈之前確定的次數
14 select substr(replace(smscontent_ys,' ','.')||chr(10),instr(replace(smscontent_ys,' ','.')||chr(10),chr(10),1,i),instr(replace(smscontent_ys,' ','.')||chr(10),'.',1,n1+i)-instr(replace(smscontent_ys,' ','.')||chr(10),chr(10),1,i)),
15 substr(replace(smscontent_ys,' ','.')||chr(10),instr(replace(smscontent_ys,' ','.')||chr(10),'.',1,n1+i)+1,instr(replace(smscontent_ys,' ','.')||chr(10),chr(10),1,1+i)-instr(replace(smscontent_ys,' ','.')||chr(10),'.',1,n1+i)) into v_id,v_content--獲取id和內容
16 from TMP_SMSRESULT_1403_108_D where sessionid='SMS201403010000060071';
17 dbms_output.put_line(v_id||':'||v_content); --將收集到的程式碼和內容列印出來以便檢視是否有效。
18 end loop;
19 end;
20 /
61:當月生效流量包辦理
103:查詢本月消費明細
104:繳費記錄查詢
105:查詢賬戶積分
108:查詢套餐使用量
112:3G流量卡查詢
1131:查詢上月賬單情況
0000:查詢本機增值業務
PL/SQL procedure successfully completed
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12216142/viewspace-1125387/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 巧取字串中的數字字串
- 簡化工作流之程式碼審查回覆訊息生成(Python實現)Python
- 微信開發中的訊息驗證與訊息回覆
- 小程式如何實現自動回覆訊息的功能?一個簡單的方法
- 【實戰教程】小程式客服訊息的自動回覆
- 18行程式碼寫出微信拜年訊息智慧回覆,過年微信輕鬆過行程
- 60行程式碼爬取知乎“神回覆”,句句戳中淚點行程
- [CallerLoc外掛]SmsReply For CallerLoc (未接自動回覆簡訊增強版)
- 文字簡訊介面對接傳送簡訊後如何獲取狀態報告以及回覆報告
- 60行程式碼爬取知乎神回覆行程
- 微信小程式客服自動回覆訊息功能採坑(完)微信小程式
- 通過 Laravel 訊息通知使用 EasySms 簡訊服務,讓你的程式碼更簡潔Laravel
- 簡單演示Excel中VBA程式碼的使用Excel
- 在 Laravel 中編寫簡潔的程式碼的策略Laravel
- 如何在iphone應用程式中傳送簡訊iPhone
- 小程式簡訊驗證碼登入,1分鐘實現小程式發簡訊功能,藉助雲開發10行程式碼行程
- 相親交友原始碼中,音訊AAC解碼的實現程式碼原始碼音訊
- C#網路程式設計-簡單的通訊原始碼C#程式設計原始碼
- 基於python使用qqbot接入qq做一個簡單的文字訊息自動回覆Python
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- 用程式碼理解ObjC中的傳送訊息和訊息轉發OBJ
- PHP微信開發之模板訊息回覆PHP
- 阿里雲簡訊服務的使用-----獲取簡訊驗證碼阿里
- Optional簡化空值判斷,減少程式碼中的if-else程式碼塊
- 驗證碼簡訊 API 接入指南:Java 語言示例程式碼APIJava
- 低程式碼智慧通訊:騰訊雲簡訊助力,快速構建高效訊息應用
- Android中實現簡訊驗證碼自動填入Android
- 程式間通訊簡介
- 保險簡訊介面程式改造
- 超簡單的視訊物件提取程式物件
- 調取創藍253國際簡訊驗證碼-程式碼示例2
- Android中SurfaceView視訊播放實現程式碼AndroidView
- java中的編碼簡介Java
- 簡訊動態密碼與KEY是在企業安全中的應用密碼
- 視訊編碼原理簡介
- 簡訊貓程式設計的一些資料1(At指令傳送簡訊)程式設計
- C#實現聯通簡訊Sgip協議程式原始碼C#協議原始碼
- 簡單的程式碼生成工具