使用制表符分隔文本填充字符串向量

时间:2016-03-04 01:53:02

标签: c++ file vector tabs delimited

我对C ++很新。

我正在尝试使用制表符分隔文件中的元素填充向量。最简单的方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:0)

可以通过多种方式实现这一目标,简单的Google搜索为您提供解决方案。

以下是my projects之一的示例。它使用getline并读取逗号分隔文件(CSV),我允许您更改它以读取制表符分隔文件。

ifstream fin(filename.c_str());
string buffer;

while(!fin.eof() && getline(fin, buffer))
{
    size_t prev_pos = 0, curr_pos = 0;
    vector<string> tokenlist;
    string token; 
    // check string
    assert(buffer.length() != 0);

    // tokenize string buffer.
    curr_pos = buffer.find(',', prev_pos);

    while(1) {

        if(curr_pos == string::npos)
            curr_pos = buffer.length();

        // could be zero
        int token_length = curr_pos-prev_pos;

        // create new token and add it to tokenlist.
        token = buffer.substr(prev_pos, token_length);
        tokenlist.push_back(token);

        // reached end of the line
        if(curr_pos == buffer.length())
            break;

        prev_pos = curr_pos+1;
        curr_pos = buffer.find(',', prev_pos);
    }
}

更新:条件改善。

答案 1 :(得分:0)

这可能是最简单的方法,但vcp的方法可以更有效。

doc = {}
doc['timestamp'] = datetime.now()    
#doc['instance_id'] = get_cloud_app_name()
doc['instance_id'] = "MyMac"

cpu_dict_returned = get_cpu_info()
doc['metrics']['cpu_usage']['user_cpu'] = cpu_dict_returned['user_cpu']
doc['metrics']["cpu_usage"]['system_cpu'] = cpu_dict_returned['system_cpu']
doc['metrics']["cpu_usage"]['idle_cpu'] = cpu_dict_returned['idle_cpu']
doc['metrics']["cpu_usage"]['cpu_count'] = cpu_dict_returned['cpu_count']

完成。实际上,您可以使用input iteratorback inserter将这大约三行代码,但为什么?

现在,如果文件被切割成行并由这些行上的制表符分隔,则还必须处理行分隔符。现在你只需要执行上面两次,一行循环和一个内循环来解析标签。

std::vector<string> tokens;
std::string token;
while (std::getline(infile, token, '\t')
{
    tokens.push_back(token);
}

如果你需要排队,然后选项卡,那么......我不知道......引用?三个循环。但老实说,我可能正在考虑撰写a state machine。我怀疑你的老师在这个阶段想要那样的东西。