C++ C++;从文件中读取和存储信息
我有一个文本文件,其中包含简单出入境系统的以下数据: 其中每行有{time_stamp}{name}{door_entry}{status} 时间戳-自某个任意开始时间起的秒数 名称-工人用户名 门进入-门编号已输入/退出 状态-是否进入或离开门 文本文件很大,大约有10000个类似的条目 问题:我想知道如何分解每一行并将每一条信息分割成一个变量。例如,这里有一个工人类:C++ C++;从文件中读取和存储信息,c++,arrays,file,storage,C++,Arrays,File,Storage,我有一个文本文件,其中包含简单出入境系统的以下数据: 其中每行有{time_stamp}{name}{door_entry}{status} 时间戳-自某个任意开始时间起的秒数 名称-工人用户名 门进入-门编号已输入/退出 状态-是否进入或离开门 文本文件很大,大约有10000个类似的条目 问题:我想知道如何分解每一行并将每一条信息分割成一个变量。例如,这里有一个工人类: class Worker { std::string staffToken; int doorEntry;
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]可以显著减少开销并手动管理内存,从而获得相同的结果循环的代码>和否。