【问题标题】:How to extract exact values from a very long string c#如何从很长的字符串中提取精确值c#
【发布时间】:2021-11-13 04:49:38
【问题描述】:

所以,我有这个很长的字符串

        <Type>3</Type>
      <X>1018</X>
      <Y>800</Y>
      <Delay>22</Delay>
    </MouseMovementEvent>
    <MouseMovementEvent>
      <Type>3</Type>
      <X>1014</X>
      <Y>805</Y>
      <Delay>22</Delay>
    </MouseMovementEvent>
    <MouseMovementEvent>
      <Type>3</Type>
      <X>1010</X>
      <Y>810</Y>
      <Delay>62</Delay>
    </MouseMovementEvent>
  </MouseMovement>
</MacroEvent>
<MacroEvent>
  <Type>2</Type>
  <MouseEvent>
    <MouseButton>1</MouseButton>
    <State>1</State>
  </MouseEvent>
</MacroEvent>
<MacroEvent>
  <Type>2</Type>
  <MouseEvent>

等等……

如何将“x”和“y”值提取到数组 [X, Y] 和“延迟”到单独的数组中? C#

【问题讨论】:

  • 你的字符串看起来像 xml - 所以尝试解析它。
  • 是的,它本质上是一个 .xml 文件,但我正在考虑将其放入一个字符串变量中:D

标签: c# arrays string


【解决方案1】:

这可以通过 Linq to XML 轻松完成。 我尝试修复给定的 xml 片段,使其成为有效的 XML。

注意:XElement 也可以加载 xml 文件。

XElement events = XElement.Parse(       @"<Root>
                                            <MacroEvent>  
                                              <MouseMovement>
                                                <MouseMovementEvent>
                                                  <Type>3</Type>
                                                  <X>1018</X>
                                                  <Y>800</Y>
                                                  <Delay>22</Delay>
                                                </MouseMovementEvent>
                                                <MouseMovementEvent>
                                                  <Type>3</Type>
                                                  <X>1014</X>
                                                  <Y>805</Y>
                                                  <Delay>22</Delay>
                                                </MouseMovementEvent>
                                                <MouseMovementEvent>
                                                  <Type>3</Type>
                                                  <X>1010</X>
                                                  <Y>810</Y>
                                                  <Delay>62</Delay>
                                                </MouseMovementEvent>
                                              </MouseMovement>
                                            </MacroEvent>
                                            <MacroEvent>
                                              <Type>2</Type>
                                              <MouseEvent>
                                                <MouseButton>1</MouseButton>
                                                <State>1</State>
                                              </MouseEvent>
                                            </MacroEvent>
                                          </Root>");


        IEnumerable<((int x, int y) coords, int delay)> movementEvents = from mouseMovementEvent in events.Descendants("MouseMovementEvent")
                                                        select ((Int32.Parse(mouseMovementEvent.Element("X").Value), Int32.Parse(mouseMovementEvent.Element("Y").Value)), Int32.Parse(mouseMovementEvent.Element("Delay").Value));

        (int x, int y)[] coords = movementEvents.Select(e => e.coords).ToArray();
        int[] delay = movementEvents.Select(e => e.delay).ToArray();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多