IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème et AVC : _wfopen_s


Sujet :

C++

  1. #421
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        assert(strRestant.length() > 9 && L"Nom de fichier trop court pour avoir au moins une date");
    
        std::vector<DateRecord> dates;
        std::wstring streaming = L"";
    
        int y, m, d;
        y = m = d = 0;
        wchar_t sp = L' ', tiret = L'-', tiret_bas = L'_';
        bool yearFlag = false, monFlag = false, dayFlag = false;
        int firstYear = 0, firstMon = 0, firstDay = 0;
    
        DateRecord dr;
        std::tm date, tm;
    
        tm.tm_year = y - 1900;
        tm.tm_mon = m - 1;
        tm.tm_mday = d;
    
        dr.date = tm;
        dr.someFlag = false;
    
        dates.push_back(dr);
        int i = 0;
        std::size_t taille{};
        do
        {
            if (strRestant[0] != tiret_bas &&
                !yearFlag && !monFlag && !dayFlag &&
                checkyear(y) &&
                strRestant[4] == tiret &&
                checkmonth(m) &&
                strRestant[7] == tiret &&
                checkday(m, d, y) &&
                firstYear < y)
            {
    Oui ou non ?

    Merci

  2. #422
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    std::pair<std::vector<DateRecord>, std::wstring> ExtraireInfosDepuisNomDeFichier(const std::wstring& nomFichier)
    {
        assert(nomFichier.length() > 0 && L"Nom de fichier vide");
    
        std::size_t pos;
        pos = nomFichier.length();
        std::wstring strRestant = nomFichier.substr(0, pos - 4);
        assert(strRestant.length() > 9 && L"Nom de fichier trop court pour avoir au moins une date");
    
        std::vector<DateRecord> dates;
        std::wstring streaming = L"";
    
        int y, m, d;
        wchar_t sp = L' ', tiret = L'-', tiret_bas = L'_';
        bool yearFlag = false, monFlag = false, dayFlag = false;
        int firstYear = 0, firstMon = 0, firstDay = 0;
    
        DateRecord dr;
        std::tm date, tm;
        
        y = stoi(strRestant.substr(0, 4));
        m = std::stoi(strRestant.substr(5, 2));
        d = std::stoi(strRestant.substr(8, 2));
        
        tm.tm_year = y - 1900;
        tm.tm_mon = m - 1;
        tm.tm_mday = d;
    
        dr.date = tm;
        dr.someFlag = false;
        std::wcout << L"aaa" << std::endl;
    
        dates.push_back(dr);
        int i = 0;
        std::size_t taille{};
        do
        {
            if (strRestant[0] != tiret_bas &&
                !yearFlag && !monFlag && !dayFlag &&
                checkyear(y) &&
                strRestant[4] == tiret &&
                checkmonth(m) &&
                strRestant[7] == tiret &&
                checkday(m, d, y) &&
                firstYear < y)
            {

  3. #423
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ce code n'a pas l'air d'employer la variable date. Donc peut-être que std::tm tm; suffirait.
    Ou alors, on renomme la variable pour un nom plus explicite:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    std::pair<std::vector<DateRecord>, std::wstring> ExtraireInfosDepuisNomDeFichier(const std::wstring& nomFichier)
    {
        assert(nomFichier.length() > 0 && L"Nom de fichier vide");
     
        std::size_t pos;
        pos = nomFichier.length();
        std::wstring strRestant = nomFichier.substr(0, pos - 4);
        assert(strRestant.length() > 9 && L"Nom de fichier trop court pour avoir au moins une date");
     
        std::vector<DateRecord> dates;
        std::wstring streaming = L"";
     
        int y, m, d;
        wchar_t sp = L' ', tiret = L'-', tiret_bas = L'_';
        bool yearFlag = false, monFlag = false, dayFlag = false;
        int firstYear = 0, firstMon = 0, firstDay = 0;
     
        DateRecord dr;
        std::tm dateFichier;
     
        y = stoi(strRestant.substr(0, 4));
        m = std::stoi(strRestant.substr(5, 2));
        d = std::stoi(strRestant.substr(8, 2));
     
        dateFichier.tm_year = y - 1900;
        dateFichier.tm_mon = m - 1;
        dateFichier.tm_mday = d;
     
        dr.date = dateFichier;
        dr.someFlag = false;
        std::wcout << L"aaa" << std::endl;
     
        dates.push_back(dr);
        int i = 0;
        std::size_t taille{};
        do
        {
            if (strRestant[0] != tiret_bas &&
                !yearFlag && !monFlag && !dayFlag &&
                checkyear(y) &&
                strRestant[4] == tiret &&
                checkmonth(m) &&
                strRestant[7] == tiret &&
                checkday(m, d, y) &&
                firstYear < y)
            {
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #424
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        const std::wstring nomFichier = L"2022-08-31_ Netflix.txt";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    class exception_test_sp_et_npos_ou_pas_isblank
    {
        std::wstring message;
    public:
        exception_test_sp_et_npos_ou_pas_isblank() : message(L"Espace invalide !!!") {}
        std::wstring get_message() const { return message; }
    };
    
    void test_sp_et_npos_ou_pas_isblank(wchar_t sp, bool t)
    {
        if (sp != L' ' && t)
        {
            throw exception_test_sp_et_npos_ou_pas_isblank();
        }
        return;
    }
    ...
    std::pair<std::vector<DateRecord>, std::wstring> ExtraireInfosDepuisNomDeFichier(const std::wstring& nomFichier)
    {
        assert(nomFichier.length() > 0 && L"Nom de fichier vide");
    
        std::size_t pos;
        pos = nomFichier.length();
        std::wstring strRestant = nomFichier.substr(0, pos - 4);
        assert(strRestant.length() > 9 && L"Nom de fichier trop court pour avoir au moins une date");
    
        std::vector<DateRecord> dr;
        std::wstring streaming = L"";
    ...
        do
        {
            std::wcout << L"strRestant=[" << strRestant << L"]" << std::endl;
            if (strRestant[0] == sp)
            {
                std::wcout << L"strRestant=[" << strRestant << L"] ???" << std::endl;
                strRestant = strRestant.substr(1);
                std::wcout << L"strRestant=[" << strRestant << L"]" << std::endl;
                // date_sp
                try
                {
                    test_sp_et_npos_ou_pas_isblank(strRestant[0], !isblank(strRestant[1]));
                }
                catch (exception_test_sp_et_npos_ou_pas_isblank e)
                {
                    std::wcout << L"Exception a été capturée : " << e.get_message() << std::endl;
                    exit(1);
                }
                assert(strRestant[0] == sp && L"sp !!!");
                if (strRestant[0] != std::wstring::npos)
                {
                    streaming = strRestant;
                }
                strRestant = L"";
                break;
            }
    ...
    Marche pas : Pourquoi ?

    Merci d'avance

  5. #425
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,
    Crevé !

    Ici : https://github.com/laurentbouleau/Exemple

    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    std::pair<std::vector<DateRecord>, std::wstring> ExtraireInfosDepuisNomDeFichier(const std::wstring& nomFichier)
    {
        assert(nomFichier.length() > 0 && L"Nom de fichier vide");
    
        std::size_t pos;
        pos = nomFichier.length();
        std::wstring strRestant = nomFichier.substr(0, pos - 4);
        assert(strRestant.length() > 9 && L"Nom de fichier trop court pour avoir au moins une date");
    
        std::vector<DateRecord> dr;
        std::wstring streaming = L"";
    
        //DateRecord dr;
        //std::tm date tm;
        //tm.tm_year = y - 1900;
        //tm.tm_mon = m - 1;
        //tm.tm_mday = d;
        //dr.date = tm;
        //dr.someFlag = false;
        //dates.push_back(dr);
    
        wchar_t sp = L' ', tiret = L'-', tiret_bas = L'_';
        int y, m, d;
    
        int firstYear = 0, firstMon = 0, firstDay = 0;
        int i = 0;
        do
        {
            if (strRestant[0] == sp)
            {
                if (strRestant[1] == std::wstring::npos || strRestant[1] == sp)
                {
                    // Erreur !!!
                    // Explique-moi ??? 
                    exit(1);
                }
                strRestant = strRestant.substr(1);
                // date_sp
                // Erreur !!!
                // Explique-moi ??? 
                try
                {
                    test_sp_et_npos_ou_pas_isblank(strRestant[0], isblank(strRestant[1]));
                }
                catch (exception_test_sp_et_npos_ou_pas_isblank e)
                {
                    exit(1);
                }
                if (strRestant[0] != std::wstring::npos)
                {
                    streaming = strRestant;
                }
                strRestant = L"";
                break;
            }
            if (!isdigit(strRestant[0]))
            {
                // Erreur !!!
                // Explique-moi ??? 
                exit(1);
            }
            // year + mon + mday
            if ((y = stoi(strRestant.substr(0, 4))) && checkyear(y)
                &&
                strRestant[4] == tiret
                &&
                (m = std::stoi(strRestant.substr(5, 2))) && checkmonth(m)
                &&
                strRestant[7] == tiret
                &&
                (d = std::stoi(strRestant.substr(8, 2))) && checkday(m, d, y)
                &&
                firstYear < y)
            {
                assert(firstYear < y && L"L'année aaaaa");
                firstYear = y;
                assert(firstMon < m && L"Le mois aaaaa");
                firstMon = m;
                assert(firstDay <= d && L"Le jours aaaaa");
                firstDay = d;
                dr.push_back(DateRecord{ 0 });
                dr[i].date.tm_year = y - 1900;
                dr[i].date.tm_mon = m - 1;
                dr[i].date.tm_mday = d;
                strRestant = strRestant.substr(10);
                if (strRestant[0] == tiret_bas)
                {
                    dr[i].someFlag = true;
                    strRestant = strRestant.substr(1);
                }
                i++;
                continue;
            }
            // mon + mday
            if ((m = std::stoi(strRestant.substr(0, 2))) && checkmonth(m)
                &&
                strRestant[2] == tiret
                &&
                (d = std::stoi(strRestant.substr(3, 2))) && checkday(m, d, firstYear)
                &&
                firstMon < m)
            {
                assert(firstMon < m && L"Le mois aaaaa");
                firstMon = m;
                dr.push_back(DateRecord{ 0 });
                dr[i].date.tm_year = firstYear - 1900;
                dr[i].date.tm_mon = m - 1;
                dr[i].date.tm_mday = d;
                assert(firstDay <= d && L"Le jours aaaaa");
                firstDay = d;
                strRestant = strRestant.substr(5);
                if (strRestant[0] == tiret_bas)
                {
                    dr[i].someFlag = true;
                    strRestant = strRestant.substr(1);
                }
                i++;
                continue;
            }
            // mday
            if ((d = std::stoi(strRestant.substr(0, 2))) && checkday(firstMon, d, firstYear)
                &&
                firstDay <= d)
            {
                firstDay = d;
                assert(firstDay <= d && L"Le jours aaaaa");
                dr.push_back(DateRecord{ 0 });
                dr[i].date.tm_year = firstYear - 1900;
                dr[i].date.tm_mon = firstMon - 1;
                dr[i].date.tm_mday = d;
                strRestant = strRestant.substr(2);
                if (strRestant[0] == tiret_bas)
                {
                    dr[i].someFlag = true;
                    strRestant = strRestant.substr(1);
                }
                i++;
                continue;
            }
            // Erreur !!!
            // Explique-moi ??? 
            exit(1);
        } while (strRestant.length() > 0);
        return std::pair<std::vector<DateRecord>, std::wstring>(dr, streaming);
    }
    Merci beaucoup

  6. #426
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Ici : https://github.com/laurentbouleau/Exemple

    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<.....> dates = ExtraireInfosDepuisNomDeFichier(nom_du_fichier1)
    std::vector<.....> dates_suivantes = ExtraireInfosDepuisNomDeFichier(nom_du_fichier2)
    ...
    dates.insert(dates.end(), dates_suivantes.begin(), dates_suivantes.end());
    Oui ou non ?

    Merci

  7. #427
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je ne trouve pas ce fragment dans le code posté à https://github.com/laurentbouleau/Exemple

    Par contre, ce test me paraît incorrect:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                if (strRestant[0] != std::wstring::npos)
                {
                    streaming = strRestant;
                }
    strRestant[0] est un caractère; std::wstring::npos est un index.
    peut-être que if(strRestant::length() > 0) marcherait mieux?




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<.....> dates = ExtraireInfosDepuisNomDeFichier(nom_du_fichier1);
    Ceci ne devrait pas compiler, vu que ExtraireInfosDepuisNomDeFichier() retourne une std::pair<std::vector<...>, std::wstring>.
    Par contre, ceci devrait marcher:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<.....> dates = ExtraireInfosDepuisNomDeFichier(nom_du_fichier1).first;
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #428
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Exemples :
    Avatar :
    2013-01-07 streaming.txt
    2017-03-07 streaming.txt
    World-War-Z :
    2013-10-18 streaming.txt
    2016-06-05 TF1.txt
    2017-11-26 Netflix.txt
    Blood & Gold :
    2023-11-28_29_30_12-01.txt (fatigué !!! Pas-à-pas)
    Men in Black- International :
    2021-11-07 France 2.txt
    2023-10-12_ Netflix.txt (préquel ou un autre)

    Pas de exit(1) ! Mais try cath ! Comment fait ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    ...
    class exception_test_sp_et_npos_ou_pas_isblank
    {
        std::wstring message;
    public:
        exception_test_sp_et_npos_ou_pas_isblank() : message(L"Espace invalide !!!") {}
        std::wstring get_message() const { return message; }
    };
    
    void test_sp_et_npos_ou_pas_isblank(wchar_t sp, bool t)
    {
        if (sp != L' ' && t)
        {
            throw exception_test_sp_et_npos_ou_pas_isblank();
        }
        return;
    }
    ...
    struct DateRecord
    {
        std::tm date{ 0 };
        bool someFlag{ false };
    };
    
    std::pair<std::vector<DateRecord>, std::wstring> ExtraireInfosDepuisNomDeFichier(const std::wstring& nomFichier)
    {
        assert(nomFichier.length() > 0 && L"Nom de fichier vide");
    
        std::size_t pos;
        pos = nomFichier.length();
        std::wstring strRestant = nomFichier.substr(0, pos - 4);
        assert(strRestant.length() > 9 && L"Nom de fichier trop court pour avoir au moins une date");
    
        std::vector<DateRecord> dr;
        std::wstring streaming = L"";
    
        //DateRecord dr;
        //std::tm date tm;
        //tm.tm_year = y - 1900;
        //tm.tm_mon = m - 1;
        //tm.tm_mday = d;
        //dr.date = tm;
        //dr.someFlag = false;
        //dates.push_back(dr);
    
        wchar_t sp = L' ', tiret = L'-', tiret_bas = L'_';
        int y, m, d;
    
        int firstYear = 0, firstMon = 0, firstDay = 0;
        int i = 0;
        do
        {
            if (strRestant[0] == sp)
            {
                if (strRestant[1] == std::wstring::npos || strRestant[1] == sp)
                {
                    // try cath !!!
                    // Explique-moi ??? 
                    exit(1);
                }
                strRestant = strRestant.substr(1);
                // try cath !!!
                // Explique-moi ??? 
                try // Erreur !!!
                {
                    test_sp_et_npos_ou_pas_isblank(strRestant[0], isblank(strRestant[1]));
                }
                catch (exception_test_sp_et_npos_ou_pas_isblank e)
                {
                    exit(1);
                }
                if (strRestant.length() > 0)
                {
                    streaming = strRestant;
                }
                strRestant = L"";
                break;
            }
            if (!isdigit(strRestant[0]))
            {
                // try cath !!!
                // Explique-moi ??? 
                exit(1);
            }
            // year + mon + mday
            if ((y = stoi(strRestant.substr(0, 4))) && checkyear(y)
                &&
                strRestant[4] == tiret
                &&
                (m = std::stoi(strRestant.substr(5, 2))) && checkmonth(m)
                &&
                strRestant[7] == tiret
                &&
                (d = std::stoi(strRestant.substr(8, 2))) && checkday(m, d, y)
                &&
                firstYear < y)
            {
                assert(firstYear < y && L"L'année aaaaa");
                firstYear = y;
                assert(firstMon < m && L"Le mois aaaaa");
                firstMon = m;
                assert(firstDay <= d && L"Le jours aaaaa");
                firstDay = d;
                dr.push_back(DateRecord{ 0 });
                dr[i].date.tm_year = y - 1900;
                dr[i].date.tm_mon = m - 1;
                dr[i].date.tm_mday = d;
                strRestant = strRestant.substr(10);
                if (strRestant[0] == tiret_bas)
                {
                    dr[i].someFlag = true;
                    strRestant = strRestant.substr(1);
                }
                i++;
                continue;
            }
            // mon + mday
            if ((m = std::stoi(strRestant.substr(0, 2))) && checkmonth(m)
                &&
                strRestant[2] == tiret
                &&
                (d = std::stoi(strRestant.substr(3, 2))) && checkday(m, d, firstYear)
                &&
                firstMon < m)
            {
                assert(firstMon < m && L"Le mois aaaaa");
                firstMon = m;
                dr.push_back(DateRecord{ 0 });
                dr[i].date.tm_year = firstYear - 1900;
                dr[i].date.tm_mon = m - 1;
                dr[i].date.tm_mday = d;
                assert(firstDay <= d && L"Le jours aaaaa");
                firstDay = d;
                strRestant = strRestant.substr(5);
                if (strRestant[0] == tiret_bas)
                {
                    dr[i].someFlag = true;
                    strRestant = strRestant.substr(1);
                }
                i++;
                continue;
            }
            // mday
            if ((d = std::stoi(strRestant.substr(0, 2))) && checkday(firstMon, d, firstYear)
                &&
                firstDay <= d)
            {
                firstDay = d;
                assert(firstDay <= d && L"Le jours aaaaa");
                dr.push_back(DateRecord{ 0 });
                dr[i].date.tm_year = firstYear - 1900;
                dr[i].date.tm_mon = firstMon - 1;
                dr[i].date.tm_mday = d;
                strRestant = strRestant.substr(2);
                if (strRestant[0] == tiret_bas)
                {
                    dr[i].someFlag = true;
                    strRestant = strRestant.substr(1);
                }
                i++;
                continue;
            }
            // try cath !!!
            // Explique-moi ??? 
            exit(1);
        } while (strRestant.length() > 0);
        return std::pair<std::vector<DateRecord>, std::wstring>(dr, streaming);
    }
    
    int wmain(int argc, wchar_t* argv[])
    {
    
        int i = 0;
        //
        init();
        //hOut = GetStdHandle(STD_OUTPUT_HANDLE);
        if (hOut == INVALID_HANDLE_VALUE)
        {
            return GetLastError();
        }
        //    DWORD dwMode = 0;
        if (!GetConsoleMode(hOut, &dwMode))
        {
            return GetLastError();
        }
        dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
        if (!SetConsoleMode(hOut, dwMode))
        {
            return GetLastError();
        }
    
        //    CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
        GetConsoleScreenBufferInfo(hOut, &csbiInfo);
    
        //const std::wstring nomFichier = L"1024-08-31.txt"; // Erreur
        //const std::wstring nomFichier = L"1624/08-31.txt"; // Erreur
    
        //const std::wstring nomFichier = L"2022-08-31.txt";
    
        //const std::wstring nomFichier = L"2022-08-31 .txt"; // Erreur
        //const std::wstring nomFichier = L"2022-08-31Net.txt"; // Erreur
    
        //const std::wstring nomFichier = L"2022-08-31_ Netflix.txt"; /// 
        //const std::wstring nomFichier = L"2023-11-28_29_30_12-30 abc.txt";
        //const std::wstring nomFichier = L"2022-08-30_31.txt";
        //const std::wstring nomFichier = L"2022-08-30_31 Netflix.txt";
        
        //const std::wstring nomFichier = L"2022-08-30_31_2023-01-13 Netflix.txt";
        //const std::wstring nomFichier = L"2022-08-31_30_2023-01-13 Netflix.txt"; // Pas ok !!!
        //const std::wstring nomFichier = L"2023-08-30_31_2022-01-13 Netflix.txt"; // Pas ok !!!
    
        //const std::wstring nomFichier = L"2023-08-30_09-01 Netflix.txt";
    
        //const std::wstring nomFichier = L"2023-08-30_31_09-01_02 Netflix.txt";
        const std::wstring nomFichier = L"2023-08-30_09-12_12 Netflix.txt";
     
        std::pair<std::vector<DateRecord>, std::wstring>dates;
        dates = ExtraireInfosDepuisNomDeFichier(nomFichier);
        std::wcout << L"Date :" <<  std::endl;
        std::vector<DateRecord>::iterator iter;
        for (iter = dates.first.begin(); iter != dates.first.end(); iter++, i++)
        {
            std::wcout << L"__" << i << std::endl;
            std::wcout << L"____date=[" << (*iter).date.tm_year + 1900 << L'/' << (*iter).date.tm_mon + 1 << L'/' << (*iter).date.tm_mday << L']' << std::endl;
            std::wcout << L"____someFlag=" << (*iter).someFlag << std::endl;
        }
        std::wcout << L"streaming=[" << dates.second << L"]" << std::endl;
        return EXIT_SUCCESS;
    }
    Merci vraiment

  9. #429
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0

  10. #430
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Exemple : https://github.com/laurentbouleau/Exemple

    (std::vector<std::pair<std::vector<DateRecord>, std::wstring>>dates_pla_pla_pla; ?)

    Ok ou pas ?

    Merci d'avance

  11. #431
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    std::vector<std::pair<std::vector<DateRecord>, std::wstring>>dates_pla_pla_pla ===> std::vector<std::pair<std::vector<DateRecord>, std::wstring>>vdates

    Ok ou pas ?

    Merci vraiment

  12. #432
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonsoir à tous,

    Ok : std::vector<std::pair<std::vector<DateRecord>, std::wstring>>dates;

    Ici : https://github.com/laurentbouleau/Exemple

    Mais : try et cath !!! Explique-moi ???

    Merci d'avance

  13. #433
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Ici : https://github.com/laurentbouleau/Exemple
    Ok !

    Alors ?

    Merci

  14. #434
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonsoir Médinoc et bacelar,

    Voilà : https://github.com/laurentbouleau/You
    Ok !

    film.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    void Film::afficher_Date_ou_Dates(std::wstring const& wstr)
    ...
    const bool Film::PrintDate_ou_Dates()
    ...
    et film.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    class Film
    {
    ...
    	std::vector<std::pair<std::vector<DateRecord>, std::wstring>>date_ou_dates;
    ...
    };
    ...
    Mais : .h

    Exemples :
    film.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    struct DateRecord;
     
    class Titre;
    class Console;
    class Film
    {
    	friend class Titre;
    ...
    };
    et/ou Utils.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    ...
    class exception_date_year
    {
    	std::wstring message;
    public:
    	exception_date_year() : message(L"L'année illégale doit être l'année numérique - entre 1900 et 3001") {}
    	std::wstring get_message() const { return message; }
    };
     
    class exception_date_month
    {
    	std::wstring message;
    public:
    	exception_date_month() : message(L"Le mois illégal doit être un mois numérique - entre 1 et 12") {}
    	std::wstring get_message() const { return message; }
    };
     
    class exception_date_day
    {
    	std::wstring message;
    public:
    	exception_date_day() : message(L"Le jour illégal doit être un jour numérique - entre 1 et 31") {}
    	std::wstring get_message() const { return message; }
    };
     
    class exception_date_tiret
    {
    	std::wstring message;
    public:
    	exception_date_tiret() : message(L"aaaaaaaaaa") {}
    	std::wstring get_message() const { return message; }
    };
     
    class exception_date_tiret_sp_etc
    {
    	std::wstring message;
    public:
    	exception_date_tiret_sp_etc() : message(L"bbbbbbbbbbb") {}
    	std::wstring get_message() const { return message; }
    };
     
    class exception_test_sp_et_npos_ou_pas_isblank
    {
    	std::wstring message;
    public:
    	exception_test_sp_et_npos_ou_pas_isblank() : message(L"Espace invalide !!!") {}
    	std::wstring get_message() const { return message; }
    };
    ...
    struct DateRecord
    {
    	std::tm date{ 0 };
    	bool someFlag{ false };
    };
    ...
    Et : Utils.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    ...
    void test_date_year(int& year)
    {
        if (year <= 1900 || year >= 3001)
        {
            throw exception_date_year();
        }
        return;
    }
     
    void test_date_month(int& month)
    {
        if (month <= 0 || month >= 13)
        {
            throw exception_date_month();
        }
        return;
    }
     
    void test_date_day(int& day)
    {
        if (day <= 0 || day >= 32)
        {
            throw exception_date_day();
        }
        return;
    }
     
    void test_date_tire(wchar_t d)
    {
        if (d != L'-')
        {
            throw exception_date_tiret();
        }
        return;
    }
     
    void test_date_tiret_sp_etc(wchar_t d)
    {
        if (d != L'-' && d != L'/' && d != L'.' && d != L' ')
        {
            throw exception_date_tiret_sp_etc();
        }
        return;
    }
     
    void test_sp_et_npos_ou_pas_isblank(wchar_t sp, bool t)
    {
        if (sp != L' ' && t)
        {
            throw exception_test_sp_et_npos_ou_pas_isblank();
        }
        return;
    }
    ...
    Ok ! Mais : void test_sp_et_npos_ou_pas_isblank(wchar_t sp, bool t) ???
    ou void test_sp_et_length0_ou_pas_isblank ???

    -------------------------------------
    Const :
    const int pla_pla_pla(pla_pla_pla)
    ou
    int pla_pla_pla(const int pla_pla_pla)
    Compliqué !!!

    Voici : https://learn.microsoft.com/fr-fr/cp...?view=msvc-170
    Plus simple ???

    -------------------------------------
    Vraiment merci beaucoup

  15. #435
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Ici : https://github.com/laurentbouleau/You

    Ok : .h
    struct et/ou class !!!

    Mais :
    Nom : Capture d’écran 2023-12-21 122418.png
Affichages : 115
Taille : 10,0 Ko
    Compliqué !!!

    ----------------------------
    Pardon :
    void test_sp_et_length_1_ou_plus ???

    Merci beaucoup

  16. #436
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonjour Médinoc,

    Parton !

    Ici : https://github.com/laurentbouleau/You

    Nom : Capture d’écran 2023-12-28 141241.png
Affichages : 66
Taille : 78,4 Ko
    Maintenant, ok !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    const bool Film::PrintDate_ou_Dates()
    {
    	if (affichage_date_ou_dates && date_ou_dates.size() > 0)
    	{
    		std::size_t taille, taille2;
    		wchar_t date_string[15];
    		taille = std::size(date_ou_dates);
    		std::wstring wstr;
    		for (int i = 0; i < taille; i++)
    		{
    			taille2 = std::size(date_ou_dates[i].first);
    			if (taille2 == 1)
    			{
    				wcsftime(date_string, 15, L"%d/%m/%Y", &date_ou_dates[i].first[0].date);
    				wstr = date_string;
    				wstr = wstr.substr(0, 2) + keyColor[1] + L'/' + valuesColor + wstr.substr(3, 2) + keyColor[1] + L'/' + valuesColor + wstr.substr(6, 4);
    				if (date_ou_dates[i].second != L"")
    					wstr += keyColor[1] + L" : " + valuesColor + date_ou_dates[i].second;
    				if (date_ou_dates[i].first[0].someFlag)
    					wstr += keyColor[1] + L" (" + valuesColor + L"préquel ou pas !" + keyColor[1] + L')' + valuesColor;
    				Console_Lire(hOut, wstr + L"\r\n", 4, L' ');
    			}
    			else
    			{
    				int j;
    				wstr = L"";
    				std::wstring wstr2;
    				std::size_t pos = 0;
    				std::vector<wstring>k(taille2);
    				std::tm temp{ 0 };
    				int temp2 = 1;
    				for (j = 0; j < taille2; j++)
    				{
    					if (date_ou_dates[i].first[j].date.tm_year == temp.tm_year && date_ou_dates[i].first[j].date.tm_mon == temp.tm_mon && date_ou_dates[i].first[j].date.tm_mday == temp.tm_mday)
    						// dates[i].first[j].date == temp : Marche pas !!!
    					{
    						k[j] = keyColor[1] + L'(' + valuesColor + std::to_wstring(temp2 + 1) + keyColor[1] + L')' + valuesColor;
    						if (temp2 == 1)
    							k[j - 1] += L' ' + keyColor[1] + L'(' + valuesColor + std::to_wstring(temp2) + keyColor[1] + L')' + valuesColor;
    						temp2++;
    					}
    					else
    					{
    						wcsftime(date_string, 15, L"%d/%m/%Y", &date_ou_dates[i].first[j].date);
    						wstr2 = date_string;
    						k[j] = wstr2.substr(0, 2) + keyColor[1] + L'/' + valuesColor + wstr2.substr(3, 2) + keyColor[1] + L'/' + valuesColor + wstr2.substr(6, 4);
    						temp.tm_year = date_ou_dates[i].first[j].date.tm_year;
    						temp.tm_mon = date_ou_dates[i].first[j].date.tm_mon;
    						temp.tm_mday = date_ou_dates[i].first[j].date.tm_mday;
    						temp2 = 1;
    					}
    
    				}
    				wstr2 = L"";
    				for (j = 1; j < taille2 - 1; j++)
    				{
    					pos = k[j].find(L"/");
    					if (pos != string::npos)
    						k[j] = keyColor[1] + L", " + valuesColor + k[j];
    				}
    				k.back() = keyColor[1] + L" et " + valuesColor + k.back();
    				for (j = 0; j < taille2; j++)
    					wstr2 += k[j];
    				wstr += wstr2;
    				wstr += L' ' + keyColor[1] + L'[' + valuesColor + L"pas-à-pas" + keyColor[1] + L']' + valuesColor;
    				if (date_ou_dates[i].first.back().someFlag == true)
    					wstr += keyColor[1] + L" (" + valuesColor + L"préquel" + keyColor[1] + L')' + valuesColor;
    				if (date_ou_dates[i].second != L"")
    					wstr += keyColor[1] + L" : " + valuesColor + date_ou_dates[i].second;
    				Console_Lire(hOut, wstr + L"\r\n", 4, L' ');
    			}
    		}
    		return true;
    	}
    	return false;
    }
    Problème, par exemple :
    04/11/2022 et 05/11/2022 [pas-Ó-pas] : Netflix
    Pas de solution !

    Merci vraiment

  17. #437
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    Bonne année !!!

    J'ai lu rapidement vos "derniers" posts, il y a quelques questions "basiques" que vous avez peut-être résolus tout seul, si ce n'est pas cas, pouvez-vous reformuler vos interrogations actuelles ?

    Vous utilisez maintenant le repo "https://github.com/laurentbouleau/You" t plus celui des exemples "https://github.com/laurentbouleau/Exemple", OK.
    Mais il sera pertinent de mettre les exemples aussi dans "https://github.com/laurentbouleau/You", dans un répertoire dédié, par exemple.
    Cela permettra de faire facilement des tests de non-régression lors des refactoring.

    Je vais donc, en attendant, me concentré sur votre dernière question :
    Problème, par exemple :
    04/11/2022 et 05/11/2022 [pas-Ó-pas] : Netflix
    Pas de solution !
    Le début du "problème", c'est à la ligne 65 de votre code.
    Vous utilisez des chaines de caractères "en dur" dans cette ligne.
    Généralement on évite de le faire pour autre chose que les messages d'erreurs destinés aux développeurs.
    En n'utilisant pas de valeur "en dur", cela permet de facilement "localiser" une application (avoir des textes/interfaces qui change en fonction de la langue paramétrée par l'utilisateur de l'application, texte en anglais sur systèmes anglais ou américain, en espagnol sur systèmes espagnol, etc...).
    Il y a de multiple "framework" qui permettent de ne pas mettre "en dur" ces textes.
    Sous Windows, c'est souvent via des dll de localisation.

    Ici, on va peut-être pas mettre toute cette mécanique en branle mais cela explique pourquoi, nativement, on se prend pas trop la tête avec l'encodage des textes dans du code source : généralement, ils ne sont pas dans le code source.

    Votre line 65 (et bien d'autres du même acabit) est ambigüe car le code généré sera fonction de pas mal de paramètres, comme le type d'encodage des fichiers sources, la configuration de divers outils dans la chaine de compilation, etc...

    Ces ambigüités sont intrinsèques à votre programme, on ne sait pas trop ce que votre programme va envoyer et sous quel encodage aux primitives du système d'exploitation/bibliothèques bas niveau.
    Des problèmes de configuration de ces primitives et de configuration de la console qui affichera ces textes peuvent aussi se faire jour.

    Pour simplifier la situation, je me mettrais dans une situation "simple" : faire en sorte que mon code source soit en UNICODE-16 (encodage du fichier contenant le code source), que les outils de la chaine de compilation soient configurés pour prendre en entrée les fichiers avec cet encodage.

    Une fois ces ambigüités intrinsèques levées, il reste les problématiques de configuration des primitives du système d'exploitation/bibliothèques bas niveau et de configuration de la console.

    Pour être sûr de ce qui est envoyé aux primitives du système d'exploitation/bibliothèques bas niveau puis à la console, je vous conseille d'ajouter des traces dans la seule partie qui envoie du texte à la console (donc refactoring du code pour unifier la manière d'écrire dans la console à faire très rapidement).
    Dans le code de votre dernier post il semble que cela soit la fonction "Console_Lire" (encore une fois, c'est un nom de MERDE).

    Et faire des traces, ce n'est pas polluer la console avec des textes à la con via "std::wcout << ...", comme vous vous obstinez à le faire depuis des mois malgré mes nombreux coup de gueule (cf. votre post du "02/12/2023, 13h56").

    Utilisez une MACRO type TRACE ou la fonction "OutputDebugStringW" (attention, fonction non portable) dans le corps de la fonction "Console_Lire" pour que ces traces soient visibles dans la fenêtre "Sortie" de Visual Studio (et dans d'autres outils, si nécessaire).
    Il serait peut-être judicieux de permettre le débrayage de ces traces via l'utilisation d'un "#ifdef" par exemple, histoire de ne pas être pollué dans la logue avec ces traces une fois les réglages des configurations (console, bibliothèque bas niveau, etc ...) effectués.
    Je vous conseille de logger le texte à écrire mais aussi ce même texte au format hexadécimal pour déterminer "facilement" et de manière univoque l'encodage de ce qui est envoyé.

    Une fois cela fait, on pourra voir comment configurer le reste pour qu'ils "comprennent" votre programme.

  18. #438
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Merci beaucoup Et toi, aussi

    Cela permettra de faire facilement des tests de non-régression lors des refactoring.

    Je vais donc, en attendant, me concentré sur votre dernière question :
    Problème, par exemple :
    04/11/2022 et 05/11/2022 [pas-Ó-pas] : Netflix
    Pas de solution !
    Le début du "problème", c'est à la ligne 65 de votre code.
    Vous utilisez des chaines de caractères "en dur" dans cette ligne.
    Généralement on évite de le faire pour autre chose que les messages d'erreurs destinés aux développeurs.
    En n'utilisant pas de valeur "en dur", cela permet de facilement "localiser" une application (avoir des textes/interfaces qui change en fonction de la langue paramétrée par l'utilisateur de l'application, texte en anglais sur systèmes anglais ou américain, en espagnol sur systèmes espagnol, etc...).
    Il y a de multiple "framework" qui permettent de ne pas mettre "en dur" ces textes.
    Sous Windows, c'est souvent via des dll de localisation.

    Ici, on va peut-être pas mettre toute cette mécanique en branle mais cela explique pourquoi, nativement, on se prend pas trop la tête avec l'encodage des textes dans du code source : généralement, ils ne sont pas dans le code source.

    Votre line 65 (et bien d'autres du même acabit) est ambigüe car le code généré sera fonction de pas mal de paramètres, comme le type d'encodage des fichiers sources, la configuration de divers outils dans la chaine de compilation, etc...

    Ces ambigüités sont intrinsèques à votre programme, on ne sait pas trop ce que votre programme va envoyer et sous quel encodage aux primitives du système d'exploitation/bibliothèques bas niveau.
    Des problèmes de configuration de ces primitives et de configuration de la console qui affichera ces textes peuvent aussi se faire jour.

    Pour simplifier la situation, je me mettrais dans une situation "simple" : faire en sorte que mon code source soit en UNICODE-16 (encodage du fichier contenant le code source), que les outils de la chaine de compilation soient configurés pour prendre en entrée les fichiers avec cet encodage.

    Une fois ces ambigüités intrinsèques levées, il reste les problématiques de configuration des primitives du système d'exploitation/bibliothèques bas niveau et de configuration de la console.

    Pour être sûr de ce qui est envoyé aux primitives du système d'exploitation/bibliothèques bas niveau puis à la console, je vous conseille d'ajouter des traces dans la seule partie qui envoie du texte à la console (donc refactoring du code pour unifier la manière d'écrire dans la console à faire très rapidement).
    Dans le code de votre dernier post il semble que cela soit la fonction "Console_Lire" (encore une fois, c'est un nom de MERDE).

    Et faire des traces, ce n'est pas polluer la console avec des textes à la con via "std::wcout << ...", comme vous vous obstinez à le faire depuis des mois malgré mes nombreux coup de gueule (cf. votre post du "02/12/2023, 13h56").

    Utilisez une MACRO type TRACE ou la fonction "OutputDebugStringW" (attention, fonction non portable) dans le corps de la fonction "Console_Lire" pour que ces traces soient visibles dans la fenêtre "Sortie" de Visual Studio (et dans d'autres outils, si nécessaire).
    Il serait peut-être judicieux de permettre le débrayage de ces traces via l'utilisation d'un "#ifdef" par exemple, histoire de ne pas être pollué dans la logue avec ces traces une fois les réglages des configurations (console, bibliothèque bas niveau, etc ...) effectués.
    Je vous conseille de logger le texte à écrire mais aussi ce même texte au format hexadécimal pour déterminer "facilement" et de manière univoque l'encodage de ce qui est envoyé.

    Une fois cela fait, on pourra voir comment configurer le reste pour qu'ils "comprennent" votre programme.
    Plus simple, non ? Rien compris !!! Compliqué !!!

    Sinon : Exemple.exe :
    https://github.com/laurentbouleau/Exemple avec Série ! (2024-01-05). Préquel !

    Merci d'avance

  19. #439
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Pardon, vous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        std::vector<std::tuple<unsigned int, std::wstring, std::wstring, std::wstring, std::tm, std::wstring>> titres;
    Ok !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        std::tm tm_temps{ 0 };
        pos = 0;
        tm_temps.tm_min = std::stoi(t[1], &pos);
        titres.push_back(make_tuple(x, t1, t2, t3, tm_temps, t[2]));
    Ok !

    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        std::size_t s = saison.titres.size(); //to get the size of the vector
        for (int i = 0; i < s; i++)
        { //to print the elements stored in vector of tuples, vec
            std::wcout << i << std::endl;
            std::wcout << L"__x    =" << get<0>(saison.titres[i]) << std::endl;
            std::wcout << L"__t1   =[" << get<1>(saison.titres[i]) << L"]" << std::endl;
            std::wcout << L"__t2   =[" << get<2>(saison.titres[i]) << L"]" << std::endl;
            std::wcout << L"__t3   =[" << get<3>(saison.titres[i]) << L"]" << std::endl;
            std::wcout << L"__temps=[" << get<4>(saison.titres[i].tm_min) << L"]" << std::endl;
            std::wcout << L"__p    =[" << get<5>(saison.titres[i]) << L"]" << std::endl;
        }
    Beaucoup ! Mais, pas de résultat !!! Pourquoi ?

    Merci d'avance

  20. #440
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 524
    Points : 0
    Points
    0
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        std::size_t s = saison.titres.size(); //to get the size of the vector
        std::tm j;
        for (int i = 0; i < s; i++)
        { //to print the elements stored in vector of tuples, vec
            std::wcout << i << std::endl;
            std::wcout << L"__x    =" << get<0>(saison.titres[i]) << std::endl;
            std::wcout << L"__t1   =[" << get<1>(saison.titres[i]) << L"]" << std::endl;
            std::wcout << L"__t2   =[" << get<2>(saison.titres[i]) << L"]" << std::endl;
            std::wcout << L"__t3   =[" << get<3>(saison.titres[i]) << L"]" << std::endl;
            j = get<4>(saison.titres[i]);
            std::wcout << L"__temps=[" << j.tm_hour*1 + j.tm_min << L"]" << std::endl;
            std::wcout << L"__p    =[" << get<5>(saison.titres[i]) << L"]" << std::endl;
        }
    Ok !

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probléme avc la formclosing
    Par dv-2008 dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/03/2008, 16h33
  2. probléme avc console.readline()
    Par dv-2008 dans le forum VB.NET
    Réponses: 7
    Dernier message: 10/03/2008, 00h33
  3. j'ai un probléme avc un code vb.net aider moi svp
    Par dv-2008 dans le forum VB.NET
    Réponses: 12
    Dernier message: 29/01/2008, 09h20
  4. Problème avc une requête
    Par Raiga dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/06/2007, 18h36
  5. Toujours problème de lien avce la lib Cblas
    Par Kirou dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 19/06/2007, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo