【问题标题】:How to parse a paragraph into an array line by line? [duplicate]如何将段落逐行解析为数组? [复制]
【发布时间】:2017-01-29 20:54:21
【问题描述】:

如果我有这样的段落:

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

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

【问题讨论】:

  • 如果, 是一个共同点,那么为什么不拆分, 上的数据
  • 根本不清楚您要实现什么。您提到的代码是文本输入还是其他?输入是如何存储的?您是从磁盘还是从数据库中读取它?您的问题缺少太多信息,几乎无法回答。查看常见问题解答,了解如何提出好的问题。
  • 请更具体地说明您想要的最终结果。您希望如何格式化数组中的各个字符串?
  • @GregB 我正在从磁盘上读取它,但我不确定这有什么帮助,作为读者也不是那么安全吗?如果我使用的是服务器,我会在这里询问 SQL 或类似的东西。编辑我的评论的人将文本块解析为一个格式为代码块的数组。这只是文字。一个大段落与返回键隔开,当我尝试将它放入一个字符串变量时,它会导致问题,如下所示:gyazo.com/1aae0d19c02b6636d84fdd80bebb70c7.

标签: c# arrays parsing paragraph


【解决方案1】:

使用String.Split函数

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

尽量使用双双引号作为转义字符

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";

【讨论】:

  • 字符串是在我上面发布的那个块中格式化的,所以如果我像这样粘贴它:string paragraph = "//thatblock" 那么我会收到这些错误,请参阅?@JaydipJ gyazo.com/1aae0d19c02b6636d84fdd80bebb70c7
  • 它没有用。 gyazo.com/63bfe0c4fcc87b7165f6145efc6e4b07我的字符串在'Local'之前结束
  • 哦,等一下,你可以在@中使用双双引号转义吗??
  • 好吧,终于让它工作了。我还使用 (new string[] { Environment.NewLine }, StringSplitOptions.None) 作为拆分的参数,因为我在需要的某些行上有逗号。
【解决方案2】:

我观察到格式与 JSON 非常相似,尽管有其他分隔符。

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

  • 将所有“:=”替换为“=”
  • 将 ( 和 ) 替换为 { 和 }
  • 用 ; 替换 ,
  • 删除 MODULE 标签

然后您可以使用 JSON 库对其进行解析,例如 NuGet 上的 NewtonSoft。

如果您事先知道预期的字符串对,则可以将其转换为已定义的类。否则,将其转换为动态(如果您的 .NET 版本对于动态来说太旧,则转换为字典)并从那里继续。

【讨论】:

  • 这些值非常敏感,对这些字符串至关重要,我无法替换或更改其中的任何内容。
  • 它们有多重要?它们是分隔符,您可以从字面上将它们替换为任何内容,然后在需要时反转替换以获取原始内容。
猜你喜欢
  • 2012-10-11
  • 1970-01-01
  • 2017-01-27
  • 2011-11-02
  • 1970-01-01
  • 2010-11-05
  • 2021-05-09
  • 2013-07-14
  • 1970-01-01
相关资源
最近更新 更多