gpt4 book ai didi

c# - 在c#中读取文本文件中的不同 block

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:48 25 4
gpt4 key购买 nike

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

Picture

我不知道我应该使用 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();

}
}

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

最佳答案

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

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.
}
}
}

关于c# - 在c#中读取文本文件中的不同 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19012782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com