0

我正在尝试解析 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
}
4

3 回答 3

0

我更喜欢使用解析器组合器(一种使用解析器构建块构建解析器的工具)而不是解析器生成器。我对Piglet有过良好的经验,它是用 C# 编写的,非常易于使用,并且对FParsec有惊人的体验,但它是为 F# 编写的。

就解析器生成器而言,有 stmax 建议的,还有TinyPG,曾经有人推荐过我。

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

于 2012-06-06T20:12:05.107 回答
0

你可以一起破解一些东西,或者使用像ANTLRCoco/R这样的解析器生成器。两者都可以在 C# 中生成解析器。

于 2012-06-06T19:34:40.273 回答
0

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

但是,如果您知道每个文件对于特定的 ASSY_NUMBER 都是唯一的,那么您有一个更简单的答案:将文件作为一个字符串读取并使用 REGEX 提取您想要的信息。我不是 REGEX 方面的专家,但网上有足够多的示例,您应该能够创建一个有效的示例。

于 2015-11-02T13:25:25.060 回答