【问题标题】:C++ Reading and storing information from fileC++ 从文件中读取和存储信息
【发布时间】:2017-08-22 01:38:04
【问题描述】:

我有一个文本文件,其中包含用于简单进入/退出系统的以下数据:

每行都有 {time_stamp} {name} {door_entry} {status}

time_stamp - 自某个任意开始时间以来的秒数

name - 工人用户名

door_entry - 进入/退出的门号

状态 - 他们是进门还是出门

文本文件很大,大约有10,000个类似的条目

问题:我想知道如何分解每一行并将每条信息分成一个变量。例如,我在这里有 Worker 类:

class Worker
{
    std::string staffToken;
    int doorEntry;
    std::string status;
    public:
        Employee();
};

我也想用数组来解决这个问题。我知道我可以使用 Vector 或 Map,但我想用数组来解决这个问题。 我为 Worker 类创建了一个指针对象数组。

   typedef Worker * WorkPtr;
        WorkPtr * workers = new WorkPtr[MAX]; //where max is some large constant
        for (int i = 0; i < MAX; ++i)  
        {
        workers[i] = new Worker();
        }

我创建这个问题的目的是,我只想检查此文本文件中是否有任何异常活动,其中 Worker 连续多次进入或退出:

【问题讨论】:

  • 这里有很多关于在 C++ 中解析文本的问题。您在哪个特定部分遇到问题?您还没有提出任何问题(您已就您想做的事情发表了声明)。
  • 离题:您可能在这里过度使用指针。您创建一个指向Worker 的指针数组,然后用默认构造的Workers 填充指针数组。使用Worker workers[MAX]; 和没有for 循环,您可以通过显着减少开销和手动内存管理获得相同的结果。

标签: c++ arrays file storage


【解决方案1】:

你可以使用这个模板来分割带有特定分隔符的字符串

template<typename Out>
void split(const std::string &s, char delim, Out result) {
    std::stringstream ss;
    ss.str(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        *(result++) = item;
    }
}

std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, std::back_inserter(elems));
    return elems;
}

例如:

ifstream fin("your_file");
while(getline(fin,str))
{
    vector<string> res;
    res = split(str, ' ');
    //your process with res
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-22
    • 2013-12-22
    • 1970-01-01
    • 2021-12-05
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多