#include <iostream> // bemenet-kimenetre
#include <string> // szövegként tároljuk a bemenetet
#include <regex>
#include "CsvFeldolgozo.hpp"
#include "DatumKezeles.hpp"
#define BEMENTEI_FAJL "BME_2034.csv" // Egyszerű szövegcserét jelent: minden bemeneti_fajl előfordulást lecserél szövegként PL. "BME_2034.csv"-ra a preprocessor
#define SZOVEGES_KIMENET "utan_datum.csv" // Nem típusbiztos, nem kötődik névhez, nem jelenik meg a hibákban jól formázva
#define BINARIS_KIMENET "utan_datum.bin" // Csak globális szövegcsere
constexpr char bemeneti_fajl[] = "BME_2034.csv"; // A constexpr szó a C++-ban a “constant expression” (konstans kifejezés) rövidítése. Arra utal, hogy
constexpr char szoveges_kimenet[] = "utan_datum.csv"; // Fordítási időben kiértékelhető: A constexpr-szel deklarált változó (vagy függvény) értékét a fordító
constexpr char binaris_kimenet[] = "utan_datum.bin"; // már fordítás közben, nem pedig futásidőben határozza meg
// Használható konstans-kontextukusokban: Például tömbméretnek, template-paraméternek
using namespace std; // IDE-k, hibajelzések a valódi változóra mutatnak!
int main() {
setlocale(LC_ALL, "");
string bekert_datum;
// max 10 próbálkozás
for (int i = 0; i < 10; ++i) {
cout << "Add meg a dátumot (YYYY.MM.DD): ";
getline(cin, bekert_datum);
if (regex_match(bekert_datum, datum_minta)) {
cout << "Elfogadva: " << bekert_datum << "\n\n";
break;
}
cerr << "Hibás formátum, próbáld újra.\n";
if (i == 9) {
cerr << "Túl sok próbálkozás. Kilépés.\n";
return 1;
}
}
try { // A try { … } belsejében helyezed el azokat a hívásokat, amelyek dobhatnak kivételt
CsvFeldolgozo feldolgozo(BEMENTEI_FAJL, // (például fajl_megnyitas() - ban throw runtime_error(...)
SZOVEGES_KIMENET,
BINARIS_KIMENET);
if (feldolgozo.datum_utani_feldolgozas(bekert_datum)) {
cout << "\nFeldolgozás kész.\n";
return 0;
}
}
catch (const exception& e) { // A catch(const exception& e) azt jelenti, hogy minden, a <stdexcept>-ból vagy <exception> alosztályból érkező kivételt elkapunk
cerr << "Hiba: " << e.what() << "\n"; // A kivétel objektumot (e) referenciaként kapjuk meg, így nem másoljuk feleslegesen
return 2; // A e.what() metódus visszaadja a throw-nál megadott hibaüzenetet (például "Nem nyitható: file.csv")
} // A catch-blokk végén lévő return 2; megszakítja a main()-t, jelezve, hogy hiba történt
}