关于c#:如何逐行解析一个段落到一个数组?

How to parse a paragraph into an array line by line?

本问题已经有最佳答案,请猛点这里访问。

如果我有这样的段落:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
MODULE Local (Parent :="Local",
             ParentModPortId := 1,
              CatalogNumber :="1756-L71S",
              Vendor := 1,
              ProductType := 14,
              ProductCode := 158,
              Major := 27,
              Minor := 11,
              PortLabel :="RxBACKPLANE",
              ChassisSize := 13,
              Slot := 11,
              Mode := 2#0000_0000_0000_0001,
              CompatibleModule := 0,
              KeyMask := 2#0000_0000_0001_1111,
              SafetyNetwork := 16#0000_3acc_033e_6fa0)
END_MODULE

它目前在我的程序中保存为一个简单的字符串。现在,我想将每一行保存为数组中的一个条目,我该怎么做呢?


我注意到该格式与JSON非常相似,尽管使用了其他分隔符。

因此,解决这一问题的一种方法是将其转换为JSON:

  • 全部替换":="为"="
  • 用和替换(和)
  • 替换为;
  • 删除模块标签

然后您可以使用json-lib来解析它,例如newtonsoft,它在nuget上。

如果您事先知道期望什么样的字符串对,那么可以将其强制转换为一个已定义的类。否则,将其强制转换为动态(如果.NET版本对于动态来说太旧,则将其强制转换为字典),然后从中继续。


使用String.Split功能

1
string[] paragraph =yourString.Split(",");

尝试使用双引号作为转义字符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
String Para = @"MODULE Local (Parent :=""Local"",
         ParentModPortId:= 1,
          CatalogNumber:="
"1756-L71S"",
          Vendor:= 1,
          ProductType:= 14,
          ProductCode:= 158,
          Major:= 27,
          Minor:= 11,
          PortLabel:="
"RxBACKPLANE"",
          ChassisSize:= 13,
          Slot:= 11,
          Mode:= 2#0000_0000_0000_0001,
          CompatibleModule:= 0,
          KeyMask:= 2#0000_0000_0001_1111,
          SafetyNetwork:= 16#0000_3acc_033e_6fa0)
        END_MODULE"
;