/// <summary>
        /// 遍历打开目录下所有*.txt文件,并分析文件内容是否出现输入关键字,
        /// 有则把关键字出现的文件名称,所在文件行号等输出
        /// </summary>
        /// <param name="FilePath">文件名称</param>
        /// <returns>文件出现搜索关键字的详细信息</returns>
        public DataTable PipingFileReader(string[] FilePath)
        {            DataTable dt = new DataTable();
            dt.Columns.Add("Id", Type.GetType("System.String"));            //总编号
            dt.Columns.Add("FileName", Type.GetType("System.String"));      //所在文件名称
            dt.Columns.Add("HasNum", Type.GetType("System.String"));        //有数字内容
            dt.Columns.Add("UnNum", Type.GetType("System.String"));         //去除数字内容
            dt.Columns.Add("InFileNum", Type.GetType("System.String"));     //大概在文件中行数
            int rowcount = 0;    //每次读一行就加一
            foreach (string fileName in FilePath)
            {
                string temp = string.Empty;
                string FileName = fileName.Substring(fileName.LastIndexOf("\\") + 1, fileName.Length - fileName.LastIndexOf("\\") - 1);                int rowInFil = 0;    //所在行号
                FileStream aFile = new FileStream(fileName, FileMode.Open);
                StreamReader sr = new StreamReader(aFile, Encoding.Default);
                string strRead = sr.ReadLine();   //每次只读一行数据
                rowInFil++;
                while (strRead != null)
                {
                    if (strRead.LastIndexOf(textBox1.Text) > 0)
                    {
                        rowcount++;                        DataRow dr = dt.NewRow();
                        dr["Id"] = rowcount.ToString();
                        dr["FileName"] = FileName;
                        dr["HasNum"] = strRead;
                        dr["UnNum"] = strRead;
                        dr["InFileNum"] = rowInFil.ToString();
                        dt.Rows.Add(dr);
                    }
                    strRead = sr.ReadLine();
                    rowInFil++;
                }
            }
            return dt;
        }/// <summary>
        /// 开始分析事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            GetFileName();
        }        /// <summary>
        /// 获取打开目录下所有*.txt文件
        /// </summary>
        private void GetFileName()
        {
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                label4.Text = folderBrowserDialog1.SelectedPath;
                string[] fileNames = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.txt");
                dataGridView1.DataSource = PipingFileReader(fileNames);
            }
        }

解决方案 »

  1.   

    如果想保留数字0-9和小数点’.’ 则需要自定义函数
    string str = "er34sd43.re34";
     str=System.Text.RegularExpressions.Regex.Replace(str,@"[^0-9.]",string.Empty);//保留字符串中的字母和小数点"."
    string str = Regex.Replace("a12.34d", "\\d+", ""); // 
    /// 去掉字符串中的数字 
     public static string RemoveNumber(string key)
    {
        return System.Text.RegularExpressions.Regex.Replace(key, @"\d", "");
    }/// 
    /// 去掉字符串中的非数字
     public static string RemoveNotNumber(string key)
    {
        return System.Text.RegularExpressions.Regex.Replace(key, @"[^\d]*", "");
    }  
      

  2.   

    ??
    你这是分享还是提问?
    如果是分享,我想你把问题想简单了。关键字查询,你要知道,直接读文件不可以的,还需要先检测文件头,如果文件头标识不了自己的字符集,还需要检查一下是什么字符集的,否则你检查中文的时候,遇到utf,unicode,gb2312格式的文件,你就会出错了。
      

  3.   

     //DataBle模糊过滤字符
                 string str = "Open()";
                DataTable dt = PipingFileReader(fileNames);
                string HasNum = "HasNum";
                dt.DefaultView.RowFilter = "" + HasNum + "  like  '%" + str + "%' ";
                dataGridView1.DataSource = dt.DefaultView;// PipingFileReader(fileNames);
      

  4.   

    http://download.csdn.net/source/2097063
    我的这个记事本,使用了一个开源项目,可以识别任意文本的字符编码集,你不妨试试,既然已经用了。那你自然可以从我代码中直接找到那块识别的部分和使用范例。
      

  5.   

    另外,如果你做模糊搜索,其实你可以不用正则的,因为正则引擎并不十分高效,如果是简单规则,你不妨尝试用vb.net来实现这个功能,vb.net中有一个c#中没有的轻量级的字符串匹配方法,Like关键字。详见http://www.getdotnetcode.com/gdncstore/free/Articles/Intoduction%20to%20the%20VB%20NET%20Like%20Operator.htm
      

  6.   

    Excel.Application m_xlsApp = null; 
                Excel.Workbook m_Workbook = null; 
                Excel.Worksheet m_Worksheet = null; 
                try 
                { 
                    object objOpt = System.Reflection.Missing.Value; 
                    m_xlsApp = new Excel.Application(); 
                    m_Workbook = m_xlsApp.Workbooks.Open(s_FileName, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt); 
                    m_Worksheet = (Excel.Worksheet)m_Workbook.Worksheets.get_Item(sheetIndex); 
                    DataRow newRow; 
                    for (int j = 2; j <= m_Worksheet.UsedRange.Rows.Count; j++) 
                    { 
                        newRow = dtTemp.NewRow(); 
                        for (int i = 1; i <= m_Worksheet.UsedRange.Columns.Count; i++) 
                        { 
                            if (((Excel.Range)(m_Worksheet.Cells[j, i])) != null && ((Excel.Range)(m_Worksheet.Cells[j, i])).Text.ToString() != "") 
                            { 
                                newRow[i - 1] = ((Excel.Range)(m_Worksheet.Cells[j, i])).Value2.ToString(); 
                            }                     } 
                        dtTemp.Rows.Add(newRow); 
                    } 
                } 
                catch (Exception exc) 
                { 
                    Alert("导入失败~!"); 
                } 
                finally 
                { 
                    m_Worksheet = null; 
                    m_Workbook = null; 
                    m_xlsApp.Quit(); 
                    int generation = System.GC.GetGeneration(m_xlsApp); 
                    m_xlsApp = null; 
                    System.GC.Collect(generation);        
                     
                }             return dtTemp;转至:http://blog.csdn.net/gavin_luo/archive/2008/11/25/3373544.aspx
      

  7.   

    嗯,谢谢你wuyazhe这么晚了还帮助我,我是准备想做一个小工具,到一个目录下把所有TXT文件只要出现输入框关键字的行解析出来存到datatable。然后再与Excel里面的一些数据去比对的最终查找出文datatable出现的结果但excel里面里面没有的,这样省得每次想到文本查找excel里面有的数据都要Ctrl+f太浪费时间了,暂时是这样的想的还在实现中
      

  8.   

            public static string[] fileNames;                             //目录下所有*.txt文件名称
            public static int dtSameRowCount = 0, dtUnSameRowCount = 0;   //带有数字的日志信息/无数字的日志信息
            public static string ExcelName = string.Empty;                //打开的Excel文件
            public Form1()
            {
                InitializeComponent();
            }        #region  打开*.txt日志文件并显示目录事件
            /// <summary>
            /// 打开*.txt日志文件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
                fileNames = GetFileName();
            }
            #endregion        #region 遍历打开目录下所有*.txt文件,并分析文件内容是否出现输入关键字
            /// <summary>
            /// 遍历打开目录下所有*.txt文件,并分析文件内容是否出现输入关键字,
            /// 有则把关键字出现的文件名称,所在文件行号等输出
            /// </summary>
            /// <param name="FilePath">文件名称</param>
            /// <returns>文件出现搜索关键字的详细信息</returns>
            public DataTable PipingFileReader(string[] FilePath)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Id", Type.GetType("System.String"));            //总编号
                dt.Columns.Add("FileName", Type.GetType("System.String"));      //所在文件名称
                dt.Columns.Add("HasNum", Type.GetType("System.String"));        //有数字内容
                dt.Columns.Add("UnNum", Type.GetType("System.String"));         //去除数字内容
                dt.Columns.Add("InFileNum", Type.GetType("System.String"));     //大概在文件中行数
                int rowcount = 0;    //每次读一行就加一
                try
                {
                    foreach (string fileName in FilePath)
                    {
                        string temp = string.Empty;
                        string FileName = fileName.Substring(fileName.LastIndexOf("\\") + 1, fileName.Length - fileName.LastIndexOf("\\") - 1);                    int rowInFil = 0;    //所在行号
                        FileStream aFile = new FileStream(fileName, FileMode.Open);
                        StreamReader sr = new StreamReader(aFile, Encoding.Default);
                        string strRead = sr.ReadLine();   //每次只读一行数据
                        rowInFil++;
                        while (strRead != null)
                        {
                            if (strRead.LastIndexOf(textBox1.Text) > 0)
                            {
                                rowcount++;                            DataRow dr = dt.NewRow();
                                dr["Id"] = rowcount.ToString();
                                dr["FileName"] = FileName;
                                dr["HasNum"] = strRead;
                                dr["UnNum"] = System.Text.RegularExpressions.Regex.Replace(strRead, @"[\d]", "");     //去掉字符串中的数字
                                dr["InFileNum"] = rowInFil.ToString();
                                dt.Rows.Add(dr);
                            }
                            strRead = sr.ReadLine();
                            rowInFil++;
                        }
                    }            }
                catch
                {            }
                return dt;
            }
            #endregion