基于C++的txt文档log数据提取

 

#include <vector>
#include <string>
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <math.h>
#include <fstream>
#include <sstream>

std::vector<std::string> split(const std::string& str, const std::string& delim) 
{  
	std::vector<std::string> res;  
	if("" == str) return res;  
	//先将要切割的字符串从string类型转换为char*类型  
	char * strs = new char[str.length() + 1] ; 
	strcpy(strs, str.c_str());   
 
	char * d = new char[delim.length() + 1];  
	strcpy(d, delim.c_str());  
 
	char *p = strtok(strs, d);  
	while(p) {  
		std::string s = p; 
		res.push_back(s); 
		p = strtok(NULL, d);  
	}  
	return res;
}

int readTxtData(std::string fileName, std::string dataName, std::vector<double>& radius_x)
{
    std::ifstream myfile(fileName);
	if (!myfile.is_open()) 
    {
		std::cout << "Unable to open file:" << fileName << std::endl;
		return -1;
	}
	std::vector<std::string> vec;
	std::string temp;

    bool isReadDataName = false;
    int dataNum = -1;
	while (getline(myfile, temp)) 
	{
        if(isReadDataName)
            vec.push_back(temp);
        else
        {
            std::vector<std::string> result = split(temp, "\t");
            for(int i = 0; i < result.size(); i++)
            {
                if(result[i] == dataName)
                {
                    dataNum = i;
                    std::cout << "dataNum:" << dataNum << std::endl;
                    isReadDataName = true;
                    break;
                }
            }
            if(dataNum < 0)
            {
                myfile.close();
                return -2;
            }
        }
	}
	for (auto it_x = vec.begin(); it_x != vec.end(); it_x++)
	{
		// std::cout << *it_x << std::endl;
		std::istringstream is(*it_x); 
		std::string s_x;
		int pam = 0;
		while (is >> s_x) 
		{
			if (pam == dataNum)     
			{
				double r_x = atof(s_x.c_str());    
				radius_x.push_back(r_x);
			}
			pam++;
		}
	}

    return 0;
}

int main()
{
    std::vector<double>& radius_x;
    readTxtData("speedLog.txt", "x", radius_x);
    std::cout << radius_x << std::endl;
}

上一篇:JS 变量提升, 函数提升


下一篇:根据出生日期算出年龄