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

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

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

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值