Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;从文件中读取和存储信息_C++_Arrays_File_Storage - Fatal编程技术网

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

C++ C++;从文件中读取和存储信息,c++,arrays,file,storage,C++,Arrays,File,Storage,我有一个文本文件,其中包含简单出入境系统的以下数据: 其中每行有{time_stamp}{name}{door_entry}{status} 时间戳-自某个任意开始时间起的秒数 名称-工人用户名 门进入-门编号已输入/退出 状态-是否进入或离开门 文本文件很大,大约有10000个类似的条目 问题:我想知道如何分解每一行并将每一条信息分割成一个变量。例如,这里有一个工人类: class Worker { std::string staffToken; int doorEntry;

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

其中每行有{time_stamp}{name}{door_entry}{status}

时间戳-自某个任意开始时间起的秒数

名称-工人用户名

门进入-门编号已输入/退出

状态-是否进入或离开门

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

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

class Worker
{
    std::string staffToken;
    int doorEntry;
    std::string status;
    public:
        Employee();
};
我也想用数组来解决这个问题。我知道我可以使用向量或地图,但我想用数组来解决这个问题。 我已经为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();
        }
typedef Worker*WorkPtr;
WorkPtr*workers=新的WorkPtr[MAX]//其中max是一个大常数
对于(int i=0;i

我创建的这个问题的目的是,我只想检查这个文本文件中是否有任何异常活动,其中一个工作人员在一行中多次输入或退出:

您可以使用此模板使用某个分隔符拆分字符串

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;
}
模板
void split(常量std::string&s、char delim、Out结果){
std::stringstream-ss;
ss.str(s);
std::字符串项;
while(std::getline(ss,item,delim)){
*(结果++)=项目;
}
}
std::vector split(const std::string&s,char delim){
std::向量元素;
拆分(s、delim、std::背面插入器(elems));
返回元素;
}
例如:

ifstream fin("your_file");
while(getline(fin,str))
{
    vector<string> res;
    res = split(str, ' ');
    //your process with res
}
ifstream-fin(“您的_文件”);
while(getline(fin,str))
{
向量res;
res=分裂(str,);
//您使用res的过程
}

这里有很多关于C++中文本解析的问题。你对哪一部分有问题?您还没有问任何问题(您已经声明了您想要做的事情)。离题:您可能在这里使用的指针太多了。您创建了一个指向
工作者
的指针数组,然后用默认构造的
工作者
填充指针数组。使用
Worker[MAX]可以显著减少开销并手动管理内存,从而获得相同的结果和否