在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#文件解析和处理 → 解析HTML文件并插入数据库保存起来

解析HTML文件并插入数据库保存起来

C#文件解析和处理

下载此实例
  • 开发语言:C#
  • 实例大小:0.10M
  • 下载次数:37
  • 浏览次数:1430
  • 发布时间:2018-07-17
  • 实例类别:C#文件解析和处理
  • 发 布 人:luo7701167
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 数据库 文件 HTML 解析 保存

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Web;
using System.Net;
using System.Text.RegularExpressions;//正则表达式
using System.Data.SqlClient;

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

        #region 定义FMC文件变量

        public string Programname = string.Empty;
        public string Processtime = string.Empty;
        public string Endtime = string.Empty;
        public string Processdate = string.Empty;
        public string Filename = string.Empty;

        #endregion

        #region Public Function

        public static string GetHtmlStr(string url, string encoding)
        {
            string htmlStr = "";
            try
            {
                if (!String.IsNullOrEmpty(url))
                {
                    WebRequest request = WebRequest.Create(url);            //实例化WebRequest对象  
                    WebResponse response = request.GetResponse();           //创建WebResponse对象  
                    Stream datastream = response.GetResponseStream();       //创建流对象  
                    Encoding ec = Encoding.Default;
                    if (encoding == "UTF8")
                    {
                        ec = Encoding.UTF8;
                    }
                    else if (encoding == "Default")
                    {
                        ec = Encoding.Default;
                    }
                    StreamReader reader = new StreamReader(datastream, ec);
                    htmlStr = reader.ReadToEnd();                  //读取网页内容  
                    reader.Close();
                    datastream.Close();
                    response.Close();
                }
            }
            catch { }
            return htmlStr;
        }

        public static void WriteLogRecord()
        {
            StreamWriter write = null;
            //string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //年-月-日 时:分:秒 
            string LogName = "Record.log";//日志名称   
            string LogPath = System.Windows.Forms.Application.StartupPath   "//Record//";//日志存放路径  
            string Log = LogPath   LogName;//路径   名称
            if (!File.Exists(Log))//是否存在   
            {
                Directory.CreateDirectory(LogPath);//创建文件夹              
                write = File.CreateText(LogName);// 创建日志           
            }
            else
            {
                write = File.AppendText(Log);//追加,添加错误信息
            }
            //TimeSpan ts = EndTime.Subtract(StartTime);
            //write.WriteLine(EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
            //write.WriteLine("系统开始运行时间:"   StartTime.ToString());
            //write.WriteLine("系统结束运行时间:"   EndTime.ToString());
            //rite.WriteLine("系统总运行时间:"   ts.ToString());
            write.WriteLine(GetHtmlStr(@"C:\Users\lucaslau\Desktop\HTML读取\WORK_070717.htm", "Default"));
            write.WriteLine("\r\n#########################################");
            write.Flush();
            //write.Close();
            write.Dispose();
        }

        public bool Check_BIMA_IE_Data_Date(string UploadFileName)
        {
            SqlConnection cnn = new SqlConnection();
            cnn.ConnectionString = "Data Source = 172.23.134.36; uid = 3tec; pwd =lager; database = Edgeband_Program";
            cnn.Open();
            string sql = string.Empty;
            sql = sql   "SELECT [File_Name] FROM [Edgeband_Program].[dbo].[BIMA_Machine_Time_Data](NOLOCK) WHERE [File_Name] = '"   UploadFileName   "'";
            // MessageBox.Show(sql);
            SqlCommand cmd1 = new SqlCommand(sql, cnn);
            SqlDataAdapter da = new SqlDataAdapter();//SqlDataAdapter从数据库中获取数据,并将其存储在DataSet中
            da.SelectCommand = cmd1;
            DataSet ds1 = new DataSet();
            da.Fill(ds1);
            int i = cmd1.ExecuteNonQuery(); //执行并返回受影响的行数
            if (ds1.Tables[0].Rows.Count != 0)
            {
                cnn.Close();
                return true;
            }
            else
            {
                //MessageBox.Show( "BIMA文件: "  UploadFileName   "已经存在数据库中!", "提醒");
                cnn.Close();
                return false;
            }
        }

        #endregion

        private void Form1_Load(object sender, EventArgs e)
        {           
            //MessageBox.Show(GetHtmlStr(@"C:\Users\lucaslau\Desktop\HTML读取\WORK_070717.htm", "UTF8"));            
            //this.listBox1.Items.Add(GetHtmlStr(@"C:\Users\lucaslau\Desktop\HTML读取\WORK_070717.htm", "UTF8"));
            //WriteLogRecord();
            //1.将Form属性ShowInTaskbar改为false,这样程序将不会在任务栏中显示。
            //2.将Form属性WindowState选择为 Minimized,以便起来自动最小化隐藏。
            string startup = Application.ExecutablePath;       //取得程序路径   
            int pp = startup.LastIndexOf("\\");
            startup = startup.Substring(0, pp);
            string icon = startup   "\\auto.ico";
            //3.一定为notifyIcon1其设置图标,否则无法显示在通知栏。或者在其属性中设置
            notifyIcon1.Icon = new Icon(icon);
        }
        #region 定义委托
        //define a delegate
        private delegate void testDelegate(string str);

        //define a method which match the above delegae
        private void testMethod(string str)
        {
            // query the control's(here is lstResults) InvokeRequired
            if (this.lsInfo.InvokeRequired)
            {
                //instansiate a delegate with the method
                testDelegate myDelegate = new testDelegate(testMethod);
                //Invoke delegate
                this.lsInfo.Invoke(myDelegate, str);
            }
            else
            {
                //InvokedRequired is false, so call the control directly
                this.lsInfo.Items.Add(str);
            }
        }
        #endregion


        private void AutoInsertData()
        {
            int start = 0;
            int end = 0;
            int recordnum = 0;


            List<string> P_name = new List<string>();
            List<string> P_time = new List<string>();
            List<string> E_time = new List<string>();
            List<string> P_date = new List<string>();
            //获取M:\MES\Machine\BIMA当天的文件
            string strDate = DateTime.Now.ToString("yyyyMMdd");
            string path = @"M:\MES\Machine\BIMA\" strDate "1520";
            if (!Directory.Exists(path))
            {
                this.testMethod(DateTime.Now.ToString()   "  文件夹【"   path   "】不存在!!!!");
                return;
            }
            DirectoryInfo fileName = new DirectoryInfo(path);
            FileInfo[] fileInfo = fileName.GetFiles();
        
               
                 foreach (FileInfo NextFile in fileInfo)
                 {                  
                     Filename = NextFile.Name;
                     string fullpath = path   @"\"   Filename;
                     //str.Add(a);
                     //判断数据库是否已经存在
                    string  sqlGetFileName = @"SELECT [File_Name] FROM [Edgeband_Program].[dbo].[BIMA_Machine_Time_Data](NOLOCK) WHERE [File_Name] = '"   Filename   "'";
                     if (DataBaseHelper.GetDataSet(sqlGetFileName).Tables[0].Rows.Count <= 0)
                     {                        
                             string[] str = System.IO.File.ReadAllLines(fullpath);
                             for (int i = 0; i < str.Length; i  )
                             {
                                 List<string> CL = new List<string>();
                                 CL.Add("<tbody>");
                                 CL.Add("</tbody>");
                                 string[] strcl = CL.ToArray();
                                 for (int j = 0; j < strcl.Length; j  )
                                 {
                                     int len = strcl[j].Length;
                                     #region 获取起始终点位置
                                     MatchCollection mc = Regex.Matches(str[i], strcl[j]);
                                     foreach (Match m in mc)
                                     {
                                         if (strcl[j].ToString() == "<tbody>")
                                         {
                                             start = i;
                                         }
                                         if (strcl[j].ToString() == "</tbody>")
                                         {
                                             end = i;
                                         }
                                     }
                                     #endregion
                                 }
                             }
                             recordnum = (end - 3 - start - 8) / 7;

                             for (int l = 0; l < recordnum; l  )
                             {
                                 Programname = str[start   10   7 * l].ToString().Remove(0, 26).ToString();
                                 Programname = Programname.Substring(0, Programname.Length - 5);
                                 P_name.Add(Programname);
                                 //MessageBox.Show(Programname);
                                 Processtime = str[start   11   7 * l].ToString().Remove(0, 11).ToString();
                                 Processtime = Processtime.Substring(0, Processtime.Length - 5);
                                 P_time.Add(Processtime);
                                 //MessageBox.Show(Processtime);
                                 Endtime = str[start   12   7 * l].ToString().Remove(0, 11).ToString();
                                 Endtime = Endtime.Substring(0, Endtime.Length - 5);
                                 E_time.Add(Endtime);
                                 //MessageBox.Show(Endtime);
                                 Processdate = str[start   13   7 * l].ToString().Remove(0, 11).ToString();
                                 Processdate = Processdate.Substring(0, Processdate.Length - 5);
                                 P_date.Add(Processdate);
                                 //MessageBox.Show(Processdate);
                             }

                             for (int m = 0; m < recordnum; m  )
                             {
                                 #region Insert Data
                                 SqlConnection cnn = new SqlConnection();
                                 cnn.ConnectionString = "Data Source = 172.23.134.36; uid = 3tec; pwd =lager; database = Edgeband_Program";
                                 //cnn.ConnectionString = "Data Source = (local); uid = sa; pwd =123; database = Edgeband_Program";
                                 cnn.Open();
                                 string sql = string.Empty;
                                 sql = sql   "INSERT INTO dbo.BIMA_Machine_Time_Data(Insert_Time,File_Name,Program_Name,Process_Time,End_Time,Process_Date) VALUES("   "GETDATE()"   ",";
                                 sql = sql   "N'"   Filename   "',N'"   P_name[m].ToString()   "',N'"   P_time[m].ToString()   "',N'"   E_time[m].ToString()   "',N'"   P_date[m].ToString()   "')";
                                 //MessageBox.Show(sql);
                                 SqlCommand cmd1 = new SqlCommand(sql, cnn);
                                 //新建命令,SqlCommand类的属性包括SelectCommand、InsertCommand、UpdateCommand、DeleteCommand分别对应数据库的查询、插入、更新和删除操作。
                                 int Exec = cmd1.ExecuteNonQuery(); //执行并返回受影响的行数
                                 if (Exec != 0)
                                 {

                                     cnn.Close();
                                 }
                                 else
                                 {
                                     //lsInfo.Items.Add(DateTime.Now.ToString()   "  文件【"   Filename   "】 The Data Error,pls Check your Input");
                                     this.testMethod(DateTime.Now.ToString()   "   文件【"   Filename   "】 The Data Error,pls Check your Input");
                                 }

                                 #endregion

                             }
                            // lsInfo.Items.Add(DateTime.Now.ToString()   "  文件【"   Filename   "】 已成功上传"   recordnum.ToString()   "条记录。");
                             this.testMethod(DateTime.Now.ToString()   "  文件【"   Filename   "】 已成功上传"   recordnum.ToString()   "条记录。");
                         
                     }
                     else
                     {
                         //lsInfo.Items.Add(DateTime.Now.ToString()   "  文件【"   Filename   "】 文件已存在!!!!");
                         this.testMethod(DateTime.Now.ToString()   "  文件【"   Filename   "】 文件已存在!!!!");
                     }
                     
                 }
            

        }

        private void 手动上传ToolStripMenuItem_Click(object sender, EventArgs e)
        {

            int start = 0;
            int end = 0;
            int recordnum = 0;
            string sqlGetFileName = "";


            List<string> P_name = new List<string>();
            List<string> P_time = new List<string>();
            List<string> E_time = new List<string>();
            List<string> P_date = new List<string>();

            OpenFileDialog file1 = new OpenFileDialog();//定义新的文件打开位置控件
            //file1.InitialDirectory = @"C:\Users\lucaslau\Desktop\HTML读取\";
            //file1.InitialDirectory = @"C:\Users\BillLUO\Desktop\";
            //file1.Filter = "任意文件|*.*";
            file1.Filter = "网页格式文件|*.htm";//设置文件后缀的过滤
            //file1.d
            if (file1.ShowDialog() == DialogResult.OK)//如果有选择打开文件
            {
                StreamReader sr = File.OpenText(file1.FileName);//创建文件流对象,读取打开的文件
                string fullpath = file1.FileName;
                Filename = file1.FileName.Substring(file1.FileName.LastIndexOf("\\")   1);
                //MessageBox.Show(file1.FileName.Substring(file1.FileName.LastIndexOf("\\")   1));

                //判断数据库是否已经存在
                sqlGetFileName = @"SELECT [File_Name] FROM [Edgeband_Program].[dbo].[BIMA_Machine_Time_Data](NOLOCK) WHERE [File_Name] = '"   Filename   "'";
                if (DataBaseHelper.GetDataSet(sqlGetFileName).Tables[0].Rows.Count > 0)
                {

                    MessageBox.Show("Error,The Data has areadly existed");
                    return;
                }
                if (File.Exists(fullpath))
                {
                    string[] str = System.IO.File.ReadAllLines(fullpath);
                    for (int i = 0; i < str.Length; i  )
                    {
                        List<string> CL = new List<string>();
                        CL.Add("<tbody>");
                        CL.Add("</tbody>");
                        string[] strcl = CL.ToArray();
                        for (int j = 0; j < strcl.Length; j  )
                        {
                            int len = strcl[j].Length;
                            #region 获取起始终点位置
                            MatchCollection mc = Regex.Matches(str[i], strcl[j]);
                            foreach (Match m in mc)
                            {
                                if (strcl[j].ToString() == "<tbody>")
                                {
                                    start = i;
                                }
                                if (strcl[j].ToString() == "</tbody>")
                                {
                                    end = i;
                                }
                            }
                            #endregion
                        }
                    }
                    recordnum = (end - 3 - start - 8) / 7;

                    for (int l = 0; l < recordnum; l  )
                    {
                        Programname = str[start   10   7 * l].ToString().Remove(0, 26).ToString();
                        Programname = Programname.Substring(0, Programname.Length - 5);
                        P_name.Add(Programname);
                        //MessageBox.Show(Programname);
                        Processtime = str[start   11   7 * l].ToString().Remove(0, 11).ToString();
                        Processtime = Processtime.Substring(0, Processtime.Length - 5);
                        P_time.Add(Processtime);
                        //MessageBox.Show(Processtime);
                        Endtime = str[start   12   7 * l].ToString().Remove(0, 11).ToString();
                        Endtime = Endtime.Substring(0, Endtime.Length - 5);
                        E_time.Add(Endtime);
                        //MessageBox.Show(Endtime);
                        Processdate = str[start   13   7 * l].ToString().Remove(0, 11).ToString();
                        Processdate = Processdate.Substring(0, Processdate.Length - 5);
                        P_date.Add(Processdate);
                        //MessageBox.Show(Processdate);
                    }

                    for (int m = 0; m < recordnum; m  )
                    {
                        #region Insert Data
                        SqlConnection cnn = new SqlConnection();
                        cnn.ConnectionString = "Data Source = 172.23.134.36; uid = 3tec; pwd =lager; database = Edgeband_Program";
                        //cnn.ConnectionString = "Data Source = (local); uid = sa; pwd =123; database = Edgeband_Program";
                        cnn.Open();
                        string sql = string.Empty;
                        sql = sql   "INSERT INTO dbo.BIMA_Machine_Time_Data(Insert_Time,File_Name,Program_Name,Process_Time,End_Time,Process_Date) VALUES("   "GETDATE()"   ",";
                        sql = sql   "N'"   Filename   "',N'"   P_name[m].ToString()   "',N'"   P_time[m].ToString()   "',N'"   E_time[m].ToString()   "',N'"   P_date[m].ToString()   "')";
                        //MessageBox.Show(sql);
                        SqlCommand cmd1 = new SqlCommand(sql, cnn);
                        //新建命令,SqlCommand类的属性包括SelectCommand、InsertCommand、UpdateCommand、DeleteCommand分别对应数据库的查询、插入、更新和删除操作。
                        int Exec = cmd1.ExecuteNonQuery(); //执行并返回受影响的行数
                        if (Exec != 0)
                        {

                            cnn.Close();
                        }
                        else
                        {
                            MessageBox.Show("Error, pls Check your Input", "Reminder");
                        }

                        #endregion

                    }
                    MessageBox.Show("已成功上传记录"   recordnum.ToString()   "条。");
                }
            }

        }
   
        private void timer1_Tick(object sender, EventArgs e)
        {
            AutoInsertData();
        }

        private void 清空列表ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lsInfo.Items.Clear();
        }

        private void 手动批量上传ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AutoInsertData();
        }

        private void exitMenuItem_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("你确定要退出程序吗?", "确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
            {
                notifyIcon1.Visible = false;
                this.Close();
                this.Dispose();
                Application.Exit();
            }
        }

        private void showMenuItem_Click(object sender, EventArgs e)
        {
            this.StartPosition = FormStartPosition.CenterScreen;
            this.WindowState = FormWindowState.Normal;
            this.Show();
            this.Activate();
        }

        private void hideMenuItem_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Hide(); //或者是this.Visible = false;
                this.notifyIcon1.Visible = true;
            }
        }
        //三 转到窗体设计模式,右击notifyIcon1 ,选择属性,双击其中DoubleClick,添加相关代码
        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Normal)
            {
                this.WindowState = FormWindowState.Minimized;

                this.Hide();
            }
            else if (this.WindowState == FormWindowState.Minimized)
            {
                this.Show();
                this.WindowState = FormWindowState.Normal;
                this.Activate();
            }

        }
    }
}

实例下载地址

解析HTML文件并插入数据库保存起来

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警