C++ 从文件中读取和存储信息

Posted

技术标签:

【中文标题】C++ 从文件中读取和存储信息【英文标题】:C++ Reading and storing information from file 【发布时间】: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 循环,您可以通过显着减少开销和手动内存管理获得相同的结果。 【参考方案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

【讨论】:

以上是关于C++ 从文件中读取和存储信息的主要内容,如果未能解决你的问题,请参考以下文章

在C++中如何读取文本中的数据存储为数组变量?

从文本文件 C++ 中读取(fname、lname、class、seat number),存储和验证

从文件中读取浮点数/单词/符号并仅将浮点数存储在数组 C++ 中

读取文件内容,存储在数组中,向数组添加更多内容,然后将新数组存储在文件中 C++

从文本文件中读取整数并使用 C++ 将它们存储到向量中

从文件逐字读取并确定换行 C++