TI-S2 • Software (C++)
Gera Pronk
C++ — Files input
Bronnen:
std::ifstream.std::getline.>>‑operator.is_open, fail, eof).std::stringstream.#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?
}
}
ifstream in{"pad/naar/bestand"}; opent direct; anders in.open(…).is_open() en later de statusbits (fail(), eof()).std::getlinestd::string line;
while (std::getline(in, line)) {
std::cout << line << '';
}
std::getline(stream, string) leest tot aan lijnafbreking en laat de delimiter achterwege.EOF of fout.>>int x; double y; std::string naam;
while (in >> x >> y >> naam) {
std::cout << x << " " << y << " " << naam << " ";
}
>> skipt whitespace en parseert types.failbit en stopt de loop.std::stringstream ss(line);
std::string cel;
while (std::getline(ss, cel, ',')) {
// verwerk cel
}
Belangrijkste checks op een input‑stream:
good() — geen fouten.eof() — einde van bestand bereikt.fail() — parse/format‑fout (bijv. int verwacht).bad() — onherstelbare I/O‑fout.In code, bijvoorbeeld:
if (in.fail()) { // eventueel in.clear(); om verder te gaan na herstel}
getline op een te korte buffer (C‑style) of leesfouten kan failbit zetten; met std::string + std::getline heb je dat zelden nodig. [en.cppreference.com], [stackoverflow.com]#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;
}
std::getline met een std::stringstream om simpele, niet‑gequote CSV te lezen.#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>());
}
std::ios::binary en lees bytes i.p.v. tekst. [en.cppreference.com]operator>> leest tot eerste whitespace — namen met spaties vereisen std::getline. [en.cppreference.com]Schrijf een programma dat:
Hints: std::getline, std::istringstream voor woorden, check in.fail(). [en.cppreference.com]
meetdata.csv met kolommen: tijd, temperatuur, luchtvochtigheid.Hints: std::getline + stringstream, conversie met std::stod. [en.cppreference.com]
Vragen?