C#实现简单读取txt,按行循环筛选出所需要的文档区间,并将筛选出的文本输出到txt中,即从一大坨txt文本中筛选出所需要内容,并导出!!

您所在的位置:网站首页 筛选符号的位置控制怎么设置 C#实现简单读取txt,按行循环筛选出所需要的文档区间,并将筛选出的文本输出到txt中,即从一大坨txt文本中筛选出所需要内容,并导出!!

C#实现简单读取txt,按行循环筛选出所需要的文档区间,并将筛选出的文本输出到txt中,即从一大坨txt文本中筛选出所需要内容,并导出!!

2024-04-05 11:48| 来源: 网络整理| 查看: 265

一、获取所需要筛选的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,不然得到的只是最后一个。。。。

好了,描述结束,上界面(有点丑,哈哈哈哈)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3