發表文章

目前顯示的是 2018的文章

ASP.NET-javascript點擊顯示收起內容(Show and hide details on click of a divison javascript)

圖片
介紹一個方法,可以利用javascript做到內容顯示與隱藏的功能,效果如下圖。 展開後 再點擊又收回 不囉嗦直接看程式碼 <span id="show" class="">     <a href="#" style="font-size: 30px; text-decoration: none">         <asp:Label ID="lbl_easy" runat="server" Text=""></asp:Label>     </a> </span> <div id="info" style="display: none; margin-left: 1em">     <asp:Literal ID="lbr_easy" runat="server" Text=""></asp:Literal> </div> 紅色的是標題一開始要顯示的字 橘色是內文中的字 要用啥元件可以看應用,這邊label與literal的值會去跟後端串接。 <script type="text/javascript">         $('#show').click(function () {             $('#info').toggle();             var visible = $('#info').is(":visible");             var value = document.getElementById("<%=lbl_easy.ClientID%>").value;             if (visible)        

ASP.NET-Web Service(API)接收參數並回傳json格式

圖片
這篇要介紹一個ASP.NET的專案,要如何建一個Web Service並可以接收別人給的參數,經過處理後回傳一json格式的Web API。 Step 1.新增asmx檔 Step 2.在App_Code資料夾找到取名一樣的.cs,因為要回傳json所以要定義一個類別,到時再用工具把這類別產生的物件轉成json,這次我想回傳的是一個json陣列。 宣告類別  public class Test {     public List<string> testList     {         get;         set;      }  } 再來你會在程式內看到[WebMethod]就是要你把處理的動作寫在這,如果有多個就自己新增[WebMethod]。 因此我就寫了一個method需要傳一個string參數,這個method與參數到時候會跟你打過去的API有關係。 在這邊我用的Json工具是Newtonsoft.Json所以別忘了在開頭using using Newtonsoft.Json; public void testMethod(string content) {      //宣告物件      Test test = new Test();      //宣告個list等等給物件的list接值      List<string> word = new List<string>();      word.Add(content);      test.testList = word;      Context.Response.Write(JsonConvert.SerializeObject(test)); } OK到這裡應該會有下圖的東西了。 Step 3:將Web Service發佈到Server上 專案 > add > Service Reference > Advanced > Add Web Reference > 輸入你server上的asmx路徑 之後它就會展生一包資料夾叫App_WebReferences然後把你的整包專案上到你的Server後API即可使用。 之

ASP.NET-後端將值傳給javascript

這邊介紹兩個基礎但很常會用到的技巧。 首先要如後將後端的值傳給前端的javascript。 首先在前端(aspx)設一個HiddenField物件 <asp:HiddenField ID="hf_time" runat="server" /> 後端(aspx.cs)給值 hf_time.Value = "TEST"; 前端(aspx)javascript取值         <script type="text/javascript">             function getValue {                 var value = document.getElementById("<%=hf_time.ClientID%>").value;             }         </script> 再來是進階應用,按鈕點擊呼叫jquery的blockUI並且顯示特定值。 上個階段有的東西這邊都要另外再拉一個button的物件。 <asp:Button ID="btn_test" class="genbtn" runat="server" Text="測試" OnClick="btn_test_Click" OnClientClick="markpage1();" /> 可以看到在按下按鈕時前端會去呼叫markpage1()這個function,接下來就是在javascript寫這個function。         <script type="text/javascript" src="../js/jquery.blockUI.js"></script>         <script type="text/javascript">             function markpage1() {        

字串、段落、文章相似度比對(Levenshtein distance)

之前介紹過文章相似度比對,今天要來介紹一個舉凡是兩個字串(string)都可以拿來算相似度的方法,且運算速度還比較快。 Levenshtein distance(萊文斯坦距離),其核心概念很簡單就是A字串要變的跟B字串一模一樣需要增加、刪除幾個字元,若增修的字元越少表示兩個字串越相似。 舉例:1234變成123編輯距離就是1。 相關的source code網路上資源有很多,隨意貼一個C#版本。 public static int LevenshteinDistance(string s, string t)     {         int n = s.Length;         int m = t.Length;         int[,] d = new int[n + 1, m + 1];         if (n == 0)         {             return m;         }         if (m == 0)         {             return n;         }         for (int i = 0; i <= n; d[i, 0] = i++)         {         }         for (int j = 0; j <= m; d[0, j] = j++)         {         }         for (int i = 1; i <= n; i++)         {             for (int j = 1; j <= m; j++)             {                 int cost = (t[j - 1] == s[i - 1]) ? 0 : 1;                 d[i, j] = Math.Min(                     Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1),                     d[i - 1, j - 1] + cost);             }         }  

英文拼字檢查(spellcheck)

這篇簡單介紹英文拼字檢查的實作邏輯,最常看到拼字檢查不外乎一些文書處理工具,可以檢查拼錯的英文字,再給予建議的候選字。 處理邏輯可以簡單這樣分 1.過濾 2.比對 3.給予建議 過濾不外乎就是把一些中文字、符號等過濾掉,再來用空白切字,下面提供C#過濾寫法。         Regex rgx = new Regex("[^a-zA-Z]");         string englishContent = rgx.Replace(content, " ");         List<char> parameters = new List<char>();         parameters.Add(' ');         string[] wordList = englishContent.Split(parameters.ToArray());         wordList = wordList.Where(c => c != "" && c.Length>1).ToArray();         return wordList; 再來是比對,需要一個字典,字典上的字確定是對的,網路很多開源的字典可以參考,再來就把剛剛切好的字去跟字典比對,若有在字典出現,系統則認為是對的字,若沒有進入下一步驟。 給予建議字,因為找不到一樣的字,這時就用編輯距離(Edit Distance)來去算跟他最相似的字,給予候選建議字。 後面兩個步驟在實作上建議可以用Trie的樹狀結構來做。

文章切斷落功能C#(paragraph segmentation using C#)

圖片
Hi大家好,好久沒寫網誌分享東西,可能是年初很多會議跟需求要談,沒啥時間來分享,其實最近也研究一些Docker的東西,有空再來分享。 今天想簡單講一下文檔切斷落的功能,你現在有一份Word或PDF等文字檔,你想把它以段落來切可以怎麼做?  切完段落便可做後續的應用,整段落的相似抄襲比對等等的 。 程式如下非常簡單 主要用\r\n(即0D0A)做切割,要注意除了段行符號外,最好前面還有句點,因為PDF再用工具解析成string時,他一行字會自動\r\n,前面兩行在做一下過濾的處理,句點取代是針對英文文章的置換,空白取代是有時候句點後面有空格才有換行符號,做完這處理差不多就大功告成了,最後再用一段的長度篩選一下,避免過短的句子也拿來當段落。 content = content.Replace(".", "。"); content = content.Replace(" ", ""); string[] resultString = Regex.Split(content, "。\r\n", RegexOptions.IgnoreCase); var paragraphs = resultString.Where(x => x.Length >= 30); 注意你必須先用解析工具把word或PDF解析成txt格式,可用Aspone等等工具,大致這樣,下次見。

Azure RMS檔案加密(4)-用Task Scheduler來執行Script

圖片
嗨大家好 這篇要介紹如何運用Windows的工作排程器(task scheduler)來執行Script。 工作排程器長這樣 Step 1打開工作排程器→建立工作 Step 2 建立工作名稱、勾選"不論使用者登入是否都執行" Step 3設定你要多久執行一次、幾點執行等等 Step 4 這邊最重要可參考下圖,新增動作選啟動程式,程式那欄輸"Powershell.exe",新增引數輸-File "script.ps1的路徑" 這樣就OK了,剩下的一堆小設定,大家自己設就好,只要這個設對,他就會進工作排程,定期執行。 好啦,介紹到這邊,蠻少看到Azure RMS的中文技術文章,也幾乎沒看過用PowerShell來用RMS服務做加密的中文介紹,分享給大家,謝謝。

Azure RMS檔案加密(3)-用PowerShell ISE寫script(連接資料庫加密)

圖片
嗨大家好 這篇要來談怎麼用PowerShell ISE來寫腳本、怎麼連資料庫來加密。 可以把他想成PowerShell的IDE,開起來長這樣,右邊還有指令可以參考。 那就不囉嗦了直接來看怎麼連接SQL,我寫了一個function來處理連接SQL,因為PowerShell是.NET Framework所以其實就是ADO.NET的連法。 function SQL {Param ($sqlstring)     $conn = New-Object System.Data.SqlClient.SqlConnection↵     $conn.ConnectionString = "Data Source=SQLEXPRESS;Initial Catalog=test;User ID=sa;Password=123456"     $conn.open()     $cmd = New-Object System.Data.SqlClient.SqlCommand↵     $cmd.connection = $conn     $cmd.commandtext = $sqlstring-f     $os.__SERVER,$env.username,$os.servicepackmajorversion,$reason     $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $cmd     $dataTable = New-Object System.Data.DataTable     $adapter.Fill($dataTable) | Out-Null     $conn.close()     return $dataTable } 把SQL字串當參數丟進commandtext即可,我用DataTable接,最後再回傳DataTable。 接下來分別的DataTable的每個Row去做處理逐筆加密,每個Row的資料分別是加密者信箱、檔案路徑、輸出檔案路徑、被授權者信箱、權限 $dt=SQL("SELECT  [ID],[OwnerEmail],[Path],[OutPath],[UserEmail],[P

Azure RMS檔案加密(2)-運用PowerShell加密

圖片
大家好 延續 Azure RMS檔案加密(1)-介紹 這篇,我來介紹如何用PowerShell來對檔案做加密。 PowerShell長這樣 Step1 安裝PowerShell與AADRM module、AIP Client 可參考微軟文件: https://docs.microsoft.com/en-us/information-protection/deploy-use/install-powershell AADRM module可以讓您用PowerShell下cmdlets來管理Azure RMS AIP Client: https://docs.microsoft.com/en-us/information-protection/rms-client/aip-client Step2 用RMS administrator權限來取得相關License的值,並建立一個ServicePrincipal帳戶(這台機器需安裝 AADRM module、AIP Client與Azure AD module ) Azure AD module是對Azure AD做管理會用到的一個模組,詳情參考: https://technet.microsoft.com/library/jj151815.aspx#bkmk_installmodule 步驟可參考: https://docs.microsoft.com/zh-tw/powershell/module/AADRM/Connect-AadrmService?view=azureipps 不過非常多我這邊就把必要做的跟大家介紹。 1.連接到Aadrm Service   下" Connect-AadrmService " 2.取得一堆參數 下" Get-AadrmConfiguration " 3.斷掉連線 下" Disconnect-AadrmService " 4.連接到Azure AD 下" Connect-MsolService " 5.建立一個ServicePrincipal帳戶,並把參數記錄下來 下" New-MsolServicePrincipal " 6.把Serv

Azure RMS檔案加密(1)-介紹

圖片
大家好 Azure RMS是微軟Azure的一個雲端加密服務。 詳細介紹可以看這: https://docs.microsoft.com/zh-tw/information-protection/understand-explore/what-is-azure-rms 他能夠對Office產品、PDF、壓縮檔等做加密,能夠將檔案設定成只有特定人在能執行特定權限,權限包含"檢視"、"編輯"、"列印"等等。 一般用於企業,通常企業有使用其服務,登入office企業帳戶,可直接在office做加密的動作,下圖為word的範例,即可對特定用戶設定權限,但這只侷限於個人對檔案加密。 那假設現在需求是 "由一台Server定期對各種檔案針對不同"檔案擁有者"、"被授權人"、權限來做加密呢?" 這時可以用PowerShell來寫script來對不同檔案做加密。 甚麼是PowerShell? 可以把他想成cmd,但比cmd強大,起源是為了跟UNIX的shell比拚,更詳細介紹可看wiki。 https://zh.wikipedia.org/wiki/Windows_PowerShell 之後三篇將會針對上面那個問題來介紹。