采集元数据的C++实现

我要做的是提取Test_case的名字,以及Test_case的持续时间(单位秒):下面是一段示例元数据

Start| 20140618 root (6033) | tpi 1.4 | 14:53:52 10050943579848 0 |
Start| 20814 SunOS 5.11 11.2 i86pc tcx4440-01 |
STF_ENV| STC_NAME = os-zones |
STF_ENV| STC_VERSION = 2.10.0 |
STF_ENV| STC_OS_VERSION = 5.11 |
STF_ENV| STF_EXECUTE_MODE = ipkg:amd64 |
STF_ENV| cwd = /opt/stc/suites/os/zones/tests/os/functional |
Test_Case_Start| 20858 tests/os/functional/setup | 14:53:52 10051107110387 0 |
stdout|
stdout| 14:53:53 SUCCESS: zone_is_running zone2
stdout| zone 'zone2' is running
stdout|
stdout| 14:53:53 SUCCESS: zone_is_running zone1
stdout| zone 'zone1' is running
stdout| 14:53:53 zones 'zone2 zone1 ' are running
Test_Case_End| 20858 tests/os/functional/setup | PASS | 14:53:53 10052165298138 0 |

我想要得到的结果是:

tests/os/functional/setup    1

由于我的元数据比较小(不会超过20MB,所以我选择用vector),源代码如下:

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;

/*
*  There are not split function, you should add one by yourself
*/
vector<string> split(const string &str, string pattern){
    string :: size_type pos;
    vector <string> result;
    int size = str.size();

    int i = 0;
    for(i = 0; i < size; i++){
        pos = str.find(pattern, i);
        if(pos < size){
                string subStr = str.substr(i, pos - i);//substr(beginPosition, length) 

                //cout<<"i = "<<i<<" ,pos - 1 = "<<pos - 1<<endl;
                //cout<<str.substr(i, pos - i)<<endl;

                result.push_back(subStr);
                i = pos + pattern.size() - 1;
               //cout<<subStr<<endl;
               //cout<<"i="<<i<<endl;
        }

    }

    return result;

}
/*
*	Duration Time  = endTime - startTime
*	eg: Duration Time = 1:10:08 - 23:08:08 = (25 * 3600 + 10 * 60 + 8) - (23 * 3600 + 8 * 60 + 7)
*/
int getDurationTime(string startTime, string endTime){

	vector<string> startTimeVector;
	vector<string> endTimeVector;
	int startTimeSeconds = 0;
	int endTimeSeconds = 0;
	startTime = startTime+":";//1:10:08 , if we do not add ":", we can not get 08
	endTime = endTime + ":";
	endTimeVector = split(endTime, ":");
	startTimeVector = split(startTime, ":");
	startTimeSeconds = atoi(startTimeVector[0].c_str()) * 3600 + atoi(startTimeVector[1].c_str()) * 60 + atoi(startTimeVector[2].c_str());
	endTimeSeconds = atoi(endTimeVector[0].c_str()) * 3600 + atoi(endTimeVector[1].c_str()) * 60 + atoi(endTimeVector[2].c_str());
	if(endTimeSeconds < startTimeSeconds) {
		endTimeSeconds = endTimeSeconds + 24 * 3600;
	}
//	cout<<"endTimeSeconds:"<<endTimeSeconds << "	startTimeSeconds:"<<startTimeSeconds<<endl;
//	cout<<endTimeSeconds - startTimeSeconds<<endl;
	return endTimeSeconds - startTimeSeconds;

}

int main()
{
    vector< pair<string, int> > caseDurationVec;

    string journalInput = "journal.base";
    string journalOutput = "journal.base.out";

    ifstream infile(journalInput.c_str());
    ofstream outfile(journalOutput.c_str());

    string buffer;
    const string Case_Start = "Test_Case_Start";
    const string Case_End = "Test_Case_End";

    int i = 0;
    vector<string> resultVec;
    string caseStartTime = "";
    string caseEndTime = "";

    while(getline(infile, buffer)){

        if(buffer.find(Case_Start) != buffer.npos){
                resultVec =  split(buffer," ");
                caseStartTime = resultVec[4];

        }
        if(buffer.find(Case_End) != buffer.npos){
                resultVec =  split(buffer," ");
                caseEndTime = resultVec[6];
                caseDurationVec.push_back(make_pair<string, int>(resultVec[2], getDurationTime(caseStartTime, caseEndTime)));
                cout<<"There are "<<i++<<"cases"<<endl;
        }

    }

    vector< pair<string, int> > :: iterator iter;

    for(iter = caseDurationVec.begin(); iter != caseDurationVec.end(); iter++)
    {
        outfile<<iter->first<<"    "<<iter->second<<endl;
    }

    infile.close();
    outfile.close();
    //system("pause");

    return 1;
}
时间: 2024-08-07 05:13:58

采集元数据的C++实现的相关文章

数据库表元数据管理与监控

1.ResultSet getColumns? https://docs.oracle.com/en/java/javase/11/docs/api/java.sql/java/sql/DatabaseMetaData.html#getColumns(java.lang.String,java.lang.String,java.lang.String,java.lang.String) https://docs.oracle.com/en/java/javase/11/docs/api/java

SqlerMonitor-复制

在复制系统中因为一些配置上失误和人为的失误操作导致复制堵塞,Sqler Monitor 新增加了分析复制延迟邮件,配合复制错误监控邮件和延迟邮件,和复制元数据采集 可以在第一时间准确定位到问题,适合大批量,自动化运维. 复制堵塞分析报警 复制延迟邮件 复制错误分析邮件 复制 元数据采集 元数据采集脚本: repl 元数据采集脚本

大数据理论体系总结--数据仓库管理与全链路数据体系

前言 就这样,大数据领域蓬勃发展了好几年,有很多伙伴执迷于技术,成为了分布式计算与存储的领域专家.也有很多伙伴执迷于数据,成为了行业的数据研发专家.当然还有很多小伙伴,热衷于工具系统开发,成为了数据技术专家.那么我们回过头来考虑,什么是大数据,什么又是数据仓库,什么又是数据技术.大数据其实是个非常笼统的感念,它是由数据仓库演化而来的数据与技术方法论,那么我们先说一下数据仓库的由来: 早在多年以前在Hadoop.Spark.Storm.Kafka等系列分布式计算与存储.消息中间件还没有成熟的时候,

【转载】主数据管理(MDM)与元数据管理

主数据(Master Data)和元数据(Meta Data)是两个完全不同的概念.元数据是指表示数据的相关信息,比如数据定义等,而主数据是指实例数据,比如产品目录信息等.比如,某省地税开发了一套 征收管理软件,以市为单位部署了17套,每套征收管理软件中的元数据都是一样的,但是主数据还是需要进行管理的.主数据管理和传统数据仓库解决方案不是一 个概念,数据仓库会将各个业务系统的数据集中在一起在进行业务的分析,而主数据管理系统不会把所有数据都管理起来,只是把需要在各个系统间共享的主数据进 行采集和发

hive元数据研究

hive的元数据存放在关系型数据库中,元数据中存储了hive中所有表格的信息,包括表格的名字,表格的字段,字段的类型,注释.这些信息分散的存放在各个表中,给定一个hive中的表格名字,查询这个表中含有的所有字段,使用如下的SQL语句: mysql> select COLUMNS_V2.* from COLUMNS_V2,SDS, TBLS where COLUMNS_V2.CD_ID = SDS.CD_ID and SDS.SD_ID = TBLS.SD_ID and TBLS.TBL_NAME

数据仓库主题设计及元数据设计

明确仓库的对象:主题和元数据 大多数商务数据都是多维的,所以采集和表示三维以上的数据不能完全借用业务数据库设计中的方法,必须有一种新的方法来表达多维数据.现阶段流行的有2种方 法,一是面向对象方法,即把商务数据抽象为对象,再使用Rational Rose等对象建模工具来表达这些对象:另一种方法就是使用信息包图,这是一种简便且高效的方法,在项目中使用的普及率很高. 信息包图实际上是自上而下数据建模方法的一个很好的工具.自上而下的建模技术从用户的观点开始设计.用户的观点是通过与用户交流得到的,可以进

Oracle Enterprise Metadata Management (简称OEMM,Oracle元数据管理)12.1.3.0.1已经发布

在数据处理及数据仓库建设中,元数据管理是必不可少的,OEMM可以解决元数据管理过程中各种关键业务问题和技术挑战,其中包括如何元数据的统计信息,了解变更数据之后对下游的影响范围,而且OEMM站在业务的角度在浏览器中进行展现,并且可以在报表中展现企业内完整的元数据信息,用于分析和改进元数据管理.OEMM针对客户迫切的需求建立一个轻量级的基于浏览器的管理工具,当前的版本是12.1.3.0.1. 使用OEMM 12.1.3.0.1,你会发现业务术语表的更新等功能,为用户界面带来更好的体验,同时对元数据改

webmagic采集CSDN的Java_WebDevelop页面

项目中使用到了webmagic,采集论坛一类的页面时需要一些特殊的配置.在此记录一下 先来看看我要采集的页面 点击第2页可以看到它的url是http://bbs.csdn.net/forums/Java_WebDevelop?page=2 点击尾页可以看到它的url是http://bbs.csdn.net/forums/Java_WebDevelop?page=758 也就是说我们需要采集的范围是从2到758页 这样我们就可以通过自己拼接一个url来模拟所有 的连接了代码如下: <span st

Linux系统日志远程采集

一台正常提供服务Linux服务器,每时每刻都在产生着大量的日志信息,若生产环境中,有几十台甚至上百台服务器,那么一台一台的去查看系统的日志是非常麻烦的. 在技术不断更新的今天,有很多可以技术可以对日志进行集中管理,最普遍的操作还是要属ELK日志分析系统了,不过这些日志是如何产生的?是由哪个服务来进行统一管理的呢?这篇文章就围绕着系统日志的服务--rsyslog这个服务来叙述一下. Linux系统中有很多日志类型,如下是一些系统本身产生的日志文件: /var/log/boot.log /var/l