一、获取所需要筛选的txt文档内容(按行读取)
OpenFileDialog open = new OpenFileDialog();
open.Filter = "txt 选择 (*.txt)|*.txt";
open.Title = "选择txt文件";
if (open.ShowDialog() == DialogResult.OK)
{
string openName = open.FileName;
string filepath = Path.GetDirectoryName(openName);
if (File.Exists(openName))
{
string[] lines = System.IO.File.ReadAllLines(openName);
int length = lines.Length;
}
}
这就获取了txt文件里的所有内容,即所有的行,接下来就是对所有的行进行遍历,然后通过筛选出自己所需要的内容即可。
二、首先遍历行
foreach (string str in lines)
{
for (int i = 0; i < length; i++)
{
txtMessage.AppendText(lines[i]);
}
}
这很简单,接下来就遇到个问题,我们怎么在这一行中筛选出自己所需要的文本区间呢?这一行有内容是我们所不需要的,所以要先判断这一行内有没有这个元素,以及该元素的位置
2.1
//判断是否包含该字符
str.Contains(',');
//取得:该所在的位置
int index = str.IndexOf(‘,’);
//以这个位置到末尾截取字符串,加入list中
string content = str.Substring(index, str.Length - index - 1);
list.Add(content);
2.2这样我们就能判断遍历的改行是不是有该元素但是新的问题又来了,如果我文本内容和我筛选字符串的大小写格式不一样呢那怎么办?str.indexof();str.contains();可是会区分大小写的,怎么办呢?
CompareInfo compare = CultureInfo.InvariantCulture.CompareInfo;
compare.IndexOf(str1,str2,CompareOptions.IgnoreCase);
这个方法可以有效的解决str.IndexOf区分大小写问题,官方注释是
可以正合我意,至于 str.Contains(',');方法,我们可以使用 compare.IndexOf(str1,str2,CompareOptions.IgnoreCase);返回值,看是否大于等于0,这样就能代替str.Contains(',')判断该行元素是否包含这个指定元素字符。
然后我们就从有这个指定字符的位置开始一直到该行结束,获取这区间的字符元素,添加到list中
string content = str.Substring(index, str.Length - index - 1);
list.Add(content);
获取完了,我们也可以将获取的展示下,这就是小事情了
三、将获取所需的文本导出,由于我们是一行一行遍历,然后筛选自己所需的元素,所以当我们筛选到有符合条件的元素字符时,要及时将其添加到相应的写入txt的方法中去,
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.FileName = "txt保存文档" + DateTime.Now.ToString("yyyyMMddhhmmss");
string strName = filePath + "\\" + saveFileDialog.FileName;
FileStream fs = new FileStream(strName, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
//开始写入
sw.WriteLine(你循环获取的内容!!!);
//清空缓冲区
sw.Flush();
//关闭流
sw.Close();
fs.Close();
这个要用 sw.WriteLine,而不能 sw.Write,不然得到的只是最后一个。。。。
好了,描述结束,上界面(有点丑,哈哈哈哈)