2011-03-01 57 views
1

我目前正在开发一个远程控制软件。该单位提供以下字符串(没有任何linebreak或什么):从字符串中获取各种变量的最有效方法

...some_general_infomations,param1=value1,param2=value2,param3=value3,paramN=valueN,... 

我需要以某种方式将这些值分配给一些变量。由于这个字符串的长度是变化的,我不能使用子字符串(纠正我,如果我错了)。

什么是最有效(最快)的方式来做到这一点?

编辑: @ Darin的解决方案,大部分的消息都工作良好,但在这里,这是一个真正棘手:

CFG=0<\r><\n>BOU=0<\r><\n>ALA:D1=132,D2=0,D3=0<\r><\n>COD1:S=13<\r><\n>-C1=5,N1=12345678,CLS=0,VAL=0<\r><\n>-C2=5,N2=,CLS=0,VAL=0<\r><\n>COD2:S=0<\r><\n>-C1=0,N1=,CLS=0,VAL=0<\r><\n>ENT:APPEL1=0,APPEL2=0<\r><\n>USI:DEP=0,AES=1,V8K=1,FIL=1,DSP=0,RSC=1,AL3=0,TDA=1,A64=0,CCS=0,RES=0,xxx=0,xxx=0,5AS=1<\r><\n>PERF:<\r><\n>-DMIN=0,0,<\r><\n>OK<\r><\n> 

我至少需要获得S,C1,N1的值。即使我删除了换行符,这些参数也可以用逗号或冒号分开。 我怎么处理这个字符串?

+0

拆分对通过<\r><\n>。 string [] pairs = words.Split(new String [] {@“<\r><\n>”},StringSplitOptions.None); – v00d00 2011-03-02 13:58:12

回答

4

一个很好的“醇拆分应该工作:

var input = "...some_general_infomations,param1=value1,param2=value2,paramN=valueN"; 
var tokens = input.Split(','); 
if (tokens.Length > 0) 
{ 
    foreach (var token in tokens) 
    { 
     var parts = token.Split('='); 
     if (parts.Length > 1) 
     { 
      string paramName = parts[0]; 
      string paramValue = parts[1]; 
     } 
    } 
} 
+0

谢谢你,我会试试这个,现在就让你。令人难以置信的是我得到了多快的响应... – lenniep 2011-03-01 20:48:38

+0

忽略格式错误的数据? – 2011-03-01 20:49:06

+0

@Yuriy Faktorovich,这将取决于项目要求。在我的情况下,我无视它,因为它是畸形的。但是如果需要处理格式不正确的字符串,这将是可能的。 – 2011-03-01 20:50:25

2

使用字符串类的Split方法。

string[] pairs = words.Split(new Char [] {','}); 
foreach(string pair in pairs) 
{ 
    string[] kv = pair.Split(new Char [] {'='}); 

    // kv[0] will hold the pair param name 
    // kv[1] will hold the pair param value 
} 

有代码的几个假设 - 你只需要对受,和每一对都有名称和值之间的分隔=名称/值。

1

正则表达式是做这件事的标准方法;像这样:

​​
+0

RegEx似乎是解决这个问题的一个有趣的方式,但是你看过我的最后一次编辑吗?你会如何处理该字符串? – lenniep 2011-03-02 13:42:53

+0

是“<\r><\n>”意思是表示一个换行符,0x0d 0x0a? – 2011-03-02 18:49:14

+0

下面的正则表达式会提取S的值:/ \ bS =([^,:\ r \ n] +)/ - 如果你在.NET中这样做,你将循环遍历返回集合。火柴()。如果它不是.NET,\ b可能不是正确的方式来断言一个字边界。正则表达式是一个很大的主题。 – 2011-03-02 18:49:41

相关问题