时间字符串减去
Time strings subtraction
读取
文件后的代码.dat并生成.csv格式化文件,该文件由许多帧名称(列(和各自的计时(微秒((行(组成,存储在由";"分隔的字符串中:
MFK3_ECAN 1625069169;1625072194;1625072216;1625072229;1625072241;1625072253;
MFK3_VIDEO_FrameID 1625334304;1625612508;1625890712;1626168916;1626447120;1626725324;
我需要帮助的是找到一个解决方案,通过该解决方案,可以为每个时间范围减去上述两个"特定名称"字符串(转换为秒,即 micsec/10^7(,并约束如果存在 3 秒或更长时间的时间差,则应将一个状态记录为".dat文件已损坏"。
部分代码读取.dat文件:
std::string file_name = m_Filename.toStdString();
size_t found = file_name.find (".dat");
file_name.erase (found, 4);
file_name.insert (found, "_Timestamp_Log");
file_name += ".csv";
m_log.open (file_name.c_str(), std::ofstream::out);
QList<tTimeStamp> tmp_lst;
for (int col = 0; col < m_nStreamCnt; col++)
{
tmp_lst = m_TimestampMap.value(col+1);
m_log << m_StreamIDMap.value(col+1).toStdString() << ";"; //writing Column names
for(int row = 0; row < tmp_lst.size(); row++)
{
m_log << QString::number(tmp_lst.at(row)).toStdString() << ";"; //writing Row values
}
m_log << endl;
}
m_log.close();
所以,最后我找到了解决方案。到目前为止,很明显我没有询问完整的信息。但是,尽管如此,希望该解决方案可以帮助可能遇到此类问题的其他人。
问题 1:我必须查找一个特定的流名称,然后通过 toFloat(( 存储它以供以后减法。注意:toInt(( 或 toStdString(( 会给出不正确的值。
问题 2:QString::number(tmp_lst[0]( 将给出从字符串中减去的第一个数字,并检查任一差值是否小于 3 秒。
for (int col = 0; col < m_nStreamCnt; col++) //m_nStreamCnt contains function names
{
tmp_lst = m_TimestampMap.value(col+1);
m_log << m_StreamIDMap.value(col+1).toStdString() << ";"; //Column names
if (m_StreamIDMap.value(col+1) == "MFK3_VIDEO_FrameID")
{
m_log << QString::number(tmp_lst[0]).toStdString() << ";"; //Row values
m_current = QString::number(tmp_lst[0]).toFloat();
m_current = m_current/10000000;
}
else if (m_StreamIDMap.value(col+1) == "MFK3_ECAN")
{
m_future = QString::number(tmp_lst[0]).toFloat(); //
m_future = m_future/10000000;
m_log << QString::number(tmp_lst[0]).toStdString() << ";"; //Row values
}
m_diff = std::abs(m_current - m_future); //
if (m_diff <= 3)
{ //details etc}
我无法从您的描述中看出您想要什么。也许遵循琐碎的代码会有所帮助?
long pre = -1;
for(int row = 0; row < tmp_lst.size(); row++)
{
//writing Row values
if (pre == -1 || ((long)tmp_lst.at(row) - pre) < 3000000) {
m_log << QString::number(tmp_lst.at(row)).toStdString() << ";";
} else {
m_log << ".dat file is corrup";
}
pre = tmp_lst.at(row);
}
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 通过字符串来计算长度需要更长的时间,而不是移动字符串几次?
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 如何将时间字符串 (M:SS) 转换为浮点数
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 时间持续时间到时间字符串
- 如何将我的每个矢量字符串转换为纪元时间日期
- 如何找到修改后的字符串与原始字符串相等的时间
- 在C++中修改字符串的BigO时间复杂度是多少
- 格式化的时间字符串在解析为time_point时会产生小时差异
- 使用 ctime 保存新时间点会覆盖旧字符串?
- 将日期字符串转换为 unix 时间戳
- 有序地图字符串搜索与整数搜索之间的时间复杂度
- 字符串连接时间复杂度 c++
- 提升,从字符串问题中获得时间
- C 将字符串时间戳转换为STD :: Chrono :: System_Clock :: Time_point
- 将字符串时间转换为UNIX时间戳
- 最接近地图的字符串/时间戳