一、獲取所需要篩選的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,不然得到的只是最後一個。。。。
好了,描述結束,上界面(有點醜,哈哈哈哈)