如何从 QByteArray 组织或提取信息
How to organize or extract info from a QByteArray
我有一个程序可以在单个 QByteArray 中接收一个完整的块。此块是 "divided",'carriage returns' 后跟 'end lines' (\r\n
)。在所有这些垃圾中,我有个约会。最具体的是在第三行(第二行和第三行之间\r\n
)。
每次我尝试从 ByteArray 中提取这个日期时,我都会得到一些随机垃圾。如何使用 QByteArray 更精确?
在不改变我的 ByteArray 的情况下提取此日期的最佳方法是什么?考虑到我不知道日期,它甚至可能是错误的格式。
为了便于理解,这里是我的 ByteArray 的示例:
RandomName=name\r\nRandomID=ID\r\nRandomDate=date\r\nRandomTime=time\r\nRandomWhatever=whatever(...)
编辑:
抱歉英语不好。
假设我收到了以下文本:
ProgName = Marcus
ProgID = 180
ProgDate = 15.01.16
ProgTime = 13:39
(More info)......
但是,none 这些信息对我很有用...除了日期。所有内容都存储在单个 QByteArray 中(我们称之为 'ba')。所以这是我的宝贝:
ProgName(space)=(space)Marcus\r\nProgID(space)=(space)180\r\nProgDate(space)=(space)15.01.16\r\nProgTime(space)=(space)13:39\r\n (keeps going)
我的问题是:在不改变或破坏 ba 的情况下将“15.01.16”("ProgDate")存储在 QString 中。
有多种方法,但请尝试以下解决方案之一。
1) 使用 split()
foreach (auto subByte, yourByteArray.replace("\r\n", "\n").split('\n')) {
qDebug() << subByte;
foreach (auto val, subByte.split('=')) {
qDebug() << val;
}
}
2) 使用 QRegularExpression/QRegularExpressionMatchIterator,使所有 pair(key, value)
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);
我有一个程序可以在单个 QByteArray 中接收一个完整的块。此块是 "divided",'carriage returns' 后跟 'end lines' (\r\n
)。在所有这些垃圾中,我有个约会。最具体的是在第三行(第二行和第三行之间\r\n
)。
每次我尝试从 ByteArray 中提取这个日期时,我都会得到一些随机垃圾。如何使用 QByteArray 更精确?
在不改变我的 ByteArray 的情况下提取此日期的最佳方法是什么?考虑到我不知道日期,它甚至可能是错误的格式。
为了便于理解,这里是我的 ByteArray 的示例:
RandomName=name\r\nRandomID=ID\r\nRandomDate=date\r\nRandomTime=time\r\nRandomWhatever=whatever(...)
编辑:
抱歉英语不好。
假设我收到了以下文本:
ProgName = Marcus
ProgID = 180
ProgDate = 15.01.16
ProgTime = 13:39
(More info)......
但是,none 这些信息对我很有用...除了日期。所有内容都存储在单个 QByteArray 中(我们称之为 'ba')。所以这是我的宝贝:
ProgName(space)=(space)Marcus\r\nProgID(space)=(space)180\r\nProgDate(space)=(space)15.01.16\r\nProgTime(space)=(space)13:39\r\n (keeps going)
我的问题是:在不改变或破坏 ba 的情况下将“15.01.16”("ProgDate")存储在 QString 中。
有多种方法,但请尝试以下解决方案之一。
1) 使用 split()
foreach (auto subByte, yourByteArray.replace("\r\n", "\n").split('\n')) {
qDebug() << subByte;
foreach (auto val, subByte.split('=')) {
qDebug() << val;
}
}
2) 使用 QRegularExpression/QRegularExpressionMatchIterator,使所有 pair(key, value)
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);