从文件中读取行并存储到变量中。

时间:2013-12-22 19:59:49

标签: c++

file.txt

的内容
a
b
c

a
b
c1 x c2
d

a,b,c,c1,c2,d都是一些值。

我的功能

void Menu::readFile() {
    string line;
    ifstream myfile ("file.txt");

    if (myfile.is_open()) {
        while (getline (myfile, line)) {
            cout << line << "\n";
        }

        myfile.close();
    } else cout << "Unable to open file"; 
}

这只是返回文件的内容,我如何读取文件并将每一行解析为变量。每个换行符都会分隔对象。

3 个答案:

答案 0 :(得分:1)

void Menu::readFile() {
    string line;
    vector <string> lines;
    ifstream myfile ("file.txt");

    if (myfile.is_open()) {
        while (getline (myfile, line)) {
          cout << line << "\n";
          lines.push_back(line);
        }

        myfile.close();
    } else { 
       cout << "Unable to open file"; 
    }
}

变量行将包含所有行。

答案 1 :(得分:0)

此功能不是返回任何内容。它被声明,因此它不能返回任何值。你所拥有的已经逐一解析了这些行。现在,而不是在这一行上打印它们:

cout << line << "\n";

你应该将它们存放在某个容器中,例如std::vector<std::string>

答案 2 :(得分:0)

最好使用列表或矢量。以下是使用算法和迭代器的示例:

#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>

int main() {
  std::vector<std::string> vals;

  std::copy(
    std::istream_iterator<std::string>(std::cin),
    std::istream_iterator<std::string>(),
    std::back_inserter(vals)
  );

  // Print them out, appending a newline to each word

  std::copy(
    vals.begin(),
    vals.end(),
    std::ostream_iterator<std::string>(std::cout, "\n")
  );
}

您可以将任何std::istream对象初始化替换为std::istream_iterator;特别是你的myfile变量。默认构造函数(空parens)构造一个end-of-stream迭代器。