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,不然得到的只是最後一個。。。。

好了,描述結束,上界面(有點醜,哈哈哈哈)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章