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
的指针数组,然后用默认构造的Worker
s 填充指针数组。使用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++ 中读取(fname、lname、class、seat number),存储和验证
从文件中读取浮点数/单词/符号并仅将浮点数存储在数组 C++ 中