發表文章

C# LINQ語法與SQL語法

圖片
  LINQ語法其實跟SQL語法還蠻像的,說蠻像基本上就是拿SQL語法來程式內使用而已。 學習過SQL的人太概都知道SQL的好處,雖說不上萬能,但是在找尋資料時卻是很好用的一種語法。 很多時候,不靠SQL資料庫要處理龐大內存資料真是一種痛苦,由其是不靠資料庫處理大量檔案資料或是內存資料時就是如此。如果有兩種資料須要JOIN就會需要很多程式碼,很多for/foreach迴圈去跑,因此總會希望程式碼在處理內存資料時會有像SQL這樣簡單的語法可以使用。 當然很多地方大都有在說LINQ和SQL的詳細寫法,我這邊也不再描述,我這邊主要是讓大家看看這兩種語法相似之處。 假如我有兩個資料表 學生基本資料(Student) 和 學等(Grade): Student StudentID Name Gender AddressCity AddressArea A0001 吳山汝 Female 台北市 萬華區 A0045 卓凱耀 Male 台中市 北區 A0107 劉立沛 Male 高雄市 鼓山區 Grade StudentID Class Score A0001 1.4 550 A0045 2.5 490 A0107 3.1 581 我們看看 幾個比較 假如我要選取學生資料表(Student)裏面的姓名(Name),然後過濾條件是住在台中市(AddressCity)會怎麼做呢? SQL語法: Select a.Name From Student a Where a.AddressCity = '台中市' 這三行分別就是: 選擇輸出的資料欄(Select) 資料來源(From) 過濾條件(Where) 注意: SQL對指令沒有大小寫分別,對字串不是使用雙引號,而是單引號 其中那個 a 是『別名』 如果用LINQ來寫,就會像如下: var result = ( from a in Student                       where a.AddressCity == "台中市"                      

Arduino [7SEGX8] 七段顯示器x2 使用74HC164驅動

圖片
這是一塊2排4位數7段顯示器(共8位數)的板子,由2顆74HC164控制,它的線路非常的單純排除電源之外,就只有DATA和CLOCK兩個訊號源而已。 由於它是由74HC164組成,所以資料傳輸方式就是使用位元資料PUSH出去的方式: shiftOut (data_pin, clk_pin, MSBFIRST , ~output[index]); shiftOut (data_pin, clk_pin, MSBFIRST , 1<<index); delayMicroseconds (delayTime); 從上面的範例有執行兩次shiftOut的動作 第一次是送顯示位元(bit)送出去 第二次是重送定位(Digit)第幾位數 第三行是delayMicroseconds是顯示停留時間      顯示停留時間如果太短,你會幾乎看不到顯示的數字,顯示時間太久,你會看到一個數字一個數字的移動,因為這個設計一次只能顯示一個位置的一個數字,然後利用快速切換將每個位置的數字依序跑一遍。然後利用視覺暫留的時間讓你的眼睛看到該數字出現在那裏。 模組樣式 這個模組顯示方式從第 0 位置到 7 位置,從左上方開始,於右下方結束 0 →1→2→3 4→5→6→7 這次我們做個計數器來測試,接線方式如下: 程式碼如下: #define data_pin  2 #define clk_pin   3 int16_t delayTime = 2500; // 顯示暫留時間 / / 顯示七節字碼 [0,1,2,3,4,5,6,7,8,9,空] // B00111111,B00000110,B01011011,B01001111,B01101101,B01111101,B00000111,B0111111,B01101111,B00000000 uint8_t seg7[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F , 0x00}; uint8_t output[8]; long count = 0; void setup() {   // 設定輸出   pinMode (clk_pin, OUTPUT );   pinMode (data_p

C# 自訂 XCOPY 類別 :複製資料夾內所有檔案與子資料夾內容到目的資料夾(並覆蓋)

圖片
Xopy.class using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Tools {     public class Xcopy     {         private string _message;         /// <summary>         /// 錯誤訊息         /// </summary>         public string Message         {             get { return _message; }         }         /// <summary>         /// 複製檔案群         /// </summary>         /// <param name="_source">來源資料夾</param>         /// <param name="_target">目的資料夾</param>         /// <param name="recursive">包含子資料夾</param>         /// <returns>成功 = 1 , 失敗 = -1</returns>         public int Copy(string _source, string _target, bool recursive = true)         {             try             {                 if (!Directory.Exists(_source))                 {                     _message = "來源資料夾不存在!";                     return

LaunchMan : start and check version and update 自訂啟動更新程式

圖片
  說明: 這支程式的用途就是和你的程式擺在一起,然後將這支程式設定成你的程式啟動用。 這支程式啟動時,會依照 INI檔的設定去幫你檢查程式版本。 如果有版本異動時,會提醒使用者要更新程式。 支援: 支援HTTP和FTP協定,可以依照你的需求把更新檔案放在WEB server或是FTP server上 環境: 僅能運行在Windows 下 由 dotNet 4.5 開發,需要作業系統支援 dotNet 4.5 的程式執行, 如果沒有,可以 下載安裝 dotNet FrameWork 4.5 套件 。 下載: LaunchMan 範例: 我有一個 kiosk 程式 main.exe 放在  C:\APP\KioskPatch 桌面上有個程式捷徑連結到 C:\APP\KioskPatch\main.exe 現在,我們把 LaunchMan 程式和這個 Kiosk 程式放在一起 (不放一起其實也可以,這樣比較好管) 修改桌面捷徑改連結到 C:\APP\KioskPatch\LaunchMan.exe 而更新檔案 有兩個 一個是 version.txt , 另一個為壓縮檔( 例如KioskPatch.ZIP ) 都放在我的網站 www.mycomp.com.tw/Patch/down/ 下 然後在 C:\APP\KioskPatch 下也放一個 version.txt 這兩個 version.txt 內容要不一樣,當內容不同時,才會啟動更新 然後,修改 INI 檔案(範例在下方) [Application] ;使用的背景圖片,自訂圖片,該圖片必須有DPI資訊才能正常顯示 LogoPicture=splash2.png ;淡入效果時間 ;Second unit FadeINDuration=3 FadeOutDuration=1 ;讓背景透明 BackgroundTransparency=true ;顯示訊息文字顏色/位置 MessageTextColor=#0000FF MessageLeftPosition=10 messageTopPosition=130 Title="Kiosk Sell System with .Net" TitleTextColor=#FF0000 TitleLeftPosition=50

C# csv 檔匯入 List 一行搞定

圖片
  我有一個CSV 檔案(data.csv),內容大約如下: 編號,姓名,性別 T001,林黃頻,男 T002,江國勘,男 T003,劉簿相,男 所以,依照欄位我會定義出一個儲存用類別(Field.cs): namespace MyApp {     class Field     {         public Field(string Line)         {             var sp = Line.Split(',');             UserNo = sp[0];             UserName = sp[1];             Gender = sp[2];         }         public string UserNo { get; set; }         public string UserName { get; set; }         public string Gender { get; set; }                 public override string ToString()         {             string output =  UserNo+ "\t" + UserName + "\t" + Gender + "\r\n";             return output;         }     } } 主要程式碼其實只要一行就可以搞定(不含using) using System.IO ‧ ‧ ‧ // 這一行讀入CSV併排除第一行標題 List<Field> content = File.ReadAllLines("D:\\data.csv", Encoding.Default).Select(line => new Data1(line)).Skip(1).ToList(); // 顯示出來 foreach(Data1 item in totl) {      textBox1.Text += item.ToString(); } ‧ ‧ ‧

頒獎用程式【分享】

圖片
  頒獎用顯示程式(含原始碼 pbw) 開發工具:Powerbuilder 10.5 版本:2.0.2.6 版本時間:2019/3/5 平台:Windows 下載位置: https://drive.google.com/file/d/1XX8SDzyeHaZxvOAlmmPOmWu4JJP1dkEp/view?usp=sharing 程式說明: 因應公司於大型會場需要頒獎時,能將得獎者名單顯示在會場投射螢幕上,由於公司參加者眾多超過300人,部分獎項得獎者可能多達50人以上,若主持人連續抽出得獎者並說出得獎者名字或編號時,現場吵雜情況下,得獎者會不知道自己已經得獎,因此透過投射螢幕可以把得獎者清單列於畫面上,讓得獎者不會錯過。

EXCEL Convert to CSV File Tool

Tool Name:  EXCEL2CSV.exe Verson: 1.0.0.0 Development Environment: MS-Visual Studio 2017 FrameWork: .Net 3.5 Description: this is a console tool to convert Excel files (eg: xls , xlsx , csv) to a uniform comma separated format data file (.CSV) without quotes between each field. if excel cell data include Enter/TAB characters or double will be replace by empty. if excel cell data include comma character , it will be replace by dot . this tool is third party for data process application (eg: EDI)to import pure data. this tool package include donet FrameWork 3.5 installer. OS: Windows XP/Windows 7/Windows 8/Windows 10 download: there usage: excel2csv.exe [full source filename] [full destination file name] if source file name or destination file name not with full path , it will use caller environment path locate. if destination file failed to create is an error on convert duration. full source file name or full destination file name need warp by double-Quotes if it include space. example: