C#文本文件浏览和文件写入

时间:2014-06-19 06:39:04

标签: c# forms file-io

我有这个非常大的文本文件(大约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();

这是通过一个按钮完成的。我想要的是能够搜索我想要的文件,然后使用另一个按钮来完成所有的写作过程

2 个答案:

答案 0 :(得分:1)

您可以使用StreamReaderStreamWriter作为读/写文件

要提取文字的特定部分,您可以使用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,这样您的代码将更具可读性,并且您不会忘记释放已使用的资源。