2

我正在用 Visual c# 构建一个表单应用程序。我的问题是我需要阅读红色下划线的所有列(如图所示)并跳过蓝色的列:

图片

我不知道我应该使用 readline 还是 readblock 方法。此外,程序如何知道红色列何时结束以及如何转到下一个红色列。我必须使用字符数吗?

这是我当前的代码:

  private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            StreamReader sr = new StreamReader(File.OpenRead(ofd.FileName));
            // constructor sr accesses streamreader class. In stream reader class we access method read to end
            textBox1.Text = sr.ReadToEnd();
            // fill textbox with this.
            sr.Dispose();

        }
    }

很抱歉,我是初学者-非常感谢您的帮助。

4

1 回答 1

1

看起来两个非常简单的规则可以帮助处理这些文件:

1)第一列(不是空格)中有一个字符的行会将您踢出表格模式。

2) 具有相等和空间组且其中没有其他内容的行启动表模式。
a) 由等号部分的宽度定义的列宽
b) 前一行通常给出列名

使用它,您可以为这种形式的文件创建一个通用解析器。一次只阅读一行,然后将输入离开表格的规则应用于您阅读的每一行。(如果您想要标题名称,请保留一回)

编辑:添加了代码示例。(问题在于“第一行”整个程序大部分都是写的)

using( StreamReader input = new StreamReader("somefile.txt") )
{
   List<int> bounds = new List<int>();
   for( string line = input.ReadLine(); line != null; line = input.ReadLine() )
   {
      if( line.Length > 0 && line[0] == '-' )
         bounds.Clear();
      if( Regex.IsMatch(line, "^ *=[ =]*$") ) // This is a column header
      {
         bounds.Clear();
         for( int i = 1; i<line.Length; ++i )
            if( line[i - 1] != line[i] )
               bounds.Add(i);
      }
      else if( bounds.Count > 0 )
      {
         List<string> cells = new List<string>();
         string padLine = line.PadRight(bounds[bounds.Count-1]);
         for( int i=0; i<bounds.Count; i += 2 )
            cells.Insert(i / 2, padLine.Substring(bounds[i], bounds[i+1]));
         // retrieve data cells[7] (column 7) here and store elsewhere.  
      }
   }
}
于 2013-09-25T19:33:53.403 回答