/// <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);
}
}
/// 遍历打开目录下所有*.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);
}
}
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]*", "");
}
你这是分享还是提问?
如果是分享,我想你把问题想简单了。关键字查询,你要知道,直接读文件不可以的,还需要先检测文件头,如果文件头标识不了自己的字符集,还需要检查一下是什么字符集的,否则你检查中文的时候,遇到utf,unicode,gb2312格式的文件,你就会出错了。
string str = "Open()";
DataTable dt = PipingFileReader(fileNames);
string HasNum = "HasNum";
dt.DefaultView.RowFilter = "" + HasNum + " like '%" + str + "%' ";
dataGridView1.DataSource = dt.DefaultView;// PipingFileReader(fileNames);
我的这个记事本,使用了一个开源项目,可以识别任意文本的字符编码集,你不妨试试,既然已经用了。那你自然可以从我代码中直接找到那块识别的部分和使用范例。
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
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