我有这个非常大的文本文件(大约35 000多行信息),我想从中提取某些行并将它们放在另一个文本文件中。
文本文件如下:
Feature info
Feature name: 123456
Version: 1
Tokens total: 35
Tokens remaining: 10
我想提取功能名称和令牌总数。我想到的是一个带有两个按钮的表单:1用于浏览文件,另一个用于完成整个读取和写入文件部分,当然是逐行格式化。
任何人都有任何关于如何做的线索?我已经搜索过了,我还没找到具体的东西,对于文件读/写来说也是一个新的东西......
修改
好的,这是我到目前为止所做的工作:
private void button1_Click(object sender, EventArgs e)
{
int counter = 0;
string line;
string s1 = "Feature name";
string s2 = "Tokens total";
// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("d:\\license.txt");
using (System.IO.StreamWriter file2 = new System.IO.StreamWriter(@"D:\test.txt"))
while ((line = file.ReadLine()) != null)
{
if (line.Contains(s1) || line.Contains(s2))
{
file2.WriteLine(line);
counter++;
}
}
file.Close();
这是通过一个按钮完成的。我想要的是能够搜索我想要的文件,然后使用另一个按钮来完成所有的写作过程
答案 0 :(得分:1)
您可以使用StreamReader和StreamWriter作为读/写文件
要提取文字的特定部分,您可以使用Regex.Matches,它会返回Match,然后您可以在Match.Groups
// Search name
Match mu = Regex.Match(line, @"Feature name: (\d+)");
// Get name
if (mu.Groups.Count == 1) Console.Writeline(mu.Groups[0].Value);
答案 1 :(得分:1)
回答编辑:
您可以将读取的数据存储在表单类的属性或私有字段中。最好使用String或StringBuilder。单击第二个按钮时,检查是否存储了数据并将其写入输出文件。
private StringBuilder data = new StringBuilder();
private void button2_Click(object sender, EventArgs e)
{
if(data.Length > 0)
{
using(System.IO.StreamWriter file2 = new System.IO.StreamWriter(@"D:\test.txt"))
{
file2.Write(data.ToString());
}
}
}
private void button1_Click(object sender, EventArgs e)
{
// Clear the previous store data
data.Clear();
// ...
System.IO.StreamReader file = new System.IO.StreamReader("d:\\license.txt");
while ((line = file.ReadLine()) != null)
{
if (line.Contains(s1) || line.Contains(s2))
{
sb.AppendLine(line);
counter++;
}
}
file.Close();
}
请添加使用System.IO并使用block包围StreamReader和StreamWriter,这样您的代码将更具可读性,并且您不会忘记释放已使用的资源。