我正在尝试解析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
}
答案 0 :(得分:0)
答案 1 :(得分:0)
我更喜欢使用解析器组合器(一种使用解析器构建块构建解析器的工具)而不是解析器生成器。我有Piglet的可用经验,用C#编写,并且非常易于使用,并且使用FParsec获得了惊人的体验,但它是为F#编写的。
就解析器生成器而言,有stmax建议的那些,还有TinyPG,一位成员推荐我一次。
您也可以滚动自己的解析器。我建议将它基于某种状态机模型,尽管在这个简单的情况下,像Kirk Woll建议的那样,你可能会通过一些简单的旧字符串操作来实现。
答案 2 :(得分:0)
我认为这个问题的答案取决于文件中是否会有多个ASSAY_NUMBER值。如果是这样,我知道的最简单和最可靠的方法是逐行读取文件并获取所需的数据。
但是,如果你知道每个文件对于特定的ASSY_NUMBER是唯一的,那么你有一个更简单的答案:将文件作为一个字符串读取并使用REGEX来提取所需的信息。我不是REGEX的专家,但网上有足够的例子,你应该能够创建一个有效的例子。