从.txt文件中读取多个数据类型,其中一个字符串有空格C++

Reading In Multiple Data types from a .txt file where one of the strings has spaces C++

本文关键字:一个 C++ 空格 字符串 文件 txt 读取 数据类型      更新时间:2023-10-16

我有一个文本文件,如下所示:

汽车,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();
}

不要复制粘贴这个代码,我看到你有没有处理的布尔变量等。

STL函数std::getline接受一个分隔符作为第三个参数,这意味着您可以传递一个t来读取制表符分隔的值。对于最后一个值,只需读取它,而不指定分隔符,这意味着在分隔符为n的情况下将调用函数的重载版本。

一次读取一行,分离为标记,转换为所需的数据类型。

下面是一个工作示例。尽管如此,它还是可以改进的。此外,您还应该处理std::stoistd::stringint转换期间引发的异常。