从.txt文件中读取多个数据类型,其中一个字符串有空格C++
Reading In Multiple Data types from a .txt file where one of the strings has spaces C++
我有一个文本文件,如下所示:
汽车,CN,819481,维修,虚假,无
汽车,SLSF,46871,商务,真实,孟菲斯
汽车,AOK,156,投标,真实,旧金山
(逗号实际上是标签,但我无法在这个网站上正确格式化它们)
我有一个名为Car的对象,我正在读取代码并使用代码底部的输出进行输出。我当前的代码可以读取前5种数据类型中的所有数据,但我在读取可能有空格的最后一列时遇到了问题。我试过使用getline,但没有用。
这是我为函数编写的代码,该函数将txt作为输入
void input()
{
ifstream inputFile;
inputFile.open("input.txt",fstream::in);
if (inputFile.fail())
{
cout<<"input failed"<<endl;
exit(1);
}
string type;
string reportingMark;
int carNumber;
string kind;
bool loaded;
string destination;
while(inputFile.peek() != EOF)
{
inputFile>>type>>reportingMark>>carNumber>>kind>>loaded;
while(inputFile.peek() == ' ')
inputFile.get();
getline(inputFile, destination);
Car temp(reportingMark, carNumber, kind, loaded, destination);
temp.output();
}
inputFile.close();
}
不要使用>>
运算符,使用getline
:
string line;
while (getline(inputFile, line) {
// split line by tabs or commas
}
示例分割函数:
vector<string> explode(string &str, char separator) {
vector<string> result;
string tmp;
for (int i = 0; i < str.size(); i++) {
if (str[i] == separator) {
result.push_back(tmp);
tmp.clear();
} else tmp += str[i];
}
if (tmp.size() > 0)
result.push_back(tmp);
return result;
}
我希望std::vector
对你来说不难。示例加载代码(而不是while(inputFile.peek() != EOF) { ... }
):
string line;
while (getline(inputFile, line) {
vector<string> data = split(line, 't'); // Or use ASCII code 9
if (data.size() != 5) {
cout << "Invalid line!" << endl;
continue;
}
Car temp(data[0], data[1], stoi(data[2]), data[3], data[4]);
temp.output();
}
不要复制粘贴这个代码,我看到你有没有处理的布尔变量等。
std::getline
接受一个分隔符作为第三个参数,这意味着您可以传递一个t
来读取制表符分隔的值。对于最后一个值,只需读取它,而不指定分隔符,这意味着在分隔符为n
的情况下将调用函数的重载版本。
一次读取一行,分离为标记,转换为所需的数据类型。
下面是一个工作示例。尽管如此,它还是可以改进的。此外,您还应该处理std::stoi
在std::string
到int
转换期间引发的异常。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '