是否可以读取特定的文本块

时间:2016-12-23 15:21:29

标签: c# file-io

是否可以使用Streamreader(或者我想除了Streamreader以外的其他内容)来阅读特定的文本块?一个例子是我在文本文件中有数据的图表,按日期分隔,我想分别阅读每一天的数据。数据示例如下所示。

enter image description here

  • 蓝色 - 日期
  • 红色 - 我想要每天拉出的第一大块数据
  • 绿色 - 我想要每天拉出的第二块数据(只需要读取数字)

当我搜索方法时,我似乎只找到阅读整个文本文件或阅读个人行。第二个选项似乎可行,但问题是我每天都没有相同数量的条目,所以我需要动态确定要读取的行数。我认为最好的方法是告诉我的Streamreader阅读两个单词之间的所有文字,例如" FAIL"和" Total"。但由于我无法在网上找到任何东西,我不确定它是否可能,如果可能,那该怎么办呢。任何帮助表示赞赏。

重要的是我计划将文件中的文本带到Excel中,因此我可能不得不将输出放入数组或其他内容,但以后会出现这个问题。

3 个答案:

答案 0 :(得分:1)

这可以简单地写下你自己如何做到这一点 像这样:

  • 读取行,直到看到日期为止;记得约会。
  • 读取行直到行为红色块标题。
  • 读取行直到行为绿色块标题;虽然没有找到添加红色数据块的行。
  • 读取行直至EOF或直到遇到日期为止;虽然没有找到添加绿色数据块的行。
  • 如果未找到EOF,请重复。

如何做每一步都是一个偏好的问题。但通过分解它,你可以更轻松地制作一个看似复杂的问题。

答案 1 :(得分:0)

这称为 Parsing ,您需要编写自己的解析器。

从表面上看,它很容易做到。

您的红色绿色部分似乎是固定宽度,这意味着您可以SubString每列获取数据。

诀窍在于编写代码来确定您正在阅读的内容,并且通常需要您知道您之前正在解析的部分。你看起来就像检查线(可能需要一个修剪)是否解析到一个日期,知道你是在进程的开始一样简单。从那里开始阅读,直到你到达StartsWith REF的行,知道你的后续行将成为记录,直到出现几个字符的空格 - 这就是你知道的时候你的摘要。 / p>

答案 2 :(得分:0)

您应该使用正则表达式来读取此文件。一个接一个地读取每一行。在每一行上,您可以决定此行是否开始新条目,包含来自红色字段或绿色字段的数据。您可以通过将这些行中的每一行与正则表达式相匹配来完成此操作,最好使用组从中提取实际数据。

MSDN about regular expressions