⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hongwaishuju.cs

📁 解析文本文件并导入到数据库,多种文件格式
💻 CS
📖 第 1 页 / 共 2 页
字号:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data;
using Newtera.ParserGen.Converter;

namespace HongWaiParserGen
{

    #region 读取红外数据的文件夹数据文件的程序
    public class HongWaiShuJu : DataSourceConverterBase
    {
     
        private DataSet ds;      //数据集      
        string dataName;     //文件路径
        private int pageSize = 1000;

        #region 构造函数
        /// <summary>
        /// 初始化
        /// </summary>
        public HongWaiShuJu()
        {        
            ds = new DataSet();

            dataName = null;
        }
        #endregion

        #region SupportPaging方法
        /// <summary>
        /// 设置是否分块读取数据
        /// </summary>
        public override bool SupportPaging
        {
            get
            {
                return true;
            }
        }
        #endregion

        #region Close方法
        /// <summary>
        /// 关闭的连接
        /// </summary>
        public override void Close()
        {
            this.ds = null;


        }
        #endregion

        #region 不分块读取数据的方法
        /// <summary>
        /// 数据转换器方法
        /// </summary>
        /// <param name="dataSourceName">转换数据的路径</param>
        /// <returns>数据集</returns>
        public override System.Data.DataSet Convert(string dataSourceName)
        {

            DataSet ds = ReadData(dataSourceName, pageSize); //调用读取数据的公共函数

            return ds;  //返回数据集

        }
        #endregion

        #region 分块读取数据时首次调用的函数
        /// <summary>
        /// 首次调用的方法
        /// </summary>
        /// <param name="dataSourceName">文件路径</param>
        /// <param name="pageSize">分块读取的记录数</param>
        /// <returns>数据集</returns>
        public override DataSet ConvertFirstPage(string dataSourceName, int pageSize)
        {
            //   pageSize = 2;   //设置分块读取数据行数
            dataName = dataSourceName;  //赋值数据路径

            DataSet ds = ReadData(dataSourceName, pageSize); //调用读取数据的公共函数

            return ds;  //返回读取的数据集

        }
        #endregion

        #region 循环分块调用读取数据函数
        /// <summary>
        /// 循环方法
        /// </summary>
        /// <returns>数据集</returns>
        public override DataSet ConvertNextPage()
        {
            DataSet dataset = new DataSet();
            dataset = ReadData(dataName, pageSize);  //调用公共读取数据的方法


            return dataset;
        }
        #endregion

        #region 公共读取数据函数
        public DataSet ReadData(string dataSourceName, int pageSize)
        {
            DataSet ds = new DataSet();
            

            //遍历用户选择的文件所在的文件夹,找出所有文件,根据文件名自动选择下列读取方式
           
            string filePath=dataSourceName.Substring(0,dataSourceName.LastIndexOf('\\'));
        //    int filecounts = 0;//定义一个变量,表示文件数目
            FileInfo[] NewFileInfo;//定义一个数组,储存找到的文件并作为返回值
            DirectoryInfo FatherDirectory = new DirectoryInfo(filePath); //创建一个当前目录的实例
            NewFileInfo = FatherDirectory.GetFiles("*.*", SearchOption.AllDirectories);
            //得到文件集,包括目录及其子目录下的所有文件
            string strFilePath = filePath.Substring(filePath.LastIndexOf("\\")+1, filePath.Length - filePath.LastIndexOf("\\")-1);

            for (int k = 0; k <= NewFileInfo.GetUpperBound(0); k++)
            {
                string strFileName = filePath + "\\" + NewFileInfo[k];
                FileStream fs = new FileStream(strFileName, FileMode.Open);
                
                
                if (NewFileInfo[k].ToString().IndexOf("yc") >= 0)  //标准格式数据,无标题。
                {                 

                    StreamReader sr = new StreamReader(fs);
                    DataTable dt = new DataTable();
                    dt.TableName = NewFileInfo[k].ToString().Replace(".", "_");
                  
                    string[] arrStrLine = sr.ReadToEnd().Trim().Split('\r'); //读取整个文件内容,并按照每行一个数组存储。

                    dt.Columns.Add("所属型号");
                    dt.Columns.Add("试验项目编号");
                    dt.Columns.Add("数据类别");

                    string strLine1 = arrStrLine[0].Replace("\t", " ");//将第一行数据处理为一个空格分隔的数据。
                    while (strLine1.IndexOf("  ") >= 0) //如果存在两个以上的空格,替换成一个
                    {
                        strLine1 = strLine1.Replace("  ", " ");
                    }
                    string[] arrStrFirstLine = strLine1.Split(' ');  //将第一行数据按没列一个数组存储。
                    int nColumnsCount = arrStrFirstLine.GetUpperBound(0);   //第一行数据的列数。
                    for (int c = 1; c <= nColumnsCount + 1; c++)
                    {
                        string cname = "数据" + c.ToString();
                        dt.Columns.Add(cname);
                    }

                  //  string[] ArrStrShuJu = new string[nColumnsCount+3];

                    for(int i=0;i<=arrStrLine.GetUpperBound(0);i++)
                    {
                        string strCurrLine =  arrStrLine[i].Trim();
                        strCurrLine = strCurrLine.Replace("\t", " ");
                        while (strCurrLine.IndexOf("  ") >= 0) //如果存在两个以上的空格,替换成一个
                        {
                            strCurrLine = strLine1.Replace("  ", " ");
                        }
                        strCurrLine = "   "+strCurrLine;
                        string[] ArrStrShuJu = strCurrLine.Split(' ');


                           
                            //假如文件夹名称不是“20开头”,补上“20”

                            if (strFilePath.IndexOf("\\20") > 0)
                            {
                                ArrStrShuJu[1] = "PL12_20" + strFilePath;
                            }
                            else
                            {
                                ArrStrShuJu[1] = "PL12_" + strFilePath;
                            }
                            ArrStrShuJu[0] = "PL12";
                            ArrStrShuJu[2] = "仿真机数据";
                            dt.Rows.Add(ArrStrShuJu);
                        
                    }

                    ds.Tables.Add(dt);
                    sr.Close();
                }
                else if (NewFileInfo[k].ToString().IndexOf("行式规范标题") >= 0)  //行式规范标题标准格式文本数据。
                {

                    StreamReader sr = new StreamReader(fs,Encoding.Default);
                    DataTable dt = new DataTable();
                    dt.TableName = NewFileInfo[k].ToString().Replace(".", "_");

                    string[] arrStrLine = sr.ReadToEnd().Trim().Split('\r'); //读取整个文件内容,并按照每行一个数组存储。

                    dt.Columns.Add("所属型号");
                    dt.Columns.Add("试验项目编号");
                    dt.Columns.Add("数据类别");

                    string strFirstLine = arrStrLine[0].Trim();
                    strFirstLine = strFirstLine.Replace("\t", " ");//将第一行数据处理为一个空格分隔的数据。
                    while (strFirstLine.IndexOf("  ") > -1)
                    {
                        strFirstLine = strFirstLine.Replace("  ", " ");
                    }
                    string[] arrStrFirstLine = strFirstLine.Split(' ');  //将第一行数据按没列一个数组存储。
                    int nColumnsCount = arrStrFirstLine.GetUpperBound(0);   //第一行数据的列数。
                    for (int c = 0; c <= nColumnsCount ; c++)
                    {
                        string cname = arrStrFirstLine[c];
                        dt.Columns.Add(cname);
                    }

                    //  string[] ArrStrShuJu = new string[nColumnsCount+3];

                    for (int i = 1; i <= arrStrLine.GetUpperBound(0); i++)
                    {
                        string strCurrLine = arrStrLine[i].Trim();
                        strCurrLine = strCurrLine.Replace("\t", " ");
                        while (strCurrLine.IndexOf("  ") > -1)
                        {
                            strCurrLine = strCurrLine.Replace("  ", " ");
                        }
                        strCurrLine = "   " + strCurrLine;  //把数据中的空格都去掉
                        string[] ArrStrShuJu = strCurrLine.Split(' ');



                        //假如文件夹名称不是“20开头”,补上“20”

                        if (strFilePath.IndexOf("\\20") > 0)
                        {
                            ArrStrShuJu[1] = "PL12_20" + strFilePath;
                        }
                        else
                        {
                            ArrStrShuJu[1] = "PL12_" + strFilePath;
                        }
                        ArrStrShuJu[0] = "PL12";
                        ArrStrShuJu[2] = "仿真机数据";
                        dt.Rows.Add(ArrStrShuJu);

                    }

                    ds.Tables.Add(dt);
                    sr.Close();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -