繁体   English   中英

C#解析文本文件

[英]C# Parse text file

我正在尝试在MVC C#中解析文件,请参见下面的格式。 由于它不在JSON中,因此我无法使用Javascript序列化程序反序列化为对象。 另一个选项用于LINQ并逐行读取并检索所需的值。 谁能推荐一种更有效的方法。

我需要检索的第一个字段是ASSAYS的ASSAY NUMBER(例如值877),然后是TEST_REPLICATE的ASSAY_STATUS字段,它可能是多个节点。 谢谢

LOAD_HEADER
{
    EXPERIMENT_FILE_NAME      "xyz.json"
    EXPERIMENT_START_DATE_TIME  05.21.2012 03:44:01
    OPERATOR_ID     "Q_SI"
}
ASSAYS
{
    ASSAY_NUMBER            877
    ASSAY_VERSION           4
    ASSAY_CALIBRATION_VERSION   1
}

TEST_REPLICATE
{
    REPLICATE_ID            1985
    ASSAY_NUMBER            877
    ASSAY_VERSION           4
    ASSAY_STATUS            Research
}
TEST_REPLICATE
{
    REPLICATE_ID            1985
    ASSAY_NUMBER            877
    ASSAY_VERSION           4
    ASSAY_STATUS            Research
}

您可以将某些东西混在一起,也可以使用ANTLRCoco / R之类的解析器生成器。 两者都可以在C#中生成解析器。

我比解析器生成器更喜欢使用解析器组合器(使用解析器构建块构建解析器的工具)。 我在Piglet方面有过不错的经验,它是用C#编写的,并且非常易于使用,并且具有FParsec的出色经验,但是它是为F#编写的。

至于解析器生成去,还有那些通过stmax建议,并且也TinyPG ,其成员推荐了我一次。

您也可以滚动自己的解析器。 我建议将其基于某种状态机模型,尽管在这种简单情况下(如Kirk Woll所建议的那样),您可能可以通过一些简单的旧字符串操作来解决。

我认为对此的答案取决于文件中是否存在多个ASSAY_NUMBER值。 如果是这样,我知道的最简单,最可靠的方法就是逐行读取文件并获取所需的数据。

但是,如果您知道每个文件对于一个特定的ASSY_NUMBER都是唯一的,那么您有一个简单得多的答案:将文件作为一个字符串读取,然后使用REGEX提取所需的信息。 我不是REGEX方面的专家,但是在线上有足够的示例可以使您创建可行的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM