Browse by Tags

使用 C# 整合 OpenCC 執行中文繁簡轉換
前篇文章 介紹了輕巧但威力強大的 OpenCC,使用 opencc.exe 可輕鬆完成繁簡轉換。 如果我們要在 .NET 裡寫一個函式招喚 OpenCC 將繁體字串轉成簡體字串該怎麼做? 呼叫外部 .exe 這等小事,自然難不倒 .NET 老鳥,生個 System.Diagnostics.Process,給對 exe 路徑,弄兩個隨機暫存檔放待翻文字與輸出結果,等待 opencc.exe 執行完畢,讀出結果刪掉暫存檔,搞定收工! public static class OpenCCConverter...
Posted 26 May 2018 09:32 PMJeffrey | with no comments 2,468
Filed under: ,
Coding4Fun–Microsoft Speach API 筆記
前篇文章 用 Balabolka 搞定自製英文單字朗讀 MP3,但老讀者們都猜到接下來會發生什麼事... 是的,C# 整合 SAPI 讓電腦講話的練習來了! 原本以為要裝什麼 SDK 或套件,沒想到 .NET 已內建,專案只需參照 System.Speech 就好。 開始前先看一下你的 Windows 裝了哪些語音以及其支援語系: static void ListInstalledVoices() { var voice = new System.Speech.Synthesis.SpeechSynthesizer...
Posted 06 May 2018 10:50 PMJeffrey | 6 comment(s) 3,014
Filed under:
【茶包射手日記】用 TransactionScope 包 LINQ 迴圈查詢出錯
使用者報案某網頁功能故障,經抽絲剝繭鎖定爆炸點在一段「TransactionScope 中以 LINQ to SQL 取回物件集合,跑 foreach 開連線查資料庫」邏輯(警語:跑迴圈執行資料庫查詢,迴圈次數如過高將成效能殺手,宜避免),簡化為以下程式片段可重現問題:(註: 程式碼經過簡化,在 foreach 迴圈裡不斷開啟資料庫連線看起來很突兀,但實際案例中 foreach 迴圈是呼叫外部程式庫的共用函式,要追進去才會知道其中開了連線查詢資料庫) using (var tx = new TransactionScope...
Posted 26 April 2018 10:18 PMJeffrey | with no comments 2,168
Filed under: ,
CODE–URL調整HTTP/HTTPS、Port、QueryString參數公用函式
前陣子 談過用 HttpUtility.ParseQueryString 解析、修改及還原參數的簡便做法,一不做二不休,再來聊聊如果拿到一個 URL, HTTP 要改 HTTPS、主機名稱要換、Port、路徑要改,是不是也有不走字串比對置換的優雅做法? 爬文查到好用的 .NET 內建物件 - UriBuilder (.NET 2.0 時代就有了,我到現在才學會),Scheme(http、https)、Port、Host、Path 均可任意抽換調整,再產生新的 URL,比起自己寫 Regex 比對置省事可靠不少...
Posted 10 April 2018 09:52 PMJeffrey | 2 comment(s) 3,878
Filed under:
CODE - C# 推算檔案相對路徑
最近在資料夾比對工具遇到一個需求:要以某個資料夾為基準推算檔案的相對路徑。例如,若基準資料夾為 C:\Folder,則 C:\Folder\SubFolder\Test.txt 的相對路徑為 SubFolder\Test.txt。 類似需求以前加減寫過,說穿了全是字串比對的功夫,靠將路徑前方相同部分移除取得相對路徑。如果相對路徑需支援 ..\..\Test.txt 這種寫法,邏輯會複雜一些,若還再考慮英文大小寫的話... 總之,計算相對路徑說難不難,自己寫瑣碎細節倒也不少。於是我想起 前幾天 談到的...
Posted 13 March 2018 09:35 PMJeffrey | with no comments 3,275
Filed under:
實戰小技巧 - .NET Exception Message、InnerException 與 ToString()
前篇文章 提到 try catch 時若只保留 Exception.Message,可能遺失 InnerException 及 StackTrace 錯失破案重要線索。文章迴響顯示這是個值得介紹的實戰技巧,故再補充一篇。 在某些應用情境我們會選擇使用 try … catch 達成特定目的,例如:(註:Exception 的官方翻譯為例外狀況,這裡容我用較口語化的「錯誤」取代) 捕捉可預期錯誤,進行補救並繼續執行程式 例如:發現作業失敗時,Rollback 交易、寫 Log、通知管理員、退回前一步驟請使用者再試一次...
Posted 12 February 2018 09:06 PMJeffrey | 4 comment(s) 4,562
Filed under: ,
【茶包射手日記】老 Bug 新感受之 ODP.NET 版本問題
同事報案。某個使用 Managed ODP.NET 的測試網站吐出以下錯誤 Error: The type initializer for 'OracleInternal.Common.ProviderConfig' threw an exception. 同事一度懷疑跟 ODP.NET 版本有關,但依經驗,如為版本問題錯誤訊息會確指出所需元件全名、版號等資訊。為調查問題,我直接在 IIS主機 現場撰寫 Tets.aspx 偵錯 ,測試程式一用到 new Oracel.ManagedDataAccess...
Posted 10 February 2018 08:15 AMJeffrey | with no comments 2,822
Filed under: ,
使用 Razor 產生客製化 Email 內容
多年下來,寫程式發 Email 通知的需求做過 N 回,其中寄給客戶的通知為求美觀常需採用 HTML 格式,而客戶姓名、通知內容等要隨客戶動態改變,嚴格來說也是一種套表。過去我慣用一套自己發明的「特別註記+Replace」做法,例如: var tmpl = "<span>[$Name$]</span> 您好,您的等侯順位為<span>[$SeqNo$]</span>" ; var dict = new Dictionary<...
C# 讀取 dbms_output 效能強化版
前文 介紹過使用 C# 讀取 dbms_output 寫入內容,範例留了一個小尾巴,跑迴圈連資料庫犯了效能大忌,應改成一次執行或查詢取回才上道。 dbms_output.get_lines() 允許一次取得多筆訊息,但傳回型別為 TYPE DBMSOUTPUT_LINESARRAY IS VARRAY(2147483647) OF VARCHAR2(32767); 讀取要費點手腳,Oracle 生手經過一番研究,試出四種不同做法,就當練功吧。 使用 ODP.NET OracleParameter...
Posted 12 January 2018 10:32 PMJeffrey | 1 comment(s) 4,040
Filed under: ,
TIPS - C# 讀取 Oracle dbms_output.put_line 輸出資訊
使用 dbms_output.put_line() 列印執行資訊是常用的 Oracle Stored Procedure 偵錯技巧,以下 Procedure 範例在DELETE 及 INSERT 後透過 dbms_output.put_line() 印出影響資料筆數,概念跟在程式碼裡塞入一堆 Debug.Print、MsgBox、alert() 差不多,是執行期間追查問題的重要線索: create or replace procedure JeffDBJobTest1 is begin delete...
Posted 12 January 2018 07:01 AMJeffrey | with no comments 3,043
Filed under: , ,
野人獻曝 - 極簡風格 .NET Stopwatch 計時法
在 .NET 要測量執行時間,Stopwatch 是最簡單直覺的做法,像這樣: Stopwatch sw = new Stopwatch(); sw.Start(); //...執行要測試的動作 sw.Stop(); //將測得秒數輸出到Console、Debug或Log檔 Console.WriteLine($ "Time={sw.ElapsedMilliseconds:n0}ms" ); 說起來不複雜,但一但測量對象變多,專案將充斥大量 Stopwatch 建立、開始、結束以及記錄時間的程式碼...
Posted 09 January 2018 08:41 PMJeffrey | 6 comment(s) 6,457
Filed under: ,
除蟲筆記 – Thread 執行時機與 Closure
同事的 .NET 程式抓到一隻有趣的 Bug。以範例程式重現如下: static void DoProcess( int idx) { while (StartFlag) { Thread.Sleep(1000); Console.WriteLine( $ "{DateTime.Now:mm:ss} Thread {idx} is running." ); } } static void Main( string [] args) { for ( int i = 1; i <...
Posted 20 December 2017 08:39 PMJeffrey | with no comments 4,374
Filed under:
RSA 非對稱金鑰加解密與數位簽章筆記
用 .NET 加解密已是老生常談,.NET 內建 MD5、SHA1、RSA、AES、DES... 等雜湊及加密演算法,寫來易如反掌,網路上的文章也很多。但沒有自己整理過一次,每回要用都要爬文找半天。有些基本功不能省就是不能省,所以,我的 RSA 私房筆記來了。 程式範例 1 包含:產生隨機 RSA 金鑰、匯出公私鑰、對一小段文字加密、產生數位簽章。第二階段則包含匯入私鑰、解密加密內容、驗證數位簽章,並試著偷改內容驗證簽章是否因此失效。 static void RSAEncDec() { //建立RSA公私鑰...
Posted 17 December 2017 05:11 AMJeffrey | with no comments 9,150
Filed under: ,
CODE-C# 程式讀取 Exchange 共用行事曆
工作遇到新需求:辦公室自動化服務希望讀取使用者行事曆,整合顯示於個人資訊頁。 EWS Managed API 封裝了複雜又囉嗦的 Exchange Web Service SOAP 細節,改以 .NET 程式庫形式提供電子郵件、連絡人、行事曆、公用資料夾的存取管道,是 C# 開發 Exchange 相關程式的首選。(意外發現 EWS Managed API 從 2014 起轉為 Github 開源專案 ,有原始碼在手,搞不懂走不通都有救,用起來格外讓人放心,微軟真的愈來愈開放) 官方文件有篇詳細...
Posted 16 December 2017 10:12 AMJeffrey | with no comments 4,423
Filed under: ,
CODE-從 JSON 提取文字內容
從檔案萃取文字部分建立索引是全文檢索的必要程序,先前介紹過 為 PDF、Office 檔案產生文字索引 的做法,實際開發則遇到為 JSON 建立文字索引的需求。借用上回 遞迴文章 的組織資料當實例,假設 JSON 格式如下: { "Name" : "總經理" , "Children" : [ { "Name" : "行政部" , "Children" : [ { "Name"...
Posted 15 December 2017 10:39 PMJeffrey | with no comments 4,632
Filed under: , ,
更多文章 下一頁 »

搜尋

Go

<July 2018>
SunMonTueWedThuFriSat
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication