網誌

【程式設計-C#】開啟CSV資料檔案(.csv)並處理資料

【教學目的】

我們要讀入如下的資料,此資料檔以逗點分隔資料,我們要將資料一行一行讀出來(放在一個字串),並且以逗點方式將資料分開(字串陣列)。

【第一個畫面】未分割資料

【第二個畫面】分割資料

成績檔下載:成績檔

陳X鈴,75,70,75,75
劉X如,75,70,75,75
王X玲,75,70,75,75
黃X如,80,85,90,60
林X君,65,80,95,70
張X惠,65,80,70,65
王X琪,80,70,65,75
余X芬,70,80,50,70
周X誼,80,80,90,65
黃X儀,80,80,90,65
陳X妙,80,80,75,75
黃X蓮,80,80,85,65
顏X芳,80,70,90,65
張X洲,75,80,90,75
王X聰,65,70,75,45
胡X虹,20,80,70,65
~~以下 省略~~

【程式碼】

專案檔下載:openCSV

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            tbResult.Text = "";
            // 建立一個OpenFileDialog物件
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            // 設定OpenFileDialog屬性
            openFileDialog1.Title = "選擇要開啟的CSV檔案";
            openFileDialog1.Filter = "CSV Files (.csv)|*.csv|All Files (*.*)|*.*";
            openFileDialog1.FilterIndex = 1;

            openFileDialog1.Multiselect = true;

            // 喚用ShowDialog方法,打開對話方塊

            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {                
                string theFile = openFileDialog1.FileName; //取得檔名
                Encoding enc = Encoding.GetEncoding("big5"); //設定檔案的編碼
                string[] readText = System.IO.File.ReadAllLines(theFile, enc); //以指定的編碼方式讀取檔案
                foreach (string s in readText)
                {
                    tbResult.Text += s + "\r\n";
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            tbResult.Text = "";
            // 建立一個OpenFileDialog物件
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            // 設定OpenFileDialog屬性
            openFileDialog1.Title = "選擇要開啟的CSV檔案";
            openFileDialog1.Filter = "CSV Files (.csv)|*.csv|All Files (*.*)|*.*";
            openFileDialog1.FilterIndex = 1;

            openFileDialog1.Multiselect = true;

            // 喚用ShowDialog方法,打開對話方塊

            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string theFile = openFileDialog1.FileName; //取得檔名
                Encoding enc = Encoding.GetEncoding("big5"); //設定檔案的編碼
                string[] readText = System.IO.File.ReadAllLines(theFile, enc); //以指定的編碼方式讀取檔案
                foreach (string s in readText)
                {
                    string[] ss = s.Split(','); //將一列的資料,以逗號的方式進行資料切割,並將資料放入一個字串陣列
                    tbResult.Text += ss[0] + "  " + ss[1] + "  " + ss[2] + "  " + ss[3] + "  " + ss[4] + "\r\n";

                    //資料分別在取出的字串陣列裏,姓名->ss[0], 成績1->ss[1], 成績2->ss[2], 成績3->ss[3], 成績4->ss[4]
                }
            }

        }
    }
}

 

【一維字串陣列-字串物件】

 

 

底下的改版程式係將讀出來的資料,轉成浮點數後,放入一個2維的浮點數陣列,然後,將總分加總後,放到最後一個欄位(每列)。

       private void button2_Click(object sender, EventArgs e)
        {
            tbResult.Text = "";
            // 建立一個OpenFileDialog物件
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            // 設定OpenFileDialog屬性
            openFileDialog1.Title = "選擇要開啟的CSV檔案";
            openFileDialog1.Filter = "CSV Files (.csv)|*.csv|All Files (*.*)|*.*";
            openFileDialog1.FilterIndex = 1;

            openFileDialog1.Multiselect = true;

            // 喚用ShowDialog方法,打開對話方塊

            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string theFile = openFileDialog1.FileName; //取得檔名
                Encoding enc = Encoding.GetEncoding("big5"); //設定檔案的編碼
                string[] readText = System.IO.File.ReadAllLines(theFile, enc); //以指定的編碼方式讀取檔案

                string[] name = new string[readText.Length];//宣告一個1維字串陣列,來儲存所有的姓名
                double[][] allData = new double[readText.Length][4]; //宣告一個2維double陣列,用來儲存所有的成績資料,第一維的大小是資料的列數(筆數)
                int line = 0; //表第幾行(第幾列,每一列為一個學生的資料)
                foreach (string s in readText)
                {
                    string[] ss = s.Split(','); //將一列的資料,以逗號的方式進行資料切割,並將資料放入一個字串陣列
                    name[line] = ss[0]; //切出來的字串,第0個元素是姓名
                    allData[line][0] = double.Parse(ss[1]);
                    allData[line][1] = double.Parse(ss[2]);
                    allData[line][2] = double.Parse(ss[3]);
                    allData[line][3] = double.Parse(ss[4]);
                    allData[line][4] = allData[line][0] + allData[line][1] + allData[line][2]+ allData[line][3]; //將每個人的成績加起來放在最後一欄

                    tbResult.Text += name[line] + "  " + allData[line][0] + "  " + allData[line][1] + "  " + allData[line][2] + "  " + allData[line][3] + "  " + allData[line][4] + "\r\n";

                    line++; //進行下一筆資料的處理
                    //資料分別在取出的字串陣列裏,姓名->ss[0], 成績1->ss[1], 成績2->ss[2], 成績3->ss[3], 成績4->ss[4]
                }
            }

        }

 

【WordPress教學】Mail機制:Mail外掛與外部SMTP設定

一個網站要能夠向外發出訊息,基本上要透過mail機制,若主機本身有mail伺服器,且正常運作的話,就能夠透過WordPress內建的mail功能對外發出郵件,若主機mail伺服器未建置或運作不正常,那麼,我們可以透過外部的mail伺服器:gmail、hotmail、yahoo,或者學校的mail主機來做為郵件的發送伺服器,替代WordPress內建的mail功能。

SMTP (Simple Mail Transfer Protocol)外掛:WP-Mail-SMTP(推薦)、SMTP Mailer、Gmail SMTP等。

最簡單的mail主機是沒有加密的,僅透過帳號密碼的驗證就能發送郵件。

另一種是支援加密協定:SSL (port 465) &TLS(port 587)。

 

Google的二步驟驗證

近來,資訊安全的提升,帳號的登入採用了「二步驟驗證」,除了密碼本身外,另需要再加上一個一次性的驗證碼,此一次性的驗證碼可透過mail、簡訊或驗證碼app發送。

以gmail為例,若是使用Two factors,二步驟驗證,必須取得應用程式密碼,否則程式無法取得驗證碼,無法通過smtp主機的驗證來傳送郵件。

步驟:

1. 登入你的gmail帳號
2. 打開網頁 https://security.google.com/settings/security/apppasswords
3. 產生應用程式密碼,選擇其他(自訂名稱)
4. 產生16個字元的應用程式密碼,此密碼用來替代原本的帳號密碼。

機器人在看你的履歷》除了視覺化和超連結,新時代履歷需要 8 招變身! | VidaOrange

1. 準備好紙本履歷

2. 在履歷中善用圖表來量化你的成就

3. 短期的工作經歷不一定不好,但要選擇「相關」的經歷再列入履歷

4. 別漏掉任何跟工作有關的連結

5. 分別準備一份給「電腦」的履歷,和一份給「人」的履歷

6. 試著尋求他人幫助

7. 如果和職缺有關聯性,也可以提及你的嗜好

8. 考慮做一個履歷影片

 

來源: 機器人在看你的履歷》除了視覺化和超連結,新時代履歷需要 8 招變身! | VidaOrange