如何跳过txt文件块

时间:2013-10-10 16:08:32

标签: c# parsing text filereader

和我们一起(很长的帖子),

如何跳过阅读红色框中的文件才能继续阅读蓝色框中的文件?我需要对'fileReader'进行哪些调整?

到目前为止,在SO用户的帮助下,我已经能够成功跳过前8行(第一个红色框)并读取文件的其余部分。但是现在我只想阅读蓝色部分。

我正在考虑用蓝色制作每个块的方法。基本上通过跳过前8行文件来启动它,如果它的第一个蓝色框,大约23为下一个蓝色框,但结束文件阅读器是我遇到问题的地方。根本就不知道该用什么。

enter image description here

private void button1_Click(object sender, EventArgs e)
{
    // Reading/Inputing column values

    OpenFileDialog ofd = new OpenFileDialog();
    if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        string[] lines = File.ReadAllLines(ofd.FileName).Skip(8).ToArray();
        textBox1.Lines = lines;

        int[] pos = new int[3] {0, 6, 18}; //setlen&pos to read specific colmn vals
        int[] len = new int[3] {6, 12, 28}; // only doing 3 columns right now

        foreach (string line in textBox1.Lines)
        {
            for (int j = 0; j < 3; j++) // 3 columns
            {
                val[j] = line.Substring(pos[j], len[j]).Trim(); 
                list.Add(val[j]); // column values stored in list
            }
        } 
    }
}

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

using System.Text.RegularExpressions;  //add this using

foreach (string line in lines)
{
    string[] tokens = Regex.Split(line.Trim(), " +");
    int seq = 0;
    DateTime dt;
    if(tokens.Length > 0 && int.TryParse(tokens[0], out seq))
    { 
        // parse this line - 1st type
    }
    else if (tokens.Length > 0 && DateTime.TryParse(tokens[0], out dt))
    {
        // parse this line - 2nd type
    }
    // else - don't parse the line
}

正则表达式拆分可以在任何空格上打破,直到下一个标记。正则表达式" +"表示匹配一个或多个空格。它在找到别的东西时会分裂。根据您的示例,您只想解析以数字或日期开头的行,这应该完成。请注意,我修剪了前导和尾随空格的行,这样就不会拆分任何这些空格并获得空字符串标记。

答案 1 :(得分:0)

我可以看到你想要阅读的内容

  1. Numerics结尾的行(可能在一行之后)
  2. 直到以0Total开头的行(是零,对吧?);
  3. CURREN
  4. 结尾的行之间
  5. 直到行1作为行中的第一个符号。
  6. 不应该很难。逐行阅读。当(1)或(3)发生时,相应地开始产生直到(2)或(4)。