C# - 解析/格式化.txt文件

时间:2011-06-22 16:18:25

标签: c# parsing file format text-files

所以我有一些.txt文件格式化了我不喜欢的方式。我想读取文件并通过单击GUI中的按钮(或2)重新格式化它。此外,我希望能够通过单击另一个按钮重新保存具有许多选项的文件。另外,如果可能的话,我希望原始文件显示在GUI左侧的富文本框中,一旦单击格式按钮,它将在我的GUI右侧显示新文本一个单独的富文本框。

所以我目前有一个正常运行的“打开文件”按钮,“保存文件”按钮和“清除文本”按钮。但是,我需要一个“格式文本”按钮(除非我们可以将打开文件按钮和格式文本按钮组合成一个按钮!)...

这是文件进入时的样子。 http://i.stack.imgur.com/mlSMm.png

这就是我点击格式时想要的样子。 http://i.stack.imgur.com/1IzKF.png

我还有一个GUI,我打开并保存文件,我有以下代码:

    private void openFileButton_Click(object sender, EventArgs e)
    {
       OpenFileDialog openFile = new OpenFileDialog();
       openFile.DefaultExt = "*.txt";
       openFile.Filter = ".txt Files|*.txt";
       openFile.InitialDirectory = "C:\\";
       openFile.RestoreDirectory = true;

       try
       {
          if(openFile.ShowDialog() == DialogResult.OK && openFile.FileName.Length > 0)
          {
          openedTextRichTextBox.LoadFile(openFile.FileName, RichTextBoxStreamType.PlainText);
          }
          else
             throw new FileNotFoundException();
       }
       catch (Exception ex)
       {
           MessageBox.Show(ex.Message);
       }
    }

    private void saveFileButton_Click(object sender, EventArgs e)
    {
       SaveFileDialog saveFile = new SaveFileDialog();
       saveFile.DefaultExt = "*.txt";
       saveFile.Filter = ".txt Files|*.txt";
       saveFile.InitialDirectory = "C:\\";
       saveFile.RestoreDirectory = true;

       try
       {
          if(saveFile.ShowDialog() == DialogResult.OK && saveFile.FileName.Length > 0)
          {
          formattedTextRichTextBox.LoadFile(saveFile.FileName, RichTextBoxStreamType.PlainText);
          }
          else
             throw new FileNotFoundException();
       }
       catch (Exception ex)
       {
           MessageBox.Show(ex.Message);
       }
    }

好的,实际的问题是:

如何格式化传入的txt文件以删除除(不包括)标有“level”,“number ref”,“component item”,“description”的列以外的所有内容。这个意思,一切都在“---”之下,直到我打到另一个“---”。在我击中另一个“---”后,我需要抓住与上面相同的列。这更有意义吗?我希望它看起来的例子是在第二个链接。

1 个答案:

答案 0 :(得分:2)

通过正则表达式运行文本,该表达式选择感兴趣的行:这些行:

        foreach (string line in File.ReadAllLines("filename"))
        {
            Match m = Regex.Match(line, @"^\d+\s+[\d\w]+\s+\d+\s+.{24}");
            if (m.Success)
            {
                string output = m.Value;
                // do something with output, for example write to a file
            }
        }

如果您不熟悉正则表达式,则应该查看它们,例如:http://www.regular-expressions.info/