Browse by Tags

Json.NET技巧-反序列化還原為不同型別的集合
情境如下,我們定義一個抽象型別Notification保存排程發送通知的資料(包含JobType、ScheduleTime及Message),依發送管道分為電子郵件通知及簡訊通知,故實作成EmailNotification及SMSNotification兩個類別,並各自增加Email及PhoneNo屬性。 using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System; namespace CustCreate { public...
Posted 15 December 2013 11:03 AMJeffrey | 2 comment(s) 12,775
Filed under: ,
使用Excel維護多國語系字串資源檔
針對多國語系,.NET提供了不錯的解決方案 -- 透過.resx資源檔定義字串,透過ResourceManager或Visual Studio自動產生對應的類別[ *.Designer.cs ]取用。要新增語系支援,只需增加該語系的resx檔,提供各項目對應的文字,配合CultureInfo切換就能輕易切換語系顯示。(延伸閱讀: 逐步解說:使用資源進行 ASP.NET 的當地語系化 ) 像是以下這個例子: 這個例子也剛好突顯維護多國語系常見的困擾。Message.resx中有四個項目,Message...
Posted 02 July 2013 11:34 PMJeffrey | with no comments 10,964
Filed under: ,
CODE-將匿名型別陣列匯成CSV
工作的專案有個小需求,使用者羅列了一堆報表匯出需求,基上都是從現存LINQ資料集合以不同條件取出不同欄位。 我想到最簡便的做法是套用Where()查詢,依需求產生匿名型別 Select(o => new {     欄位1 = o.PropA,     欄位2 = o.PropB,     欄位3 = o.PropC … }) 連欄位名稱都隨使用者指定,最後再將查詢結果轉為CSV,幾個步驟就搞定一項報表需求...
Posted 01 May 2013 07:21 AMJeffrey | 3 comment(s) 6,783
Filed under: ,
CODE-縮短版GUID字串
頗特殊的需求: 一個跨平台整合在傳遞以GUID為Primary Key資料時,對方的參數欄位只接受最長30個字元,即使使用16進位數字表示法(例如: 4854c292c333480890f916d1a062b8e3),GUID字串也長達32字元,超出限制。另外想一種不會重複的識別編號法則是種解法,但要做到GUID等級的唯一性得付出不少代價。因此,另一個思考方向是如何用較短的字串長度表示GUID,評估是較省力的做法。 要比16進位表示法更簡短,最簡便的做法是將其GUID先轉為byte[],再用Base64編碼轉為字串...
Posted 29 January 2013 10:44 PMJeffrey | 6 comment(s) 12,403
Filed under: ,
防止程式同時執行多份,比檢查Process清單更好的方法
在某些情境下,我們需要限制同一支程式同時間只能執行一份,很直覺的想法是檢查Process清單,由程式名稱在清單中出現一次以上來判斷是否已有同名程式在執行。這個做法直覺有效,在大部分情境也適用,甚至在CodeProject上也不乏類似" 教學範例 ",很自然地,這也一度是我愛用過的解法(誰沒有過去呢?);但是,檢查Process清單並非是最簡潔嚴謹的做法。(前述CodeProject文章的評比只有一顆星,留言中不乏負評,這故事告訴我們,爬文時莫急莫慌,至少先看看鄉民怎麼說再決定要不要抄...
Posted 15 January 2013 09:23 PMJeffrey | 4 comment(s) 18,565
Filed under: ,
CODE-呼叫命令列程式並即時接收輸出
之前 學過 透過RedirectStandardOutput設定,可在.NET呼叫其他命令列程式並接收其顯示內容的技巧。這回則有額外需求,由於某個命令列轉檔工具執行耗時(可能長達數分鐘),故進行期間會持續輸出進度資訊讓使用者安心,但依以前StandardOutput.ReadToEnd()的做法,.NET呼叫端只能在數分鐘後一次取得全部顯示結果,無法即時掌握處理進度,使用者體驗大大扣分。 研究之後,發現貼心的.NET BCL早有因應對策: OutputDataReceived ! 做法是先在Process...
Posted 04 December 2012 09:01 AMJeffrey | with no comments 6,939
Filed under: ,
物件序列化之舉手之勞省空間
分享一下最近學會的序列化壓縮技巧。 情境如下,查詢資料庫後取得List<User>物件,打算透過序列化成檔案的方式保存,方便日後能快速還原回List<User>查詢比對,以達到離線使用的目標。 在.NET要玩序列化不過是小事一樁,只要針對類別建構出DataContractSerializer物件,再搭配FileStream,一個SerializeObject()指令就能將物件儲存成檔案,還原時也只要一個Read()指令就搞定,十分方便。 以下程式模擬了一個20萬筆資料的巨型集合物件...
Posted 07 June 2012 11:26 PMJeffrey | 5 comment(s) 13,047
Filed under: ,
比NPOI更討喜的Excel元件-EPPlus!
前陣子發表 【潛盾機】將檔案結構匯成Excel文件 ,從網友佑翔的留言(特此感謝),認識了一顆被我錯過的l好元件 -- EPPlus ! NPOI源於 POI ,在很多介面設計上,帶點Java的觀點與風格,雖然能實現各項Excel操作,但函數介面及呼叫步驟,總讓.NET老鳥感覺不順手,就像用筷子吃手扒雞一樣彆扭。例如: 要寫入文字到新的Cell,必須先CreateRow(),再CreateCell(),而不像在Excel VBA透過.Cells(rowIndex, colIndex)一次到位。 LinqToExcel...
Posted 12 May 2012 06:11 PMJeffrey | 26 comment(s) 75,155
Filed under: ,
CODE-顯示農曆日期
昨天提到 使用TaiwanLunisolarCalendar類別取得農曆日期 ,經網友風箏提醒,針對閏月要額外處理,於是一不做二不休整理成以下範例,順道把天干地支、生肖也一起加進去,還很 假掰 貼心地套用初一、初二等慣用語,程式碼分享給有需要的朋友參考。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Globalization;   namespace...
Posted 02 March 2012 04:55 AMJeffrey | with no comments 5,801
Filed under: ,
TIPS-製作固定欄寬資料檔
昨天小談了 固定欄寬資料檔解析 程式的寫法,有人問到解析之餘要如何產生固定欄寬資料,並提了一些常見 但有點機車 的需求,例如: 針對數字欄位要能指定數值靠右左方補零(不知為什麼,某些"阿公"很愛用這種不補空白要補零的規格,每次要肉眼除錯時,十來個數字欄位夾雜零零相連到天邊,數位置數到眼睛都快出血了)、文字過長要能自動截切,還要避免切成半個中文字... 禁不住這團機車小需求的刺激,忽然一陣熱血衝腦... 待神智恢復時,發現自己端坐在電腦前,VS2010開啟中的專案有一段小程式....
Posted 25 February 2012 10:36 PMJeffrey | with no comments 4,844
Filed under: , ,
TIPS-固定欄寬資料檔的解析
跟傳統系統打交道時,XML、JSON等格式多半無用武之地,往往得透過"固定欄寬資料格式"進行資料交換。 在撰寫程式解析固定欄寬資料時,有幾點注意事項: 欄位寬度計算與中文編碼有關,實務上使用BIG5編碼還是大宗(阿公級系統很少能支援Unicode)。 BIG5編碼中,半形英數字佔一個Byte,全形符號及中文佔兩個Byte,欄寬規格書中CHAR(n),n多指Bytes,所以計算長度時,需把握中文算2或英數字算1的原則。 建議不要再用比對第一個Byte ASCII的方法自己判別全半形...
OracleCommand Visualizer for VS2010
前陣子開發系統時,常在抓OracleCommand的執行期錯誤,有時是SQL語法寫錯,有時是參數數目不符,有時則是參數值給錯... (列原因寫到自己都汗顏,寫程式明明就要心思細膩,我的心思... 應該粗如電線桿吧?) 雖然VS2010在偵錯階段提供了很強的物件檢視功能,能逐一檢視物件的每個屬性且能逐層展開,必要時還可用即時運算視窗下指令做進一步操作分析,但每次要逐一檢查OracleCommand.Parameters還是有些麻煩,心想,如果能一次列出CommandText及所有參數的型別跟內容就太好了...
Posted 16 July 2011 08:22 AMJeffrey | 5 comment(s) 9,682
Filed under: , , ,
CODE-分贓程式的寫法(LINQ進化版)
很久前曾寫過一篇範例,介紹將數字金額依不同權重拆成多筆的 分贓程式 寫法,最近專案又再度陷入算錢的漩渦,但局面有點改變。近一兩年被.NET 3.5/.NET 4寵壞了,已經有點"不用LINQ不會寫Code"的傾向,因此現在寫的帳務程式,就大量引用了List<SomeObject>的技巧處理資料。舉例來說,拆帳結果被裝在類似List<ResultObject>的IEnumerable裡,要做到依權重分攤,最直覺的寫法是跑個迴圈套用原本的分贓演算法,看起來就能輕鬆搞定...
Posted 29 June 2011 06:18 AMJeffrey | 1 comment(s) 9,335
Filed under: , ,
依Dictionary產生INSERT Script
工作上有些場合需要將變更資料庫的過程以Script方式保存,方便交給其他人執行。 有不少工具可以協助從現有資料庫轉出INSERT Script,例如: SQL Dumper 、 Database Publish Wizard 、 Toad ... 都辦得到。不過剛好有個小需求是希望直接由.NET組成資料輸出INSERT Script,於是我寫了個很陽春的工具函數,將Dictionary<string, object>轉成Oracle用的INSERT Script,其中會再依object的型別做不同的處理...
Posted 17 May 2011 06:15 AMJeffrey | 6 comment(s) 8,217
Filed under: , ,
筆記-Excel轉DataTable的NPOI簡單範例
這篇主要是寫給自己備忘的,以下為使用NPOI讀取表格Excel檔,自動轉成DataTable的簡單範例: (NPOI是什麼? 可參考 舊文 ) using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; public class NPOIHelper { public static DataTable ReadExcelAsTableNPOI( string fileName) {...
Posted 14 May 2011 07:40 AMJeffrey | 20 comment(s) 58,096
Filed under: ,
更多文章 下一頁 »

搜尋

Go

<June 2017>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication