TI-S2

Files input/output C++

TI-S2 • Software (C++)
Gera Pronk

C++ — Files input

Bronnen:


Leerdoelen


Voorbereiding & context


Een bestand openen

#include <fstream>
#include <iostream>

const int SUCCEEDED = 0; 
const int FAILED = 1;

int main() {
    std::ifstream in{"data.txt"};   // open voor lezen
    if (!in.is_open()) {    // in.is_open() --> false als openen is mislukt
        std::cerr << "Kon data.txt niet openen";
        return 1; // oh, oh: een magic number - hoe kan dit anders?
    }
}

Regels lezen met std::getline

std::string line;
while (std::getline(in, line)) {
    std::cout << line << '';
}

Tokens/waarden lezen met >>

int x; double y; std::string naam;
while (in >> x >> y >> naam) {
    std::cout << x << " " << y << " " << naam << " ";
}

CSV splitten

std::stringstream ss(line);
std::string cel;
while (std::getline(ss, cel, ',')) {
    // verwerk cel
}

Statusbits & foutafhandeling

Belangrijkste checks op een input‑stream:

In code, bijvoorbeeld:

if (in.fail()) {    // eventueel in.clear(); om verder te gaan na herstel}

Lijn splitten (bijv. CSV)

#include <sstream>
#include <vector>
#include <string>

std::vector<std::string> split_csv(const std::string& line, char sep=',') {
    std::vector<std::string> fields;
    std::stringstream ss(line);
    std::string cell;
    while (std::getline(ss, cell, sep)) 
        fields.push_back(cell);
    return fields;
}

Binaire bestanden

#include <fstream>
#include <vector>

int main() {
    std::ifstream in{"image.bin", std::ios::binary};
    std::vector<char> buf((std::istreambuf_iterator<char>(in)),
                          std::istreambuf_iterator<char>());
}

Paden & best practices


Veelvoorkomende valkuilen


Mini‑opdracht 1 — regels tellen

Schrijf een programma dat:

  1. een bestandsnaam via argv[1] leest,
  2. het aantal regels, woorden en tekens print.

Hints: std::getline, std::istringstream voor woorden, check in.fail(). [en.cppreference.com]


Mini‑opdracht 2 — simpele CSV naar struct

  1. Lees meetdata.csv met kolommen: tijd, temperatuur, luchtvochtigheid.
  2. Parse naar een struct en print gemiddelde temperatuur.

Hints: std::getline + stringstream, conversie met std::stod. [en.cppreference.com]


Checklist / Rubric


Einde

Vragen?


Referenties & verder lezen