Кодсинтез — Сравните строковое значение с последовательностью в переполнении стека

Я новичок в 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;
}

}

0

Решение

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

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++;

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]