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. #401
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 166
    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 166
    Points : 12 284
    Points
    12 284
    Par défaut
    Citation Envoyé par Laurent_B_ Voir le message
    Ben non !!!
    Ça devrait le faire, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    bool checkyear(int y)
    {
        if (!(1582 <= y))
            assert(y >= 1582 && L"L'année invalide !");
            //return false;
        return true;
    }
    "assert" est là, normalement, pour détecter des erreurs de programmation, donc rien à faire ici.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool checkyear(int y)
    {
        return 1582 >= y;
    }
    Et c'est plus conforme au type de retour de la fonction.

    Idem pour checkmonth et checkday.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool checkday(int m, int d, int y)
    Vs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool checkday(int& m, int d, int& y)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool checkday(int m, int d, int y)
    Car il faut que la signature de la fonction indique si elle peut modifier ou pas la valeur des arguments.
    "checkday" n'a pas à modifier les arguments passés en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool checkday(const int& m, const int& d, const int& y)
    Attention, ordre des paramètres casse-gueule.
    Mais comme une "const int&" et un "int" prennent autant de place dans la pile et que la copie d'un int n'est pas couteux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool checkday(int m, int d, int y)
    Ça fait le taf (passage par copie plutôt que par référence).

    Arrêtez d'utiliser "std::wcout" pour faire des traces, votre console est votre affichage, pas le dépotoir des traces d'exécution.
    Si vous voulez avoir des traces, utilisez OutputDebugString :
    https://learn.microsoft.com/fr-fr/wi...utdebugstringw
    Ou encore mieux, utilisez le débogueur en mode pas à pas pour voir les valeurs des variables en "temps réel".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            if (!yearFlag && !monFlag && !dayFlag
                && (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)
    Les variables sont initialisées dans des expressions booléens, donc les parties à droites ne seront évaluée que si la partie gauche est évalué à true, avec tous les effets de bord que cela entraine.(BIS)
    C'est une horreur à débuguer ces machins.
    Nous n'avons pas les spécifications qui permettent de savoir s'il y a plus simple que ces chausse-trappes pour coder la récupération des dates.
    Pouvez-vous nous donner les spécifications que doivent suivre les noms des fichiers pour spécifier des dates, SVP ?
    Faire le reverse-engineering du code pour les trouver serait complexe et détecterait vraisemblablement des bugs d'implémentation.

    Lignes 138-139 : il faut aussi initialiser "date.date.tm_year" et pas laisser un machin au pif !!!
    Lign 177: idem mais aussi "date.date.tm_mon" !!!
    Lignes 208-213 : Ça sert à quoi ???

    Si vous l'a testée cette fonction, elle ne donne pas les bons résultats ?

  2. #402
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Ok ! Rrrr !

    Code :
    ...
    Et c'est plus conforme au type de retour de la fonction.
    y : ok !
    m : ok !
    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
    bool checkday(int m, int d, int y)
    {
        if (!(1 <= d && d <= 31))
            return false;
        if ((d == 31) && (m == 2 || m == 4 || m == 6 || m == 9 || m == 11))
             return false;
        if ((d == 30) && (m == 2))
             return false;
        if ((m == 2) && (d == 29) && (y % 4 != 0))
            return false;
        if ((m == 2) && (d == 29) && (y % 400 == 0))
            return true;
        if ((m == 2) && (d == 29) && (y % 100 == 0))
            return false;
        if ((m == 2) && (d == 29) && (y % 4 == 0))
            return true;
        return true;
    }
    Ok ou pas ?

    -----------------

    Car il faut que la signature de la fonction indique si elle peut modifier ou pas la valeur des arguments.
    "checkday" n'a pas à modifier les arguments passés en paramètre :
    ...
    Ça fait le taf (passage par copie plutôt que par référence).
    Ok !

    ----------------
    Arrêtez d'utiliser "std::wcout" pour faire des traces, votre console est votre affichage, pas le dépotoir des traces d'exécution.
    Si vous voulez avoir des traces, utilisez OutputDebugString :
    https://learn.microsoft.com/fr-fr/wi...utdebugstringw
    Ou encore mieux, utilisez le débogueur en mode pas à pas pour voir les valeurs des variables en "temps réel".
    Ah ! Mince !

    ----------------
    Les variables sont initialisées dans des expressions booléens, donc les parties à droites ne seront évaluée que si la partie gauche est évalué à true, avec tous les effets de bord que cela entraine.(BIS)
    Compliqué !!! Plus simple ! Fatiqué !!!

    --------------
    C'est une horreur à débuguer ces machins.
    Nous n'avons pas les spécifications qui permettent de savoir s'il y a plus simple que ces chausse-trappes pour coder la récupération des dates.
    Pouvez-vous nous donner les spécifications que doivent suivre les noms des fichiers pour spécifier des dates, SVP ?
    Faire le reverse-engineering du code pour les trouver serait complexe et détecterait vraisemblablement des bugs d'implémentation.
    Ok :
    2022-05-19_20 Netflix.txt
    2022-08-01_01_02-23_23.txt
    2022-08-20_20_ Netflix.txt
    2022-09-04 TF1.txt
    2022-12-31_2023-01-03 Netflix.txt
    etc...
    Ok !

    Et : Non ! exemples :
    2023-2-15.txt
    2023-03-15-.txt
    2023-04-16_6_ Netflix
    Etc...

    Lignes 138-139 : il faut aussi initialiser "date.date.tm_year" et pas laisser un machin au pif !!!
    Lign 177: idem mais aussi "date.date.tm_mon" !!!
    Lignes 208-213 : Ça sert à quoi ???

    Si vous l'a testée cette fonction, elle ne donne pas les bons résultats ?
    Fatiqué !!!

  3. #403
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Lignes 138-139 : il faut aussi initialiser "date.date.tm_year" et pas laisser un machin au pif !!!
    Lign 177: idem mais aussi "date.date.tm_mon" !!!
    Lignes 208-213 : Ça sert à quoi ???
    Lignes : 138-138, 177, 208-213 :
    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
    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::vector<DateRecord>::iterator iter;
        DateRecord date{ 0 };
     
        wchar_t sp = L' ', tiret = L'-', tiret_bas = L'_';
        int y, m, d;
        y = m = d = 0;
        int firstYear = 0, firstMon = 0, firstDay = 0;
        bool yearFlag, monFlag, dayFlag;
        yearFlag = monFlag = dayFlag = false;
        int i = 0;
        do
        {
            if (strRestant[0] == sp)
                break;
     
            //int y = std::stoi(wstr.substr(0, 4));
            //int m = std::stoi(wstr.substr(5, 2));
            //int d = std::stoi(wstr.substr(8, 2));
     
            //checkyear(y);
            //checkmonth(m);
            ///checkday(m, d, y);
     
            // year + mon + mday
            std::wcout << L"year + mon + mday" << std::endl;
            if (!yearFlag && !monFlag && !dayFlag
                && (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)
            {
                std::wcout << L"y ?" << std::endl;
                date.date.tm_year = y - 1900;
                date.date.tm_mon = m - 1;
                date.date.tm_mday = d;
                strRestant = strRestant.substr(10);
                if (strRestant[0] == tiret_bas)
                {
                    date.someFlag = true;
                    dates.push_back(date);
                    std::wcout << L"i=" << i << std::endl;
                    std::wcout << L"  dates[" << i << L"].date=" << dates[i].date.tm_year + 1900 << L'/' << dates[i].date.tm_mon + 1 << L'/' << dates[i].date.tm_mday << std::endl;
                    std::wcout << L"  dates[" << i << L"].someFlag=" << dates[i].someFlag << std::endl;
                    i++;
                    strRestant = strRestant.substr(1);
                    firstYear = y;
                    m = d = 0;
                    continue;
                }
                else
                {
                    date.someFlag = false;
                    dates.push_back(date);
                    std::wcout << L"i=" << i << std::endl;
                    std::wcout << L"  dates[" << i << L"].date=" << dates[i].date.tm_year + 1900 << L'/' << dates[i].date.tm_mon + 1 << L'/' << dates[i].date.tm_mday << std::endl;
                    std::wcout << L"  dates[" << i << L"].someFlag=" << dates[i].someFlag << std::endl;
                    i++;
                    break;
                }
            }
            else
            {
                std::wcout << L"year pas ok !" << std::endl;
                assert(firstYear < y && L"aaa");
            }
            // mon + mday
            std::wcout << L"mon + mday" << std::endl;
            if (!monFlag && !dayFlag
                && firstYear != 0
                && (m = std::stoi(strRestant.substr(0, 2))) && checkmonth(m)
                && strRestant[2] == tiret
                && (d = std::stoi(strRestant.substr(3, 2))) && checkday(m, d, y)
                && firstMon < m)
            {
                std::wcout << L"m ?" << std::endl;
                date.date.tm_mon = m - 1;
                date.date.tm_mday = d;
                strRestant = strRestant.substr(5);
                if (strRestant[0] == tiret_bas)
                {
                    date.someFlag = true;
                    dates.push_back(date);
                    std::wcout << L"i=" << i << std::endl;
                    std::wcout << L"  dates[" << i << L"].date=" << dates[i].date.tm_year + 1900 << L'/' << dates[i].date.tm_mon + 1 << L'/' << dates[i].date.tm_mday << std::endl;
                    std::wcout << L"  dates[" << i << L"].someFlag=" << dates[i].someFlag << std::endl;
                    i++;
                    strRestant = strRestant.substr(1);
                    firstMon = m;
                    m = d = 0;
                    continue;
                }
                else
                {
                    date.someFlag = false;
                    dates.push_back(date);
                    std::wcout << L"i=" << i << std::endl;
                    std::wcout << L"  dates[" << i << L"].date=" << dates[i].date.tm_year + 1900 << L'/' << dates[i].date.tm_mon + 1 << L'/' << dates[i].date.tm_mday << std::endl;
                    std::wcout << L"  dates[" << i << L"].someFlag=" << dates[i].someFlag << std::endl;
                    i++;
                    break;
                }
            }
            else
            {
                std::wcout << L"mon pas ok !" << std::endl;
                assert(firstMon < m && L"aaa");
            }
            // mday
            std::wcout << L"mday" << std::endl;
            if (firstYear != 0
                && (m = std::stoi(strRestant.substr(0, 2))) && checkmonth(m)
                && firstDay <= d)
            {
                std::wcout << L"d ?" << std::endl;
                date.date.tm_mday = d;
                strRestant = strRestant.substr(2);
                if (strRestant[0] == tiret_bas)
                {
                    date.someFlag = true;
                    dates.push_back(date);
                    std::wcout << L"i=" << i << std::endl;
                    std::wcout << L"  dates[" << i << L"].date=" << dates[i].date.tm_year + 1900 << L'/' << dates[i].date.tm_mon + 1 << L'/' << dates[i].date.tm_mday << std::endl;
                    std::wcout << L"  dates[" << i << L"].someFlag=" << dates[i].someFlag << std::endl;
                    i++;
                    strRestant = strRestant.substr(1);
                    firstDay = d;
                    m = d = 0;
                    continue;
                }
                else
                {
                    date.someFlag = false;
                    dates.push_back(date);
                    std::wcout << L"i=" << i << std::endl;
                    std::wcout << L"  dates[" << i << L"].date=" << dates[i].date.tm_year + 1900 << L'/' << dates[i].date.tm_mon + 1 << L'/' << dates[i].date.tm_mday << std::endl;
                    std::wcout << L"  dates[" << i << L"].someFlag=" << dates[i].someFlag << std::endl;
                    i++;
                    break;
                }
            }
            else
            {
                std::wcout << L"day pas ok !" << std::endl;
                assert(firstDay < d && L"aaa");
            }
            if (!yearFlag)
                yearFlag;
            if (!monFlag)
                monFlag;
            if (!dayFlag)
                dayFlag;
     
        } while (strRestant.length() > 0);
        std::wstring streaming = L"";
        if (strRestant[0] == sp)
            strRestant = strRestant.substr(1);
        streaming = strRestant;
        return std::pair<std::vector<DateRecord>, std::wstring>(dates, streaming);
    }
    Ou qu'il ait ?

    ???

  4. #404
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 166
    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 166
    Points : 12 284
    Points
    12 284
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool checkday(int m, int d, int y)
    {
     ...
    }
    Ok ou pas ?
    Assez Ok, pas forcément le plus lisible, mais code simple.

    Juste pour l'améliorer 2/3 trucs :

    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
    bool checkday(int m, int d, int y)
    {
        bool retVal = false;
     
        if(checkyear(y))
        {
            if(checkmonth(m))
            {
                if ( d > 0 )
                {
                     if (d <= 28)
                     {
                          retVal = true;
                     }
                     else if (d==29)
                     {
                          if( m != 2 )
                          {
                               retVal = true;
                          }
                          else
                          {
                              retVal = (y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0))
                          }
                     }
                     else if (d == 30)
                     {
                         retVal  = m != 2
                     }
                     else if (d == 31)
                     {
                          retVal =  (m != 2 && m != 4 && m != 6 && m != 9 && m != 11)
                     }
                }
            }
        }
     
        return retVal;
    }
    Les variables sont initialisées dans des expressions booléens, donc les parties à droites ne seront évaluée que si la partie gauche est évalué à true, avec tous les effets de bord que cela entraine.(BIS)
    Compliqué !!! Plus simple ! Fatiqué !!!
    C'est votre code qui est compliqué. Même si je ne suis pas fatigué je serais quand même retissant à lire ce type de code.
    C'est moi qui vous demande de simplifier le code.
    Pour vous aider à simplifier le code, il nous faudrait les "spécifications" pour trouver un moyen de les implémenter de manière plus simple.

    Un code comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            if (!yearFlag && !monFlag && !dayFlag
                && (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)
    C'est pas humain.
    Pourquoi c'est si complexe ????

    Ok :
    2022-05-19_20 Netflix.txt
    2022-08-01_01_02-23_23.txt
    2022-08-20_20_ Netflix.txt
    2022-09-04 TF1.txt
    2022-12-31_2023-01-03 Netflix.txt
    etc...
    Ok !

    Et : Non ! exemples :
    2023-2-15.txt
    2023-03-15-.txt
    2023-04-16_6_ Netflix
    Etc...
    Ok, mais que devrait contenir la valeur de retour
    de ExtraireInfosDepuisNomDeFichier("2022-05-19_20 Netflix.txt") ?
    de ExtraireInfosDepuisNomDeFichier("2022-08-01_01_02-23_23.txt") ?
    de ExtraireInfosDepuisNomDeFichier("2022-08-20_20_ Netflix.txt") ?
    de ExtraireInfosDepuisNomDeFichier("2022-09-04 TF1.txt") ?
    de ExtraireInfosDepuisNomDeFichier("2022-12-31_2023-01-03 Netflix.txt") ?

    J'ai donné les numéros de ligne correspondant au code que vous avez posté avant mon message.

    Là, vous repostez une partie du code, donc les lignes ne correspondent plus.

    Lignes 138-139 : il faut aussi initialiser "date.date.tm_year" et pas laisser un machin au pif !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                std::wcout << L"m ?" << std::endl;
                date.date.tm_mon = m - 1;
                date.date.tm_mday = d;
    Lign 177: idem mais aussi "date.date.tm_mon" !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                std::wcout << L"d ?" << std::endl;
                date.date.tm_mday = d;
    Lignes 208-213 : Ça sert à quoi ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            if (!yearFlag)
                yearFlag;
            if (!monFlag)
                monFlag;
            if (!dayFlag)
                dayFlag;

  5. #405
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Bonsoir Bacelar,

    de ExtraireInfosDepuisNomDeFichier("2022-05-19_20 Netflix.txt") : 2022-05-19 et 2022-05-20 : pas-à-pas ! Fatigué !
    de ExtraireInfosDepuisNomDeFichier("2022-08-01_01_02-23_23.txt") : 2022-08-01 et 2022-08-01 (le même) et 2022-02-23 et 2022-02-23 : pas-à-pas ! Fatigué, mais exemple !
    de ExtraireInfosDepuisNomDeFichier("2022-08-20_20_ Netflix.txt") : 2022-08-20 et 2022-08-20 (le même), et préquel ou pas terminé !
    de ExtraireInfosDepuisNomDeFichier("2022-09-04 TF1.txt") : ok !
    de ExtraireInfosDepuisNomDeFichier("2022-12-31_2023-01-03 Netflix.txt") : 2022-12-31 et 2023-01-03 : pas-à-pas !

    Voilà !

  6. #406
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0

  7. #407
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool checkyear(int y)
    {
        return 1582 >= y;
    }
    Pardon ?

  8. #408
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    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
    ...
        std::vector<DateRecord> dates{};
        DateRecord date{ 0 };
    ...
        std::size_t taille{};
    ...
            if (strRestant[0] != tiret_bas &&
                !yearFlag && !monFlag && !dayFlag &&
                (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)
            {
                firstYear = y;
                std::wcout << L"y ?" << std::endl;
                date.date.tm_year = y - 1900;
                date.date.tm_mon = m - 1;
                date.date.tm_mday = d;
                strRestant = strRestant.substr(10);
                date.someFlag = false;
                std::wcout << L"taille=" << taille << std::endl;
                taille = std::size(dates);
                dates.push_back(date);
                std::wcout << L"  dates[" << i << L"].date=" << dates[i].date.tm_year + 1900 << L'/' << dates[i].date.tm_mon + 1 << L'/' << dates[i].date.tm_mday << std::endl;
                std::wcout << L"  dates[" << i << L"].someFlag=" << dates[i].someFlag << std::endl;
                taille = std::size(dates);
                std::wcout << L"taille=" << taille << std::endl;
    ...
    }
            std::wcout << L"mon + mday" << std::endl;
            if (strRestant[0] == tiret_bas &&
                firstYear != 0 &&
                (m = std::stoi(strRestant.substr(1, 2))) && checkmonth(m) &&
                strRestant[3] == tiret &&
                (d = std::stoi(strRestant.substr(4, 2))) && checkday(m, d, y) &&
                firstMon < m)
    ...
            std::wcout << L"mday" << std::endl;
            if (firstYear != 0 &&
                strRestant[0] == tiret_bas &&
                (d = std::stoi(strRestant.substr(1, 2))) && checkday(m, d, y) &&
                firstDay <= d)
    ...
            std::wcout << L"_" << std::endl;
            if (
                strRestant[0] == tiret_bas &&
                strRestant[1] != wstring::npos
                )
            {
                taille = std::size(dates);
                std::wcout << L"taille=" << taille << std::endl;
                //dates[taille].someFlag = true; // ???
    
    ...
                strRestant = strRestant.substr(1);
                continue;
            }
    ...
        } while (strRestant.length() > 0 || strRestant[0] == sp);
        std::wstring streaming = L"";
        if (strRestant[0] == sp)
        {
            strRestant = strRestant.substr(1);
            if (strRestant[0] == sp)
                assert(L"L'espace (2) invalide !");
            if (streaming[0] != wstring::npos)
                streaming = strRestant;
        }
        return std::pair<std::vector<DateRecord>, std::wstring>(dates, streaming);
    }
    Merci

  9. #409
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct DateRecord
    {
        std::tm date{ 0 };
        bool someFlag{ false };
    };
    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
    std::pair<std::vector<DateRecord>, std::wstring> ExtraireInfosDepuisNomDeFichier(const std::wstring& nomFichier)
    {
    ...
        ind i = 0;
        do
        {
    ...
           if (strRestant[0] != tiret_bas &&
               !yearFlag && !monFlag && !dayFlag &&
               (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)))
           {
               assert(firstYear < y && L"L'année aaaaa");
               firstYear = y;
               strRestant = strRestant.substr(10);
               dates.push_back(???);
               dates[i].date.tm_year = y - 1900;
               dates[i].date.tm_mon = m - 1;
               dates[i].date.tm_mday = d;
               dates[i].someFlag = false;
    ...
            if (
                strRestant[0] == tiret_bas &&
                strRestant[1] != wstring::npos
                )
            {
                taille = std::size(dates);
                dates[i - 1].someFlag = true;
                strRestant = strRestant.substr(1);
                continue;
            }
    ...
    Merci beaucoup

  10. #410
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    ???

  11. #411
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Nom : Capture d’écran 2023-11-22 141137.png
Affichages : 210
Taille : 37,2 Ko

    ???

    Merci d'avance

  12. #412
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Pièce jointe 646944 : tant pis !

    Mais :
    https://github.com/laurentbouleau/Exemple : préquel !

    Et, mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                if (strRestant[0] == sp && strRestant[1] == wstring::npos)
                    assert((strRestant[0] == sp && strRestant[1] == wstring::npos) && L"L'espace invalide !"); // Je sais pas !!!
    181 et 182 !

    Voila !
    Merci beaucoup

  13. #413
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    https://github.com/laurentbouleau/Exemple : préquel

    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                if (strRestant[0] == sp && strRestant[1] == wstring::npos)
                    assert((strRestant[0] == sp && strRestant[1] == wstring::npos) && L"L'espace invalide !"); // Je sais pas !!!
    Je sais pas !!!

  14. #414
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Ok :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        std::vector<DateRecord> dates{};
        std::wstring streaming = L"";
    Mais :

    https://github.com/laurentbouleau/Exemple : préquel

    Merci d'avance

  15. #415
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assert(strRestant[0] ==???) && L"??? !!!");
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        const std::wstring nomFichier = L"2022-08-30_31(Netflix.txt";
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        const std::wstring nomFichier = L"2022-08-30_31Netflix.txt";
    Merci

  16. #416
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 166
    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 166
    Points : 12 284
    Points
    12 284
    Par défaut
    Bonsoir Bacelar,

    de ExtraireInfosDepuisNomDeFichier("2022-05-19_20 Netflix.txt") : 2022-05-19 et 2022-05-20 : pas-à-pas ! Fatigué !
    de ExtraireInfosDepuisNomDeFichier("2022-08-01_01_02-23_23.txt") : 2022-08-01 et 2022-08-01 (le même) et 2022-02-23 et 2022-02-23 : pas-à-pas ! Fatigué, mais exemple !
    de ExtraireInfosDepuisNomDeFichier("2022-08-20_20_ Netflix.txt") : 2022-08-20 et 2022-08-20 (le même), et préquel ou pas terminé !
    de ExtraireInfosDepuisNomDeFichier("2022-09-04 TF1.txt") : ok !
    de ExtraireInfosDepuisNomDeFichier("2022-12-31_2023-01-03 Netflix.txt") : 2022-12-31 et 2023-01-03 : pas-à-pas !

    Voilà !
    Si je résume, les dates sont au format yyyy-MM-dd séparées par des "_".
    S'il n'y a qu'une série de 2 groupes de chiffres, c'est que c'est une date au format "MM-dd" avec l'année à récupérer dans la date précédente.
    S'il n'y a qu'une série de chiffres, c'est que c'est une date au format "dd" avec l'année et le mois ç récupérer dans la date précédente.
    Le média est déparé des dates qui précèdent via un espace.

    Je ne comprends pas la notion de "pas-à-pas" ou de "pas terminé" ou de "préquel".

    Pour moi :

    2022-05-19_20 Netflix.txt :
    - media : "Netflix"
    - dates :
    2022-05-19
    2022-05-20

    2022-08-01_01_02-23_23.txt :
    - média : inconnu
    - dates :
    2022-08-01
    2022-08-01
    2022-02-23C'est pas chronologique, c'est important ???
    2022-02-23

    2022-08-20_20_ Netflix.txt :
    - media : "Netflix"
    - dates :
    2022-08-20
    2022-08-20
    (mais il y a un _ en trop, c'est valide ou pas comme format ?)

    2022-09-04 TF1.txt :
    - media : "TF1"
    - dates :
    2022-09-04

    2022-12-31_2023-01-03 Netflix.txt :
    - media : "Netflix"
    - dates :
    2022-12-31
    2023-01-03

    Si c'est la logique des noms, c'est facilement implémentable et fiabilisable avec des regex, mais on verra ça plus tard.

    Je ne vois plus l'intérêt du champ "someFlag" de la structure "DateRecord", car elle était là pour "capturer" un détail d'implémentation du décodage des chaines de caractères des dates qui n'a aucun intérêt à l'extérieure du décodage.

    C'est une bonne pratique de faire des tests unitaires (TU), il a même pas mal d'outils qui permettent d'en simplifier l'écriture et leur validation automatique.
    Ici, c'est un peu archaïque mais surtout, vous n'indiquez pas les valeurs attendues, c'est le plus important.
    Si vous pouvez spécifier ces valeurs attendues (en fonction des données en entrée), c'est plus important que le code lui-même.

    Bonsoir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool checkyear(int y)
    {
        return 1582 >= y;
    }
    Pardon ?
    Il y a un problème avec ce code ?
    "1582 >= y" est évalué comme un booléan.
    Vrai/True si y est supérieur ou égale à 1582.
    Faux/False si y est inférieur à 1582.

    la fonction "checkyear" ne fait que retourner le résultat de cette expression booléenne.

    Citation Envoyé par Laurent_B_ Voir le message
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
        std::vector<DateRecord> dates{};
        DateRecord date{ 0 };
    ...
    ...
    ...
        return std::pair<std::vector<DateRecord>, std::wstring>(dates, streaming);
    }
    Merci
    Dégagez tous ces "std::wcout". Utilisez le débogueur pas de trace sur la console !!!

    Et il y a toujours ces putain d'affectation de variable dans des clauses de if, c'est un gérable pour un cerveau humain standard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            if (strRestant[0] != tiret_bas &&
                !yearFlag && !monFlag && !dayFlag &&
                (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)
            {
    Non, tout ce qui est en rouge DEGAGE ailleur !!!

    Pourquoi faire un décodeur aussi compliqué ?
    Le format de date + média me semble pourtant simple à décoder.

    Pourquoi pas faire un décodeur en 2 étapes ?
    1 : trouver le première espace qui séparé le média des dates.c=> on n'a directement le nom du média => de qui est entre l'espace et l'extension du fichier.
    2 : découper la partie avant le premier espace en prenant comme séparateur "_", cela donnera un ensemble d'"éléments".
    Vous décodez chacun de ces éléments pour en construire une date que vous ajoutez à la liste "dates".

    Citation Envoyé par Laurent_B_ Voir le message
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct DateRecord
    {
        std::tm date{ 0 };
        bool someFlag{ false };
    };
    Ok !!!
    Ok, mais comme déjà mentionné, je ne suis pas sûr de l'utilité du champ "someFlag". donc de la structure "DateRecord".
    Mais peut-être que la structure sera utile plus tard.

    Citation Envoyé par Laurent_B_ Voir le message
    Bonsoir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    std::pair<std::vector<DateRecord>, std::wstring> ExtraireInfosDepuisNomDeFichier(const std::wstring& nomFichier)
    {
    ...
        ind i = 0;
        do
        {
    ...
    
               strRestant = strRestant.substr(10);
               dates.push_back(???);
               dates[i].date.tm_year = y - 1900;
    ...
    Merci beaucoup
    Il faut ajouter à dates la date que vous avez "isolée"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                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);
    (code peu élégant mais explicite)

    Citation Envoyé par Laurent_B_ Voir le message
    Bonjour,

    Nom : Capture d’écran 2023-11-22 141137.png
Affichages : 210
Taille : 37,2 Ko

    ???

    Merci d'avance
    Quelle est la question, SVP ?
    Pour lancer le débogueur, c'est 'F5'.

    Citation Envoyé par Laurent_B_ Voir le message
    Et, mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                if (strRestant[0] == sp && strRestant[1] == wstring::npos)
                    assert((strRestant[0] == sp && strRestant[1] == wstring::npos) && L"L'espace invalide !"); // Je sais pas !!!
    181 et 182 !

    Voila !
    Merci beaucoup
    C'est quoi la question ?
    Les assert me font tiquer car c'est fait pour détecter des erreurs de programmation et là, je vois peut-être des erreurs potentielles dans le nom des fichiers mais c'est pas de la faute du programmeur.

    Citation Envoyé par Laurent_B_ Voir le message
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assert(strRestant[0] ==???) && L"??? !!!");
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        const std::wstring nomFichier = L"2022-08-30_31(Netflix.txt";
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        const std::wstring nomFichier = L"2022-08-30_31Netflix.txt";
    Merci
    Je ne comprends pas trop les questions.
    Les assert, j'ai l'impression qu'elles sont mal utilisées.
    Pour les déclarations de "nomFichier", il faut utiliser le format que vous voulez tester.
    Donc, pour le cas nominal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        const std::wstring nomFichier = L"2022-08-30_31 Netflix.txt";
    Mais vous pouvez aussi utiliser les autres chaines pour tester le comportement en cas de mauvais format dans le nom du fichier.

  17. #417
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Je ne comprends pas la notion de "pas-à-pas" ou de "pas terminé" ou de "préquel".
    Fatigué : pas-à-pas ou préquel ou un autre ???
    Exemple :
    2022-08-20_20_ Netflix.txt
    Ben oui !!!

    Je ne vois plus l'intérêt du champ "someFlag" de la structure "DateRecord", car elle était là pour "capturer" un détail d'implémentation du décodage des chaines de caractères des dates qui n'a aucun intérêt à l'extérieure du décodage.
    Si si si !!!

    C'est une bonne pratique de faire des tests unitaires (TU), il a même pas mal d'outils qui permettent d'en simplifier l'écriture et leur validation automatique.
    Ici, c'est un peu archaïque mais surtout, vous n'indiquez pas les valeurs attendues, c'est le plus important.
    Si vous pouvez spécifier ces valeurs attendues (en fonction des données en entrée), c'est plus important que le code lui-même.
    https://zestedesavoir.com/tutoriels/...erreur-erreur/ : Oui, mais y + m + d : compliqué !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dégagez tous ces "std::wcout". Utilisez le débogueur pas de trace sur la console !!!
    Ou il-ait ?

    Non, tout ce qui est en rouge DEGAGE ailleur !!!

    Pourquoi faire un décodeur aussi compliqué ?
    Le format de date + média me semble pourtant simple à décoder.

    Pourquoi pas faire un décodeur en 2 étapes ?
    1 : trouver le première espace qui séparé le média des dates.c=> on n'a directement le nom du média => de qui est entre l'espace et l'extension du fichier.
    2 : découper la partie avant le premier espace en prenant comme séparateur "_", cela donnera un ensemble d'"éléments".
    Vous décodez chacun de ces éléments pour en construire une date que vous ajoutez à la liste "dates".
    Fatigué, crevé !!!

    Ok, mais comme déjà mentionné, je ne suis pas sûr de l'utilité du champ "someFlag". donc de la structure "DateRecord".
    Mais peut-être que la structure sera utile plus tard.
    Ben non !!!

    Il faut ajouter à dates la date que vous avez "isolée"
    ...
    (code peu élégant mais explicite)
    Pardon ?

    Pour lancer le débogueur, c'est 'F5'.
    Oui, c'est vra

    C'est quoi la question ?
    Les assert me font tiquer car c'est fait pour détecter des erreurs de programmation et là, je vois peut-être des erreurs potentielles dans le nom des fichiers mais c'est pas de la faute du programmeur.
    Ok !

    Je ne comprends pas trop les questions.
    Les assert, j'ai l'impression qu'elles sont mal utilisées.
    Pour les déclarations de "nomFichier", il faut utiliser le format que vous voulez tester.
    Donc, pour le cas nominal :
    ...
    Mais vous pouvez aussi utiliser les autres chaines pour tester le comportement en cas de mauvais format dans le nom du fichier.
    Crevé !!!

    Lundi, 9h : le juge (tribunal) ! Alors, je dorme 24h !

    Merci d'avance

  18. #418
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    (Curatelle simple : ouf)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    std::pair<std::vector<DateRecord>, std::wstring> ExtraireInfosDepuisNomDeFichier(const std::wstring& nomFichier)
    {
    ...
        y = stoi(strRestant.substr(0, 4));
        m = std::stoi(strRestant.substr(5, 2));
        d = std::stoi(strRestant.substr(8, 2));
    ...
        do
        {
    ...
        } while (strRestant.length() > 0);
        return std::pair<std::vector<DateRecord>, std::wstring>(dates, streaming);
    }
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    std::pair<std::vector<DateRecord>, std::wstring> ExtraireInfosDepuisNomDeFichier(const std::wstring& nomFichier)
    {
    ...
        do
        {
    ...
            y = stoi(strRestant.substr(0, 4));
            m = std::stoi(strRestant.substr(5, 2));
            d = std::stoi(strRestant.substr(8, 2));
    ...
       } while (strRestant.length() > 0);
        return std::pair<std::vector<DateRecord>, std::wstring>(dates, streaming);
    }
    Merci beaucoup

  19. #419
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    582
    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 : 582
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Pas compris !!!

    ???

    Fatigué !!!

    Merci

  20. #420
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    À quel endroit du code est-ce?

+ 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