File lines can be parsed with std::stringstream after reading them.

line parsing Read a line from a file, then use a string stream to split the line into typed values.

Parse File Lines

minimum
parse_file_lines.cpp
Replay: real traced execution (multi-file project)
#include <cstdio>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

int main() {
    int minimum = 80;
    std::string filename = "scores.txt";

    std::ofstream setup(filename);
    setup << "Ada 91" << std::endl;
    setup << "Bjarne 74" << std::endl;
    setup << "Grace 88" << std::endl;
    setup.close();

    std::ifstream input(filename);
    std::string line;
    int passed = 0;

    while (std::getline(input, line)) {
        std::stringstream parser(line);
        std::string name;
        int score = 0;

        parser >> name >> score;
        if (score >= minimum) {
            ++passed;
        }
    }

    std::cout << "minimum=" << minimum << std::endl;
    std::cout << "passed=" << passed << std::endl;
    std::remove(filename.c_str());
    return 0;
}
#include <cstdio>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

int main() {
    int minimum = 70;
    std::string filename = "scores.txt";

    std::ofstream setup(filename);
    setup << "Ada 91" << std::endl;
    setup << "Bjarne 74" << std::endl;
    setup << "Grace 88" << std::endl;
    setup.close();

    std::ifstream input(filename);
    std::string line;
    int passed = 0;

    while (std::getline(input, line)) {
        std::stringstream parser(line);
        std::string name;
        int score = 0;

        parser >> name >> score;
        if (score >= minimum) {
            ++passed;
        }
    }

    std::cout << "minimum=" << minimum << std::endl;
    std::cout << "passed=" << passed << std::endl;
    std::remove(filename.c_str());
    return 0;
}
#include <cstdio>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

int main() {
    int minimum = 90;
    std::string filename = "scores.txt";

    std::ofstream setup(filename);
    setup << "Ada 91" << std::endl;
    setup << "Bjarne 74" << std::endl;
    setup << "Grace 88" << std::endl;
    setup.close();

    std::ifstream input(filename);
    std::string line;
    int passed = 0;

    while (std::getline(input, line)) {
        std::stringstream parser(line);
        std::string name;
        int score = 0;

        parser >> name >> score;
        if (score >= minimum) {
            ++passed;
        }
    }

    std::cout << "minimum=" << minimum << std::endl;
    std::cout << "passed=" << passed << std::endl;
    std::remove(filename.c_str());
    return 0;
}
  1. minimum ← 80, filename ← scores.txt, setup ← (empty), input ← (empty)

    7int main() {8    int minimum→ 80 = 80; //@minimum=70, 909    std::string filename→ scores.txt = "scores.txt";1011    std::ofstream setup→ (empty)(filenamescores.txt);12    setup(empty) << "Ada 91" << std::endl;13    setup(empty) << "Bjarne 74" << std::endl;14    setup(empty) << "Grace 88" << std::endl;15    setup(empty).close();1617    std::ifstream input→ (empty)(filenamescores.txt);18    std::string line→ (empty);19    int passed→ 0 = 0;
  2. parser ← (empty), name ← (empty), score ← 0

    pass 1 of 3
    21while (std::getline(input(empty), lineAda 91)) {22    std::stringstream parser→ (empty)(lineAda 91);23    std::string name→ (empty);24    int score→ 0 = 0;2526    parser(empty) >> name→ Ada >> score→ 91;27    if (score >= minimum) {
    All 3 passes — pass 1 is the card above
    passlineminimumparsernamescorepassed
    1Ada 9180(empty)(empty)00 1
    2Bjarne 74(empty)(empty)0
    3Grace 8880(empty)(empty)01 2
  3. passed ← 1

    pass 1 of 2
    26parser >> name >> score;27if (score91 >= minimum80) {28    ++passed→ 1;29}
  4. passed ← 2

    pass 2 of 2
    26parser >> name >> score;27if (score88 >= minimum80) {28    ++passed→ 2;29}
  5. std::cout << "minimum=" << minimum << std::endl;

    32    std::cout << "minimum=" << minimum80 << std::endl;33    std::cout << "passed=" << passed2 << std::endl;34    std::remove(filenamescores.txt.c_str());35    return 0;36}
    outputminimum=80
    passed=2
  1. minimum ← 70, filename ← scores.txt, setup ← (empty), input ← (empty)

    7int main() {8    int minimum→ 70 = 70;9    std::string filename→ scores.txt = "scores.txt";1011    std::ofstream setup→ (empty)(filenamescores.txt);12    setup(empty) << "Ada 91" << std::endl;13    setup(empty) << "Bjarne 74" << std::endl;14    setup(empty) << "Grace 88" << std::endl;15    setup(empty).close();1617    std::ifstream input→ (empty)(filenamescores.txt);18    std::string line→ (empty);19    int passed→ 0 = 0;
  2. parser ← (empty), name ← (empty), score ← 0

    pass 1 of 3
    21while (std::getline(input(empty), lineAda 91)) {22    std::stringstream parser→ (empty)(lineAda 91);23    std::string name→ (empty);24    int score→ 0 = 0;2526    parser(empty) >> name→ Ada >> score→ 91;27    if (score >= minimum) {
    All 3 passes — pass 1 is the card above
    passlineparsernamescore
    1Ada 91(empty)(empty)0
    2Bjarne 74(empty)(empty)0
    3Grace 88(empty)(empty)0
  3. passed ← 1

    pass 1 of 3
    26parser >> name >> score;27if (score91 >= minimum70) {28    ++passed→ 1;29}
    All 3 passes — pass 1 is the card above
    passscorepassed
    1910 1
    2741 2
    3882 3
  4. std::cout << "minimum=" << minimum << std::endl;

    32    std::cout << "minimum=" << minimum70 << std::endl;33    std::cout << "passed=" << passed3 << std::endl;34    std::remove(filenamescores.txt.c_str());35    return 0;36}
    outputminimum=70
    passed=3
  1. minimum ← 90, filename ← scores.txt, setup ← (empty), input ← (empty)

    7int main() {8    int minimum→ 90 = 90;9    std::string filename→ scores.txt = "scores.txt";1011    std::ofstream setup→ (empty)(filenamescores.txt);12    setup(empty) << "Ada 91" << std::endl;13    setup(empty) << "Bjarne 74" << std::endl;14    setup(empty) << "Grace 88" << std::endl;15    setup(empty).close();1617    std::ifstream input→ (empty)(filenamescores.txt);18    std::string line→ (empty);19    int passed→ 0 = 0;
  2. parser ← (empty), name ← (empty), score ← 0

    pass 1 of 3
    21while (std::getline(input(empty), lineAda 91)) {22    std::stringstream parser→ (empty)(lineAda 91);23    std::string name→ (empty);24    int score→ 0 = 0;2526    parser(empty) >> name→ Ada >> score→ 91;27    if (score >= minimum) {
    All 3 passes — pass 1 is the card above
    passlineminimumparsernamescorepassed
    1Ada 9190(empty)(empty)00 1
    2Bjarne 74(empty)(empty)0
    3Grace 88(empty)(empty)0
  3. passed ← 1

    26parser >> name >> score;27if (score91 >= minimum90) {28    ++passed→ 1;29}
  4. std::cout << "minimum=" << minimum << std::endl;

    32    std::cout << "minimum=" << minimum90 << std::endl;33    std::cout << "passed=" << passed1 << std::endl;34    std::remove(filenamescores.txt.c_str());35    return 0;36}
    outputminimum=90
    passed=1