แสดงข้อมูล Memory CPU Disk ด้วย C# EP.2

สำหรับ EP นี้เราก็มาถึงวิธีการดึงข้อมูลการใช้งาน CPU กัน เพื่อไม่ให้เป็นการเสียเวลา เรามาเริ่มกันเลย สำหรับการดึงข้อมูลนั้น เราก็สามารถใช้งาน object PerformanceCounter ได้เหมือนเดิม โดยจะต้องระบุ parameter ที่จำเป็นดังนี้ และเมื่อทดลองเรียกใช้งาน จะปรากฏผลดังภาพ จะเห็นว่าผลลัพธ์ออกมาเป็น 0 เนื่องจากค่าที่ได้ จะเป็นค่าที่เกิดจากการเปรียบเทียบกับค่าก่อนหน้า การเรียกใช้งานครั้งแรกจึงแสดงผลเป็น 0 เสมอ เราจึงจำเป็นต้องหน่วงเวลาไว้ประมาณหนึ่ง จากนั้นจึงเรียกใช้งานอีกครั้งจึงจะได้ค่าที่ตรงตามความเป็นจริง ดังตัวอย่างต่อไปนี้ จากตัวอย่าง หลังเรียกใช้งานครั้งแรก จะหน่วงเวลาไว้ 1 วินาที จึงเรียกใช้งานอีกครั้ง ซึ่งเทคนิคนี้ เอกสารของทาง Microsoft ก็ได้ระบุเอาไว้ ดังนี้ If the calculated value of a counter depends on two counter reads, the first read operation returns 0.0. Resetting the performance counter properties to specify a different counter is equivalent to creating a new performance counter, and the first read operation using the new properties returns 0.0. The recommended delay time between calls to the NextValue method is one second, to allow the counter to perform the next incremental read. เพื่อให้เห็นภาพที่ชัดขึ้น ผมจะใช้การวนลูปเข้ามาช่วยเพื่อให้เห็นการทำงานของ CPU ที่เป็นจริงมากยิ่งขึ้น ดังโค้ดตัวอย่าง โดยผลลัพธ์จากโค้ดด้านบน ก็จะแสดงการทำงานของ CPU ทุก 1 วินาทีเป็นจำนวน 10 ครั้ง จะเห็นว่าการดึงข้อมูลการใช้งาน CPU ไม่ได้ยุ่งยาก แค่มีทริคนิดเดียวตรงที่จะต้องมีการเรียก NextValue() 2 ครั้ง และต้องมีการหน่วงเวลาก่อนการเรียกครั้งที่ 2 ก็จะได้ผลลัพธ์ที่ถูกต้อง แล้วพบกันใน EP หน้า สวัสดีครับ อ้างอิง https://stackoverflow.com/questions/278071/how-to-get-the-cpu-usage-in-c https://stackoverflow.com/questions/2181828/why-the-cpu-performance-counter-kept-reporting-0-cpu-usage https://gavindraper.com/2011/03/01/retrieving-accurate-cpu-usage-in-c/ https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.performancecounter.nextvalue?view=dotnet-plat-ext-5.0

Read More »

แสดงเครื่องหมายถูกใน Crystal Report

นักพัฒนาหลายๆ ท่านที่ออกรายงานด้วย Crystal Report อาจจะมีความต้องการแสดงสัญลักษณ์เครื่องหมายต่างๆ บนตัวรายงาน แต่ไม่มีเครื่องมือที่ออกแบบมาเพื่อการนี้โดยตรง แต่เราสามารถทำได้ด้วยวิธีการดังต่อไปนี้ 1. สร้าง Formula Field และกำหนดชื่อให้เรียบร้อย 2. ป้อนคำสั่ง Chr(254) จากนั้น Save 3. เพิ่ม formula field ที่เพิ่งสร้างลงไปในรายงาน และเปลี่ยนฟอนต์ให้เป็น “Windings” 4. เมื่อทดสอบดูรายงาน ก็จะแสดงเป็นเครื่องหมายถูกภายในกล่องสี่เหลี่ยมดังภาพ 5. นอกจากนี้เราสามารถกำหนดให้แสดงผลเป็นรูปแบบอื่นๆ ได้ด้วยการแก้ไขโค้ดเป็นอย่างอื่น เช่น 6. เมื่อเราทราบโค้ดของสัญลักษณ์ที่เราต้องการแล้ว เราก็สามารถควบคุมการแสดงผลด้วยการเพิ่มเงื่อนไขใน Formula Field ดังตัวอย่าง อ้างอิง https://stackoverflow.com/questions/279907/checkbox-in-a-crystal-report

Read More »

แสดงข้อมูล Memory CPU Disk ด้วย C# EP.1

ในช่วงที่ผ่านมาผู้เขียนได้รับมอบหมายให้พัฒนาเครื่องมือสำหรับมอนิเตอร์การใช้งานทรัพยากรต่างๆ บน Server ที่ให้บริการลูกค้า ทั้งในส่วน Memory CPU และ Disk โดยโจทย์คือพัฒนา Service ขึ้นมาตัวนึงด้วยเครื่องมือที่เราใช้งานกันอยู่แล้วคือ Visual Studio.NET ด้วยภาษ C# สำหรับอ่านทรัพยากรต่างๆ บน Server แล้วจึงเขียนค่าเหล่านั้นลงไฟล์ จากนั้นจะมีเครื่องมืออีกตัวเข้ามาอ่านไฟล์ดังกล่าวแล้วนำไปแสดงผลเป็นกราฟในรูปแบบที่ต้องการต่อไป เริ่มต้นเรามาดูวิธีการดึงข้อมูลหน่วยความจำ Available (คงเหลือ) กันก่อน ซึ่งโชคดีที่ .NET มี object ตัวนึงที่ชื่อ PerformanceCounter ที่จะคอยเก็บข้อมูลต่างๆ ของ Server และเราสามารถดึงค่าต่างๆ มาใช้งานได้โดยการระบุ parameter ที่เราต้องการ อย่างเช่นในกรณีของหน่วยความจำ จะต้องระบุ parameter 2 ตัว คือ “Memory”, “Available MBytes” ดังโค้ดตัวอย่าง โดยเราจะดึงข้อมูลออกมาผ่านเมทธอด NextValue() อย่างเช่น เมื่อทดลองรันโค้ดดังกล่าว โดยผู้เขียนได้ทดลองสร้างโปรเจ็คแบบ Console Application ได้ผลลัพธ์ดังต่อไปนี้ โดยข้อมูลที่ได้อยู่ในรูปแบบ Megabytes ดังนั้นถ้าต้องการให้อยู่ในรูปแบบ Gigabytes จะต้องนำไปหารด้วย 1,024 เสียก่อน (ในส่วนนี้ผู้เขียนไม่แน่ใจว่า ในทางเทคนิคควรจะหารด้วย 1,024 หรือ 1,000) แต่ด้วยข้อจำกัด เราไม่สามารถหาหน่วยความจำทั้งหมดจาก PerformanceCounter โดยจะต้องดึงข้อมูลผ่านวิธีการอื่น นั่นคือการเรียกผ่าน Windows API Function และต้องประกาศ Structure เพิ่มเติมเพื่อให้รองรับข้อมูลที่ Windows API ส่งกลับมา ดังนี้ และตัวอย่างวิธีการเรียกใช้งานฟังก์ชัน เมื่อนำโค้ดไปทดสอบ จะได้ผลลัพธ์ดังภาพ โดยข้อมูลที่ได้จากฟังก์ชันนี้จะเป็นหน่วย byte ถ้าเราต้องการแปลงให้เป็น gigabyte ก็จะต้องหารด้วย (1024 * 1024 * 1024) ซึ่งก็จะได้ผลลัพธ์ประมาณ 4 gigabytes และจากโค้ดในส่วนแรกที่ใช้งานหน่วยความจำคงเหลือ เมื่อนำมาผนวกกัน และมีการคำนวณอีกนิดหน่อย ก็จะได้ผลลัพธ์ดังภาพ ตัวอย่างโค้ดทั้งหมด สำหรับวิธีการดึงหน่วยความจำของเครื่องก็คงจบลงเพียงเท่านี้ ครั้งหน้าเราจะมาดูวิธีการดึงข้อมูลการใช้งาน CPU กัน สวัสดีครับ อ้างอิง http://www.infoworld.com/article/3008626/how-to-work-with-performance-counters-in-c.html http://stackoverflow.com/questions/105031/how-do-you-get-total-amount-of-ram-the-computer-has

Read More »

การสลับข้อมูลจาก Column เป็น Row ใน Excel

ท่านผู้อ่านที่ใช้งาน Excel น่าจะเคยเจอปัญหาหรือมีความต้องการที่ว่า มีข้อมูลที่มีลักษณะเป็น Column แต่ต้องการย้ายให้มาแสดงในรูปแบบ Row ถ้าต้อง copy แล้วมา paste ทีละตัวคงไม่สะดวกอย่างแน่นอน แต่ Excel ได้จัดเตรียมเครื่องมือสำหรับแก้ปัญหาเหล่านี้เอาไว้แล้ว ลองไปดูกันเลย 1.สมมติเรามีข้อมูลชื่อเดือนเก็บอยู่ในเ Excel ในคอลัมน์เดียวกันเรียงกันลงมาดังรูป 2. เลือกข้อมูลที่ต้องการย้ายทั้งหมดแล้ว copy เก็บไว้ 3. ไปยัง sheet หรือ cell ที่ต้องการ จากนั้นคลิกขวา ใต้เมนู Paste Options เลือกไอคอนที่ 4 (Transpose) 4. ก็จะได้ข้อมูลมาอยู่ในรูปแบบแนวนอน ดังรูป 5. จากข้อ 2 ถ้าเราเลือกเมนู Paste Special… จะปรากฏ dialog ดังรูป ให้เลือก Transpose จากกดปุ่ม OK เพื่อยืนยัน ก็จะได้ผลลัพธ์เหมือนกัน นอกจากนี้ เรายังสามารถใช้ฟังก์ชัน TEXTJOIN() โดยฟังก์ชันนี้จะทำหน้าที่รวมข้อความจากช่วงข้อมูลหรือข้อความหลายๆ ส่วนเข้าด้วยกันและสามารถระบุตัวคั่นระหว่างข้อมูลได้ด้วย โดยฟังก์ชันนี้จะมี parameter สามส่วนหลักๆ คือ พารามิเตอร์ คำอธิบาย ตัวคั่น สตริงข้อความไม่ว่าจะเป็นสตริงข้อความว่าง, ประกอบอักขระอย่างน้อย 1 ตัวในอัญประกาศ หรือมีการอ้างอิงไปยังสตริงข้อความที่ถูกต้อง ถ้ามีตัวเลขอยู่ก็ถือว่าเป็นข้อความ ignore_empty ถ้าเป็นค่า TRUE ให้ละเว้นเซลล์ว่าง text1 รายการข้อความที่จะถูกรวมเข้าด้วยกัน สตริงข้อความ หรืออาร์เรย์ของสตริง เช่น ช่วงเซลล์ [text2, …] รายการข้อความเพิ่มเติมที่จะถูกรวมเข้าด้วยกัน สามารถมีอาร์กิวเมนต์ข้อความสำหรับรายการข้อความได้สูงสุด 252 รายการ รวมถึง text1 แต่ละรายการสามารถเป็นสตริงข้อความหรืออาเรย์ของสตริงได้ เช่น ช่วงเซลล์ ตัวอย่างการใช้งานดังรูป จะเห็นว่าถ้าเป็นวิธีใช้ฟังก์ชัน TEXTJOIN ข้อมูลจะถูกนำมารวมในฟิลด์เดียวกัน ซึ่งก็ขึ้นอยู่กับการเลือกนำไปประยุกต์ใช้ ว่าวิธีการไหนจะเหมาะกับงานตัวเอง ก่อนจะจากไป ขอแถมอีกวิธีบน MS Word เผื่อใครอยากทำอะไรคล้ายๆ แบบนี้ วิธีการคือ 1. ข้อมูลแยกกันอยู่คนละบรรทัด ดังตัวอย่าง 2. เลือกข้อมูลทั้งหมด จากนั้นกด Ctrl + H จะปรากฏ dialog “Find and Replace” ดังรูป 3. ป้อน ^p ในช่อง Find what: และป้อน , ลงในช่อง Replace with: จากนั้นกด Replace All ข้อมูลทั้งหมดจะถูกยุบมาอยู่ในบรรทัดเดียวกัน โดยมี , คั่นอยู่ระหว่างข้อมูลแต่ละบรรทัด ดังรูป ซึ่งเทคนิคนี้ก็คือการแทนที่อักขระขึ้นบรรทัดใหม่ ด้วย , นั่นเอง ก็หวังเป็นอย่างยิ่งว่าบทความนี้น่าจะมีประโยชน์ต่อผู้อ่านไม่มากก็น้อย จนกว่าจะพบกันใหม่ สวัสดีครับ อ้างอิง • https://superuser.com/questions/240858/convert-a-column-into-a-comma-separated-list• http://www.saranitus.com/2018/10/ย้ายข้อมูลจาก-row-เป็น-column-ใน-excel-2016.html• https://www.it-guides.com/training-a-tutorial/office-tutorial/transpose-microsoft-excel-2007• https://support.microsoft.com/th-th/office/textjoin-ฟังก์ชัน-textjoin-357b449a-ec91-49d0-80c3-0e8fc845691c

Read More »

การประยุกต์ใช้ Windows Command และ Batch File ในการจัดการไฟล์

สืบเนื่องจากผู้เขียนได้รับโจทย์มาจากเพื่อนร่วมงาน แต่ยังไม่ได้เริ่ม งานนั้นก็ถูกยกเลิกไปอย่างรวดเร็ว แต่ในใจก็มีโซลูชันอยู่แล้วว่าจะจัดการอย่างไร จึงอยากมาบันทึกเก็บไว้ เผื่อผู้อ่านท่านอื่นๆ อาจจะนำไปใช้ประโยชน์ได้ไม่มากก็น้อย โจทย์ที่ว่าก็คือ ผู้ใช้มีไฟล์รูปภาพจำนวนหนึ่ง ประมาณหลายพันไฟล์ ต้องการแยกเฉพาะรูปที่ต้องการออกมาจำนวนหนึ่ง โดยรูปที่ต้องการมีเป็นรายการอยู่ในไฟล์ excel วิธีการที่ง่ายที่สุดคือ เปิดไฟล์ excel นั้นขึ้นมา แล้วก็ไล่หาไฟล์รูปที่ต้องการทีละไฟล์แล้วย้ายไปไว้โฟลเดอร์อื่นจนครบ ถ้าไฟล์ที่ต้องการมีจำนวนไม่มากนัก วิธีการนี้ก็สะดวกและไม่ได้ใช้เวลานานมากจนเกินไป แต่ถ้าไฟล์ที่ต้องการมีเป็นหลักร้อยหรือพัน วิธีนี้คงไม่สะดวกแน่ๆ ผู้เขียนจึงขอแนะนำการใช้ Command และ Batch File เพื่อแก้ปัญหานี้ ก่อนอื่นเราไปซ้อมมือกันก่อน สมมติว่าไฟล์ต้นฉบับอยู่ใน d:\sources และต้องการย้ายไฟล์ที่ต้องการไปไว้ที่ d:\destinations ให้เราเปิด cmd ขึ้นมา จากนั้นพิมพ์คำสั่ง copy d:\sources\wp_ss_20130130_0001.png d:\destinations คำสั่งนี้จะเป็นการ copy ไฟล์ wp_ss_20130130_0001.png ที่อยู่ใน d:\sources ไปยัง d:\destinations ซึ่งเราสามารถใช้คำสั่งนี้จากที่ไหนของเครื่องก็ได้ แต่ถ้าเราอยู่ในโฟลเดอร์ sources อยู่แล้ว เราสามารถระบุเฉพาะชื่อไฟล์เพียงอย่างเดียวก็ได้ เช่น copy wp_ss_20130130_0001.png d:\destinations จากความรู้ด้านบนจะเป็นการ copy ไฟล์ทีละไฟล์ ถ้าต้องการ copy หลายๆ ไฟล์ เราจะใช้สิ่งที่เรียกว่า batch file เข้ามาช่วย โดยทำตามขั้นตอนดังต่อไปนี้ 1. เปิด notepad ขึ้นมา และพิมพ์คำสั่ง copy wp_ss_20130130_0001.png d:\destinationscopy wp_ss_20130130_0001.png d:\destinations จากนั้นเซฟเป็นไฟล์ชื่อ copy.bat ไว้ใน d:\sources นามสกุลไฟล์จะต้องเป็น .bat เท่านั้น ไม่ใช่ .txt 2. กลับไปที่ command และพิมพ์คำสั่ง copy.bat จะเห็นว่า copy.bat เป็นการทำคำสั่งที่อยู่ภายใน batch file ถึงตรงนี้แล้วท่านผู้อ่านน่าจะพอเห็นแนวทางแล้วว่าเราจะ copy เฉพาะไฟล์ที่อยู่ใน excel ได้อย่างไร นั่นคือเราจะไปสร้างชุดคำสั่งการ copy จากไฟล์ excel นั่นเอง 3. กลับไปที่ไฟล์ excel จะเห็นว่าชื่อไฟล์อยู่ในคอลัมน์ A ไปที่คอลัมน์ B และพิมพ์ =”copy ” & A1 & ” d:\destinations” 4. copy คำสั่งลงมาจนครบทุกไฟล์ 5. copy คำสั่งในคอลัมน์ B ทั้งหมดไปวางไว้ในไฟล์ copy.bat และเซฟ 6. ไปที่ command และพิมพ์คำสั่ง copy.bat อีกครั้ง เป็นอันเสร็จสิ้น หวังว่าบทความประเดิมบล็อกของผู้เขียน น่าจะมีประโยชน์กับผู้อ่านทุกท่านที่หลงเข้ามาไม่มากก็น้อย จนกว่าจะอยากเขียนเรื่องใหม่ สวัสดีครับ

Read More »