c++ - 如何将逗号分隔的 txt 文件流式传输到类对象?
问题描述
如何将一行逗号分隔的 txt 文件流式传输到包含名字、姓氏和年龄变量的对象?我想重载>>
操作员来做这样的操作。
std::istream& operator>>(std::istream& file, PersonData& obj) {
std::string line, firstName, lastName, age;
while (std::getline(file, line)) {
std::stringstream ss(line);
std::getline(ss,firstName,',');
std::getline(ss,lastName,',');
std::getline(ss, age,',');
firstName >> obj.firstName;
lastName >> obj.lastName;
std::stoi(age) >> obj.age;
}
return file;
}
解决方案
您operator>>
应该从文件中读取单个条目。
如果你有课
struct Person {
std::string first_name;
std::string last_name;
unsigned age;
};
您可以使用输入/输出运算符:
std::ostream& operator<<(std::ostream& out,const Person& p) {
out << p.first_name << ", " << p.last_name << ", " << p.age;
return out;
}
std::istream& operator>>(std::istream& in,Person& p){
const auto comma = ',';
std::getline(in,p.first_name,comma);
std::getline(in,p.last_name,comma);
std::string temp;
std::getline(in,temp);
p.age = std::stoi(temp);
return in;
}
然后从文件中一次提取一个人:
int main() {
std::stringstream ss{"Peter, Fish, 42\nLaura, Peterson, 105"};
Person p1,p2;
ss >> p1 >> p2;
std::cout << p1 << "\n" << p2;
};
输出:
Peter, Fish, 42
Laura, Peterson, 105
要从文件中读取所有条目,您可以使用向量和循环:
std::vector<Person> persons;
Person entry;
while(stream >> entry) persons.push_back(entry);
PS:我错过了从名称中删除前导空格。我会把它留给你;)
推荐阅读
- c# - ESP32:将广播发送到本地网络并使用 Android 应用程序接收
- jupyter-notebook - Sobel 掩码过滤器的实现失败
- robotframework - RobotFramework - WebDriverException:消息:服务 /usr/bin/safaridriver 意外退出。状态码是:1
- machine-learning - 为什么我们可以在训练后改变暗网 YOLO 的输入图像大小?
- ruby-on-rails - 我想计算批准状态的两个日期
- python - 使用 Apache 从 Django 中的网络驱动器加载媒体文件
- c++ - 解释 Shell_NotifyIcon 中的 GUID 逻辑
- javascript - 在 Electron 应用程序的弹出窗口中访问 DOM 元素
- python - 有没有更快的方法来循环浏览文件夹中的文件?
- python - 如何在 Python 中为字节执行“读取”功能?