如何在没有明确的定界符的情况下解析键值字符串?

PNDA

我正在制作一个控制3D打印机的小程序。当我发送一些东西时,它通常会以响应ok,但是如果出现问题,它会发送如下信息:

 T:221.0 /220.0 @:0 W:1

如果它有适当的定界符,我可以轻松地对其进行解析,但是由于有string,因此使用空间并不可靠221.0 /220.0因此,如果我将空格用作定界符,则/220.0可以将其视为键值对,但是由于键位于under,因此没有键T我打算获取每个冒号的索引,并在其后面简单地以1个字符开头,但是密钥长度也是可变的。例如:

 T:221.0 /220.0 B@:127 @:0 W:1

B@ 现在有两个字符长。

我进行了一些研究,但发现的所有内容都有适当的分隔符,例如带有数据URL

http://www.niederschlagsradar.de/images.aspx?jaar=-6&type=europa.cld&datum=201311161500&cultuur=en-GB&continent=europa

我打算获取每个冒号的索引,然后在找到冒号作为起点时向后搜索一个空间。同样,下一个键值对的起点将用作上一个键值对的终点。但是,我不确定这是否是正确的方法。

主要问题: 如何解析没有适当定界符的字符串?我真的没有特定的要求。可以是数组或列表,可以将键和值的变量分开,也可以将所有内容推入数组,以便

string[] data = {key1,value1,key2,value2,key3,value3};

更新:这是第二个示例中的键/值对:

Key:Value
  T:221.0 /220.0
 B@:127
  @:0
  W:1

一些示例:

 T:221.0 /220.0 B:85.7 /120 B@:30W @:0 W:8

Key:Value
T:221.0 /220.0
B:85.7 /120
B@:30W
@:0
W:8

这是另一个更复杂的例子:

 T:171.4 /220.0 B:90.3 /120 T1:171.4 /220.0 B@:30 @:12W W:6

Key:Value
T:171.4 /220.0   // Temperature of first nozzle heater
B:90.3 /120      // Temperature of the hot plate it's printing on
T1:171.4 /220.0  // Temperature of the second nozzle heater if it exists
B@:30            // Raw power consumption of hotbed (unit depends on config)
@:12W            // Power of of nozzle in Watts (unit depends on config)
W:6              // Waiting time (in seconds). If the optimal conditions are met and this counts down to zero, printing resumes. Else, reset to 10.

样本字符串开头的空格是有意的。它确实以空格开头。对于那些感兴趣的人,这些是运行Marlin 3D打印固件的Arduino Mega的答复。这些是打印机加热器温度尚未高到无法挤出时的答复。

相关:如何解析字符串以在其中查找键值对

影子接种疫苗的向导

我会遵循以下逻辑:

  1. 按冒号分隔。
  2. 第一项始终是第一把钥匙。
  3. 最后一个项目始终是最后一个值。
  4. 对于每个中间项目(从第二个项目开始),检查最后一个空格的索引。直到最后一个空格的所有内容都是最新键的值,右边的所有内容都是下一个键。

代码:

private List<KeyValuePair<string, string>> ParsePrinterResponse(string rawResponse)
{
    List<KeyValuePair<string, string>> pairs = new List<KeyValuePair<string, string>>();
    string[] colonItems = rawResponse.Trim().Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
    if (colonItems.Length > 1)
    {
        string currentKey = colonItems[0], currentValue = "";
        for (int i = 1; i < colonItems.Length; i++)
        {
            string currentItem = colonItems[i];
            int spaceIndex = currentItem.LastIndexOf(" ");
            if (spaceIndex < 0)
            {
                //end of string, whole item is the value
                currentValue = currentItem;
            }
            else
            {
                //middle of string, left part is value, right part is next key
                currentValue = currentItem.Substring(0, spaceIndex);
            }
            pairs.Add(new KeyValuePair<string, string>(currentKey, currentValue));
            currentKey = currentItem.Substring(spaceIndex + 1);
        }
    }
    return pairs;
}

用法样本:

errorBox.Lines = ParsePrinterResponse("T:171.4 /220.0 B:90.3 /120 T1:171.4 /220.0 B@:30 @:12W W:6").ConvertAll(p =>
{
    return string.Format("{0}:{1}", p.Key, p.Value);
}).ToArray();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Java中,如何在不使用方括号中的定界符的情况下拆分字符串?

来自分类Dev

似乎没有定界符的字符串解析

来自分类Dev

如何在不创建存储过程的情况下基于DB2中的某个定界符拆分字符串

来自分类Dev

解析带有多个定界符的字符串

来自分类Dev

拆分没有通用定界符的字符串

来自分类Dev

C将字符串解析为没有定界符的单独变量?

来自分类Dev

如何拆分没有定界符但固定位数的字符串-python

来自分类Dev

如何拆分没有定界符但固定位数的字符串-python

来自分类Dev

如何在没有货币格式的情况下将字符串解析为浮点数?

来自分类Dev

如何在没有连接字符串的情况下打开EntityConnection

来自分类Dev

如何在python中没有regex的情况下检查字符串的要求?

来自分类Dev

如何在没有itoa()的情况下将任何变量更改为字符串?

来自分类Dev

如何在没有函数体的情况下打印函数的返回字符串?

来自分类Dev

java - 如何在没有任何for循环的情况下制作字符串替换程序?

来自分类Dev

如何在没有字符串的情况下验证正文响应?

来自分类Dev

如何在没有引号的情况下多次使用的字符串中查找单词

来自分类Dev

如何在没有已知格式的情况下将字符串分成不同的子字符串

来自分类Dev

如何在没有新数组的情况下读取字符串数组并返回字符串

来自分类Dev

有人可以向我解释为什么python 3.4在没有我明确要求的情况下将字符串解析为int

来自分类Dev

解析字符串时忽略后续定界符

来自分类Dev

Java:基于定界符解析字符串

来自分类Dev

使用字符串定界符解析整数

来自分类Dev

c-如何在没有输入且没有字符串的情况下中断scanf

来自分类Dev

解析带有定界符的字符串并将其加载到映射中?

来自分类Dev

具有4个定界符的TSQL解析字符串

来自分类Dev

如何在没有换行符的情况下停止字符串中的正则表达式捕获,而仍然无法全局捕获?

来自分类Dev

分割或分离不规则/不相等的字符串,没有定界符

来自分类Dev

分割在Oracle中没有定界符的字符串

来自分类Dev

如何在某些不可打印字符定界符处分割字符串?

Related 相关文章

  1. 1

    在Java中,如何在不使用方括号中的定界符的情况下拆分字符串?

  2. 2

    似乎没有定界符的字符串解析

  3. 3

    如何在不创建存储过程的情况下基于DB2中的某个定界符拆分字符串

  4. 4

    解析带有多个定界符的字符串

  5. 5

    拆分没有通用定界符的字符串

  6. 6

    C将字符串解析为没有定界符的单独变量?

  7. 7

    如何拆分没有定界符但固定位数的字符串-python

  8. 8

    如何拆分没有定界符但固定位数的字符串-python

  9. 9

    如何在没有货币格式的情况下将字符串解析为浮点数?

  10. 10

    如何在没有连接字符串的情况下打开EntityConnection

  11. 11

    如何在python中没有regex的情况下检查字符串的要求?

  12. 12

    如何在没有itoa()的情况下将任何变量更改为字符串?

  13. 13

    如何在没有函数体的情况下打印函数的返回字符串?

  14. 14

    java - 如何在没有任何for循环的情况下制作字符串替换程序?

  15. 15

    如何在没有字符串的情况下验证正文响应?

  16. 16

    如何在没有引号的情况下多次使用的字符串中查找单词

  17. 17

    如何在没有已知格式的情况下将字符串分成不同的子字符串

  18. 18

    如何在没有新数组的情况下读取字符串数组并返回字符串

  19. 19

    有人可以向我解释为什么python 3.4在没有我明确要求的情况下将字符串解析为int

  20. 20

    解析字符串时忽略后续定界符

  21. 21

    Java:基于定界符解析字符串

  22. 22

    使用字符串定界符解析整数

  23. 23

    c-如何在没有输入且没有字符串的情况下中断scanf

  24. 24

    解析带有定界符的字符串并将其加载到映射中?

  25. 25

    具有4个定界符的TSQL解析字符串

  26. 26

    如何在没有换行符的情况下停止字符串中的正则表达式捕获,而仍然无法全局捕获?

  27. 27

    分割或分离不规则/不相等的字符串,没有定界符

  28. 28

    分割在Oracle中没有定界符的字符串

  29. 29

    如何在某些不可打印字符定界符处分割字符串?

热门标签

归档