1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| const std::vector<std::pair<std::wstring, std::wstring>>lire_paireCleValeur_depuisFichierTxt(std::wstring const& nomFichier, std::wstring separeteur_pattern)
{
std::string contenuFichier{ u8"" };
std::vector<std::pair<std::wstring, std::wstring>> clevaleurs;
ifstream fichier{ nomFichier };
if (!fichier)
{
throw std::runtime_error("Fichier impossible à ouvrir.");
}
contenuFichier = std::string(istreambuf_iterator<char>{fichier}, {});
if (contenuFichier == u8"")
{
throw std::runtime_error("Le fichier '" + wstr_to_u8(nomFichier) + "' est vide.");
}
wstring_convert<codecvt_utf8<wchar_t>, wchar_t> convertiseur;
std::wstring converti = convertiseur.from_bytes(contenuFichier);
rtrim(converti);
converti += L'\n';
std::size_t pos = converti.length();
if (pos == std::wstring::npos)
return clevaleurs;
const std::wregex line_format_rg{ L"^(.+?)?((" + separeteur_pattern + L")(.*))|(
|\\.\\.\\.)|(.+)$" };
for (std::wsregex_iterator it{ converti.begin(), converti.end(), line_format_rg }, end{}; it != end; ++it) {
auto entry = *it;
if (entry[5].matched)
{
clevaleurs.push_back(std::make_pair(L"
", L""));
}
else if (entry[1].matched)
{
if (entry[4].matched)
{
clevaleurs.push_back(std::make_pair(entry[1].str(), entry[4].str()));
}
else
{
clevaleurs.push_back(std::make_pair(entry[1].str(), L""));
}
}
else
{
if (entry[4].matched)
{
clevaleurs.push_back(std::make_pair(L"", entry[4].str()));
}
else
{
if (entry[6].matched)
{
clevaleurs.push_back(std::make_pair(entry[6].str(), L""));
}
}
}
}
return clevaleurs;
} |
Partager