Кодесинтез - Сравните строковое значение с последовательностью в C ++ - PullRequest
0 голосов
/ 22 ноября 2018

Я новичок в Codesynthesis, и мне интересно, как я могу сравнить строковые значения с последовательностью.

Например, у меня есть идентификатор сообщения "0x100", и я хочу проверить, находится ли он вОтправить последовательности.Если это так, я просто хочу получить имя сигнала в сообщении с идентификатором «0x100» (в данном случае: «один»), а не всю последовательность.

С моим кодом я могу получить всеИдентификаторы сообщений во всех последовательностях отправки, но я не знаю, как использовать их для сравнения со строковой переменной, соответственно, просто извлеките один элемент из последовательности и сохраните его в строковую переменную.

Как я могу это сделать?

Спасибо за вашу помощь!

Это XML:

<record>
  <signals>
    <Send name="Port1">
        <Message id="0x100">
            <Signal name="one"/>
        </Message>
        <Message id="0x101">
            <Signal name="two"/>
            <Signal name="three"/>
            <Signal name="four"/>
        </Message>
        <Message id="0x102">
            <Signal name="five"/>
        </Message>
        <Message id="0x103">
            <Signal name="six"/>
        </Message>
        <Message id="0x104">
            <Signal name="seven"/>
            <Signal name="eight"/>
            <Signal name="nine"/>
            <Signal name="ten"/>
        </Message>
        <Message id="0x105">
            <Signal name="eleven"/>
        </Message>
    </Send>
    <Send name="Port2">
        <Message id="0x106">
            <Signal name="twelve"/>
        </Message>
        <Message id="0x107">
            <Signal name="thirteen"/>
        </Message>
        <Message id="0x108">
            <Signal name="fourteen"/>
        </Message>
        <Message id="0x109">
            <Signal name="fifteen"/>
        </Message>
        <Message id="0x110">
            <Signal name="sixteen"/>
        </Message>
    </Send>
  </signals>
</record>

Вот как я читаю последовательности из XML:

string filename = "test.xml";
unique_ptr<record> h(record(filename));

signals::Send_sequence& s(h->signals().Send());
for (signals::Send_iterator i(s.begin()); i != s.end(); ++i)
{
        Send::Message_sequence& s2(i->Message());
        for (Send::Message_iterator j(s2.begin()); j != s2.end(); ++j)
        {
            Message& u(*j);
            cout << u.id() << endl;
        }

}

1 Ответ

0 голосов
/ 04 декабря 2018

К вашему сведению: я нашел решение.Это было довольно просто.

string filename = "test.xml";
unique_ptr<record> h(record(filename));

signals::Send_sequence& s(h->signals().Send());
for (signals::Send_iterator i(s.begin()); i != s.end(); ++i)
{
        Send::Message_sequence& s2(i->Message());
        for (Send::Message_iterator j(s2.begin()); j != s2.end(); ++j)
        {
            Message& u(*j);
            cout << u.id() << endl;

            //Check if theres a message
            if (u.id().present()) {

            //Put the message in a struct array (same with signals)
            info[NumberOfSends].messages[NumberOfMessages] = u.id().get(); //this is how you get it as a string
            NumberOfMessages++;
            }

        }

}NumberOfSends++;

Теперь вы можете использовать этот массив, чтобы сравнить его со строкой.

...