我有一个程序,可以在单个QByteArray中收到一个完整的块。这个块是"划分"与'回车''接下来是'结束行' (\r\n
)。在所有这些垃圾的中间,我有一个约会。最具体的是在第三行(第二行和第三行之间\r\n
)。
每当我尝试从ByteArray中提取这个日期时,我最终会得到一些随机垃圾。如何更准确地使用QByteArray?
在不改变ByteArray的情况下提取此日期的最佳方法是什么?考虑到我不知道日期,甚至可能是错误的格式。
仅出于理解目的,这是我的ByteArray的一个例子:
RandomName =名\ r \ nRandomID = ID \ r \ nRandomDate = 日期 \ r \ nRandomTime =时间\ r \ nRandomWhatever =任何(...)
编辑:
抱歉英文不好。
我们说我发送了以下文字:
ProgName = Marcus
ProgID = 180
ProgDate = 15.01.16
ProgTime = 13:39
(更多信息)......
但是,除了日期之外,这些信息都不对我有用。一切都存储在一个QByteArray中(让我们称之为' ba')。所以这是我的ba:
PROGNAME(空间)=(空间)马库斯\ r \ nProgID(空间)=(空间)180 \ r \ nProgDate(空间)=(空间)16年1月15日\ r \ nProgTime(空间)=(空间)13 :39 \ r \ n(继续)
我的问题是:存储" 15.01.16" (" ProgDate")在QString中没有改变或破坏ba。
答案 0 :(得分:2)
有多种方法,但请尝试以下解决方案之一。
1)使用split()
foreach (auto subByte, yourByteArray.replace("\r\n", "\n").split('\n')) {
qDebug() << subByte;
foreach (auto val, subByte.split('=')) {
qDebug() << val;
}
}
2)使用QRegularExpression / QRegularExpressionMatchIterator,使所有对(键,值)
QRegularExpression re("(\\w+)=(\\w+)");
QRegularExpressionMatchIterator i = re.globalMatch(yourByteArray);
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
qDebug() << match.captured(0)<< match.captured(1) << match.captured(2);
}
3)使用QRegularExpression / QRegularExpressionMatch
QRegularExpression re("(RandomDate)=(\\w+)");
QRegularExpressionMatch match = re.match(yourByteArray);
if (match.hasMatch())
qDebug() << match.captured(0)<< match.captured(1) << match.captured(2);