首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Dictionary<string和string>在C#中解析

使用Dictionary<string和string>在C#中解析
EN

Stack Overflow用户
提问于 2011-05-19 11:34:14
回答 6查看 1.7K关注 0票数 4

我是编程新手,一直在努力解析文件。我,最初试图以某种方式解析它,但最终没有正确地工作。我想解析Dictionary<字符串string>中的以下行。

网卡:安装了7个网卡。

代码语言:javascript
运行
复制
                       [01]: Broadcom 
                             Connection Name: Local Area Connection
                             DHCP Enabled:    No
                             IP address(es)
                             [01]: abc.de.xyz.
                       [02]: Broadcom 
                             Connection Name: eth1
                             Status:          Media disconnected
                       [03]: Broadcom 
                             Connection Name: eth0
                             Status:          Media disconnected
                       [04]: Broadcom 
                             Connection Name: eth3
                             Status:          Media disconnected
                       [05]: Mellanox 
                             Connection Name: Local Area Connection 5
                             Status:          Hardware not present
                       [06]: Mellanox 
                             Connection Name: Local Area Connection 6
                             Status:          Media disconnected
                       [07]: Mellanox 
                             Connection Name: Local Area Connection 7
                             DHCP Enabled:    No
                             IP address(es)
                             [01]: mno.pqr.stu.vwx

我希望将01 Broadcom作为字典的键,连接名称为: Local Area Connection DHCP Enabled: No IP address(es) 01: abc.de.xyz作为其他六个键的值,依此类推。谢谢你的帮助。真的很感谢。任何关于如何做到这一点的帮助都将是很好的,因为我已经疯狂地阅读了关于拆分字符串的内容,并试图弄清楚如何让字典存储值。

EN

Stack Overflow用户

发布于 2011-05-19 12:17:24

请原谅任何糟糕的C#语法--我已经习惯了VB .NET,请不要笑。

我会先将文件的文本行读入字符串数组。

代码语言:javascript
运行
复制
foreach (string line in File.ReadLines("path-to-file")) {

}

对于每一行,您要么在"key“行上,要么在"value”行上。关键行如下所示:

代码语言:javascript
运行
复制
[01]: Broadcom

要确定您是否在"key“线路上,您可以尝试类似line.Trim().StartsWith("[")的命令,但这不会可靠地工作,因为您还有其他类似[01]: abc.def.ghi.jkl的线路,它们是IP地址,而不是key。因此,您需要更聪明一点,甚至可以使用正则表达式来检测您正在查看的是IP地址还是网卡。我不知道您正在查看的文件的确切规格,但您也可以使用前导空格/制表符来帮助您确定您是在"key“行还是在"value”行。

然后,您的代码将如下所示:

代码语言:javascript
运行
复制
var networkCards = new Dictionary<String, String>();
string currentKey = String.Empty;

foreach (string line in File.ReadLines("path-to-file")) {
  if ( IsKeyLine( line ) ) {
    currentKey = line.Trim();
    networkCards.Add(currentKey, "");
  } else {
    networkCards[currentKey] += line.Trim() + " ";
  }
}

需要编写IsKeyLine方法,它是整个操作的关键。以下是您可能使用的基于正则表达式的方法:

代码语言:javascript
运行
复制
public bool IsKeyLine(string line) {
  if (!String.IsNullOrEmpty(line)) {
    //run two regexes - one to see if the line is of the general pattern of a "key" line
    //the second reg ex makes sure there isn't an ip address in the line, which would indicate that the line is part of the "value" and not the "key"
    return System.Text.RegularExpressions.RegEx.IsMatch(line, @"^\s*\[\d{0,2}\]: ")
      && !System.Text.RegularExpressions.RegEx.IsMatch(line, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}");
  }

  return false;
}

现在,我没有花时间测试这些代码-这是我的头顶。但它至少应该让你朝着正确的方向前进。不过,要确定的最大问题是文件格式的标准。这将给你一些线索,让你走上正确的道路。您甚至可能不需要正则表达式(这会更好,因为regex的运行成本通常很高)。

票数 2
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6053447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档