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. #1161
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 430
    Par défaut
    L'Attaque des Titans.[2013- Crunchyroll].Manga : Problème !!! Hors saison !!!
    C'EST QUOI LE PROBLEME ???
    Expliquez, SVP !!!!

    Je vais jouer au devin.

    Je suppose que c'est parce que le Hors Serie apparait en premier et pas en second, si on se base sur la chronologie.
    C'est ça ???

    C'est bien vous qui avez avalisé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void Serie::Print_Saisons()
    {
        for (auto& saison : m_hors_saisons)
        {
            saison.Print();
        }
     
        for (auto& saison : m_non_hors_saisons)
        {
            saison.Print();
        }
    }
    Le code est bien clair sur la manière dont les "Saisons + Hors Saison" s'affichent les uns par rapport aux autres.
    Les Hors Series puis le Saisons.
    Si l'ordre ne vous convient pas, pourquoi ne le changez-vous pas vous-même ???
    Vous devriez être capable d'adapter l'affichage à vos souhaits, non ?

    Azertyuiop £££.[2024-].Mini-série : ok !
    Peut-être mais il n'est pas dans le jeu de test dans GitHub.

    blablabla [2024- sur -]
    Le débogueur est notre ami.

  2. #1162
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    784
    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 : 784
    Par défaut
    Azertyuiop £££.[2024-].Mini-série : ok !
    Peut-être mais il n'est pas dans le jeu de test dans GitHub.

    Azertyuiop £££.[2024- sur -]
    Le débogueur est notre ami.
    Ben oui !!! Alors !!!

    Le code est bien clair sur la manière dont les "Saisons + Hors Saison" s'affichent les uns par rapport aux autres.
    Les Hors Series puis le Saisons.
    Si l'ordre ne vous convient pas, pourquoi ne le changez-vous pas vous-même ???
    Comment faire ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    InfosVisionnage::InfosVisionnage(const Saison& saison, fs::path const& m_cheminFichier) : m_saison{ saison }
    { 
    ...
    }
    Compliqué pour moi !!!

  3. #1163
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    784
    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 : 784
    Par défaut
    Saison(s) et Hors saison !!!
    Dure à dire !!!
    ???

  4. #1164
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 430
    Par défaut
    Azertyuiop £££.[2024-].Mini-série : ok !
    Peut-être mais il n'est pas dans le jeu de test dans GitHub.

    Azertyuiop £££.[2024- sur -]
    Le débogueur est notre ami.
    Ben oui !!! Alors !!!
    Bin si vous ne nous donnez pas le matériel pour tester votre "problème" dans GitHub, comment voulez-vous qu'on puisse vous répondre efficacement ???

    On va faire du madame Irma aussi bien sur la définition du problème, que vous n'expliquez pas (on n'est pas dans votre tête), que sur le matériel (fichiers et répertoires).
    A la copie d'écran c'est truc qui ne vas pas dans le début de l'affiche d'une série donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void Serie::Print_Header() const
    {
        std::wstring titres_str = calcul_Titres_Affichage();
        std::wstring annees_str = format_Annees();
        std::wstring sur_str = calcul_Sur_Affichage();
        std::wstring anneesEtSur_str = format_AnneesEtSur(annees_str, sur_str);
        std::wstring x_signaletique_jeunesse_str = calcul_X_Signaletique_Jeunesse_affichage(sur_str);
        std::wstring signaletique_jeunesse_str = calcul_Signaletique_Jeunesse_affichage();
        std::wstring duree_str = calcul_Duree_affichage();
        std::wstring note_str = calcul_Note_Affichage();
     
        std::wcout << titres_str << anneesEtSur_str << x_signaletique_jeunesse_str << signaletique_jeunesse_str << duree_str << note_str << std::endl;
    }
    Donc, cette ligne est construite à partie d'appels à d'autres fonctions.
    Selon la partie qui ne convient pas, vous savez dans quelle fonction mettre un point d'arrêt, voire ce qui ne va pas et corriger en conséquence.

    Le code est bien clair sur la manière dont les "Saisons + Hors Saison" s'affichent les uns par rapport aux autres.
    Les Hors Series puis le Saisons.
    Si l'ordre ne vous convient pas, pourquoi ne le changez-vous pas vous-même ???
    Comment faire ???
    Comment faire quoi ???
    Si vous n'exprimez pas ce que vous voulez, ça ne va pas le faire.
    Je suppute que vous voulez afficher les Saison et Hors Saison par ordre chronologique de publication.
    Cherchez dans vos données en entrée (l'arborescence de fichier) où est cette information, puis ajoutez du code pour conserver ces informations dans vos classes métier. Là où c'est le plus logique, pour vous.
    Actuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                if (fs::is_directory(entry_serie))
                {
     
                    serie.saisons.push_back({ entry_serie, serie });
                    auto& saison = serie.saisons.back();
                    for (const auto& entry_saison : fs::directory_iterator(entry_serie))
                    {
                        if (entry_saison.is_regular_file())
                        {
                            saison.initialiser_Fichier(entry_saison);
                        }
                    }
                }
    Ici, la date qui est dans le nom du répertoire "entry_serie" n'est pas utilisé.
    Récupérez la et utilisez un type plus adapter que "std::vector<Saison>saisons{}" pour maintenir l'ordre chronologique des éléments de la "liste" : https://stackoverflow.com/questions/...dered-elements

    InfosVisionnage::InfosVisionnage(const Saison& saison, fs::path const& m_cheminFichier) : m_saison{ saison }
    {
    ...
    }
    Compliqué pour moi !!!
    Elle est bien trop compliquée pour tout le monde.
    Normalement, une fonction ne fait jamais plus de 30 lignes.
    On peut facilement sortir toutes les constantes hors de la fonction.
    C'est aussi complexe parce que votre architecture de données (arborescence de fichiers) est très complexe.
    Cela fait longtemps qu'on vous suggère de la simplifier/rationaliser.
    Si votre code est bien pensé, il doit être facilement découpable en plusieurs "sous-fonctions", plus facile à comprendre. (la stratégie : diviser pour mieux régner)

    EDIT :
    Ici, la date qui est dans le nom du répertoire "entry_serie" n'est pas utilisé.
    C'est une erreur, c'est stocké dans le champ "m_date_diffusee_a_partir_de" qu'il faut utiliser pour ordonner les saisons dans l'objet de type "Serie".

  5. #1165
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 430
    Par défaut
    Après relecture de https://stackoverflow.com/questions/...dered-elements.
    C'est un peu complexe.
    On peut faire plus simple.
    C'est d'ordonner le champ saison à la fin, en post-traitement :

    ajouter à la classe Saison un opérateur de comparaison :
    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
    bool operator<(const Saison& rhs) {
        return m_date_diffusee_a_partir_de.first.tm_year < rhs.m_date_diffusee_a_partir_de.first.tm_year or
              (m_date_diffusee_a_partir_de.first.tm_year == rhs.m_date_diffusee_a_partir_de.first.tm_year and
               m_date_diffusee_a_partir_de.first.tm_yday < rhs.m_date_diffusee_a_partir_de.first.tm_yday) or
              (m_date_diffusee_a_partir_de.first.tm_year == rhs.m_date_diffusee_a_partir_de.first.tm_year and
               m_date_diffusee_a_partir_de.first.tm_yday == rhs.m_date_diffusee_a_partir_de.first.tm_yday and
               m_date_diffusee_a_partir_de.first.tm_hour < rhs.m_date_diffusee_a_partir_de.first.tm_hour) or
              (m_date_diffusee_a_partir_de.first.tm_year == rhs.m_date_diffusee_a_partir_de.first.tm_year and
               m_date_diffusee_a_partir_de.first.tm_yday == rhs.m_date_diffusee_a_partir_de.first.tm_yday and
               m_date_diffusee_a_partir_de.first.tm_hour == rhs.m_date_diffusee_a_partir_de.first.tm_hour and
               m_date_diffusee_a_partir_de.first.tm_min < rhs.m_date_diffusee_a_partir_de.first.tm_min) or
              (m_date_diffusee_a_partir_de.first.tm_year == rhs.m_date_diffusee_a_partir_de.first.tm_year and
                m_date_diffusee_a_partir_de.first.tm_yday == rhs.m_date_diffusee_a_partir_de.first.tm_yday and
                m_date_diffusee_a_partir_de.first.tm_hour == rhs.m_date_diffusee_a_partir_de.first.tm_hour and
                m_date_diffusee_a_partir_de.first.tm_min == rhs.m_date_diffusee_a_partir_de.first.tm_min and
                m_date_diffusee_a_partir_de.first.tm_sec < rhs.m_date_diffusee_a_partir_de.first.tm_sec);
    }
    Rendre l'opérateur "Saison& operator=(Saison&& src) noexcept" public.

    Modifier la fonction Serie:: PostTraitement, pour qu'elle classe les saisons :
    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
    void Serie::PostTraitement()
    {
        /*for (auto& saison : saisons)
        {
            if (saison.m_hors_saison)
            {
                
                m_hors_saisons.emplace_back(move(saison));
            }
            else
            {
                m_non_hors_saisons.emplace_back(move(saison));
            }
        }*/
    
        std::sort(saisons.begin(), saisons.end());
    }
    et ne plus utiliser "m_hors_saisons" et "m_non_hors_saisons" :
    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
    void Serie::Print_Saisons()
    {
        /*for (auto& saison : m_hors_saisons)
        {
            saison.Print();
        }
    
        for (auto& saison : m_non_hors_saisons)
        {
            saison.Print();
        }*/
    
        for (auto& saison : saisons)
        {
            saison.Print();
        }
    }

  6. #1166
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    784
    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 : 784
    Par défaut
    Moi : Simple !!!
    Vous : Complexe !!!

    Alors... Hier, 21h53 et Hier, 11h12 !!!

    J'en ai marre !!!

  7. #1167
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 430
    Par défaut
    Qu'est-ce qui est complexe ?

    Créer une fonction qui ne fait qu'une comparaison de nombre ?
    Rendre une fonction publique ?
    Changer le corps de 2 fonctions pour qu'elles aient respectivement 1 ligne et 4 lignes ?

  8. #1168
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    784
    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 : 784
    Par défaut
    Retour Mars 11 (10/03/2025)
    et
    Mars 12 (14/03/2025) :
    https://github.com/laurentbouleau/Exemple : Mars 12 (14/03/2025)
    Rrrrr !!!

    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
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    InfosVisionnage::InfosVisionnage(const Saison& saison, fs::path const& m_cheminFichier) : m_saison{ saison }
    { 
        // ([[:digit:]]+)x([[:digit:]]{1,3})\\.(((([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})))(_?))+)(\\s(.+))?
        const std::wstring numero_saison_format = L"([[:digit:]]{1,2})"; // saison
        const std::wstring sep_numero_saison = L"x"; // x
        const std::wstring numero_episode_format = L"([[:digit:]]{1,3})"; // episode
        const std::wstring sep_episode_saison = L"\\."; //.
     
        const std::wstring date_year_month_day_format = L"([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})";
        const std::wstring date_month_day_format = L"([[:digit:]]{2})-([[:digit:]]{2})";
        const std::wstring date_day_format = L"([[:digit:]]{2})";
        const std::wstring stream_format = L"(\\s(.+))?";
        const std::wstring dates_format = L"((" + date_year_month_day_format + L"|" + date_month_day_format + L"|" + date_day_format + L")(_?))";
     
        const int dates_full_match_index = 0;
        const int dates_date_year_month_day_year_index = dates_full_match_index + 3;
        const int dates_date_year_month_day_month_index = dates_date_year_month_day_year_index + 1;
        const int dates_date_year_month_day_day_index = dates_date_year_month_day_month_index + 1;
        const int dates_date_month_day_month_index = dates_date_year_month_day_day_index + 1;
        const int dates_date_month_day_day_index = dates_date_month_day_month_index + 1;
        const int dates_date_day_day_index = dates_date_month_day_day_index + 1;
        const int dates_someFlag_index = dates_date_day_day_index + 2;
     
        const std::wregex filename_format_rg{ numero_saison_format + sep_numero_saison + numero_episode_format + sep_episode_saison + L"(" + dates_format + L"+)" + stream_format };
     
        const int filename_full_match_index = 0;
        const int filename_numero_saison_index = filename_full_match_index + 1;
        const int filename_numero_episode_index = filename_numero_saison_index + 1;
        const int filename_dates_index = filename_numero_episode_index + 1;
        const int filename_date_year_month_day_year_index = filename_dates_index + 2;
        const int filename_date_year_month_day_month_index = filename_date_year_month_day_year_index + 1;
        const int filename_date_year_month_day_day_index = filename_date_year_month_day_month_index + 1;
        const int filename_date_month_day_month_index = filename_date_year_month_day_day_index + 1;
        const int filename_date_month_day_day_index = filename_date_month_day_month_index + 1;
        const int filename_date_day_day_index = filename_date_month_day_day_index + 1;
        const int filename_someFlag_index = filename_date_day_day_index + 2;
        const int filename_stream_index = filename_someFlag_index + 2;
     
        auto nomFichier = m_cheminFichier.filename().wstring();
     
        assert(nomFichier.length() > 0 && L"Nom de fichier Épisode vide");
     
        auto stem = m_cheminFichier.stem().wstring();
        assert((stem.length() > 9) && L"Nom de fichier Épisode trop court pour avoir au moins une date");
     
        assert(std::isdigit(stem[0]) && L"Nom de fichier Épisode ne commençant pas par un nombre");
     
        assert((m_NumeroSaison <= 1000) && L"x <= 1000 !!!");// saison == m_NumeroSaison
     
        assert((stem.find(L"x", 0) != std::wstring::npos) && L"Saison::afficher_Episode() :  x !!!");
     
    /*   std::wsmatch match;
        auto str = stem;
        //Exemple assez complexe de nom de fichier
        //str = L"1x01.2024-02-01_2024-02-02_02-03_0405 Netflix";
        std::regex_match(str, match, filename_format_rg);
     
        if (match[filename_numero_saison_index].matched)
            m_NumeroSaison = std::stoi(match[filename_numero_saison_index]);
     
        std::wsmatch dates_match;
        auto dates_str = match[filename_dates_index].str();
        while (std::regex_search(dates_str, dates_match, std::wregex{ dates_format }))
        {
            if (dates_match[dates_date_year_month_day_year_index].matched)
            {
                auto year = std::stoi(dates_match[dates_date_year_month_day_year_index]);
                auto month = std::stoi(dates_match[dates_date_year_month_day_month_index]);
                auto day = std::stoi(dates_match[dates_date_year_month_day_day_index]);
     
                assert(checkyear(year));
                assert(checkmonth(month));
                assert(checkday(month, day, year));
     
                DateRecord dr{ {0,0,0,day,month - 1,year - 1900} };
     
                m_DatesVisionnage.emplace_back(dr);
            }
            else if (dates_match[dates_date_month_day_month_index].matched)
            {
                assert(m_DatesVisionnage.size() > 0 && L"Utilisation d'un format mois-jour sans avoir d'année déduite.");
     
                auto month = std::stoi(dates_match[dates_date_month_day_month_index]);
                auto day = std::stoi(dates_match[dates_date_month_day_day_index]);
     
                auto lastDateRecord = m_DatesVisionnage.back();
                auto last_year = lastDateRecord.date.tm_year + 1900;
     
                assert(checkmonth(month));
                assert(checkday(month, day, last_year));
     
                DateRecord dr{ {0,0,0,day,month - 1,last_year - 1900} };
     
                m_DatesVisionnage.emplace_back(dr);
            }
            else if (dates_match[dates_date_day_day_index].matched)
            {
                assert(m_DatesVisionnage.size() > 0 && L"Utilisation d'un format jour sans avoir de mois et d'années déduits.");
     
                auto day = std::stoi(dates_match[dates_date_day_day_index]);
     
                auto lastDateRecord = m_DatesVisionnage.back();
                auto last_year = lastDateRecord.date.tm_year + 1900;
                auto last_month = lastDateRecord.date.tm_mon + 1;
     
                assert(checkday(last_month, day, last_year));
     
                DateRecord dr{ {0,0,0,day,last_month - 1,last_year - 1900} };
     
                m_DatesVisionnage.emplace_back(dr);
            }
            else
            {
                assert(true && L"format de date d'épisode inconnu.");
            }
     
            if (dates_match[dates_someFlag_index].matched)
            {
                m_DatesVisionnage.back().someFlag = true;
            }
     
            dates_str = dates_match.suffix().str();
        }
     
        m_NumeroEpisodeDansSaison = std::stoi(match[filename_numero_episode_index]);
        */
        InfosVisionnage_dates(filename_format_rg, filename_numero_saison_index, filename_dates_index, dates_format, dates_date_year_month_day_year_index, stem);
     
        std::vector<std::wstring> file_content = lire_fichierTxt(m_cheminFichier.wstring(), { L"\n" }, false);
     
        if (file_content.size() > 0)
        {
            InfosVisionnage_file_content(file_content);
        }
    }
     
    void InfosVisionnage::InfosVisionnage_dates(const std::wregex filename_format_rg, const int filename_numero_saison_index, const int filename_dates_index, const std::wstring dates_format, const int dates_date_year_month_day_year_index, std::wstring stem)
    {
        std::wsmatch match;
        auto str = stem;
        //Exemple assez complexe de nom de fichier
        //str = L"1x01.2024-02-01_2024-02-02_02-03_0405 Netflix";
        std::regex_match(str, match, filename_format_rg);
     
        if (match[filename_numero_saison_index].matched)
            m_NumeroSaison = std::stoi(match[filename_numero_saison_index]);
     
        std::wsmatch dates_match;
        auto dates_str = match[filename_dates_index].str();
        while (std::regex_search(dates_str, dates_match, std::wregex{ dates_format }))
        {
            if (dates_match[dates_date_year_month_day_year_index].matched)
            {
                auto year = std::stoi(dates_match[dates_date_year_month_day_year_index]);
                auto month = std::stoi(dates_match[dates_date_year_month_day_month_index]);
                auto day = std::stoi(dates_match[dates_date_year_month_day_day_index]);
     
                assert(checkyear(year));
                assert(checkmonth(month));
                assert(checkday(month, day, year));
     
                DateRecord dr{ {0,0,0,day,month - 1,year - 1900} };
     
                m_DatesVisionnage.emplace_back(dr);
            }
            else if (dates_match[dates_date_month_day_month_index].matched)
            {
                assert(m_DatesVisionnage.size() > 0 && L"Utilisation d'un format mois-jour sans avoir d'année déduite.");
     
                auto month = std::stoi(dates_match[dates_date_month_day_month_index]);
                auto day = std::stoi(dates_match[dates_date_month_day_day_index]);
     
                auto lastDateRecord = m_DatesVisionnage.back();
                auto last_year = lastDateRecord.date.tm_year + 1900;
     
                assert(checkmonth(month));
                assert(checkday(month, day, last_year));
     
                DateRecord dr{ {0,0,0,day,month - 1,last_year - 1900} };
     
                m_DatesVisionnage.emplace_back(dr);
            }
            else if (dates_match[dates_date_day_day_index].matched)
            {
                assert(m_DatesVisionnage.size() > 0 && L"Utilisation d'un format jour sans avoir de mois et d'années déduits.");
     
                auto day = std::stoi(dates_match[dates_date_day_day_index]);
     
                auto lastDateRecord = m_DatesVisionnage.back();
                auto last_year = lastDateRecord.date.tm_year + 1900;
                auto last_month = lastDateRecord.date.tm_mon + 1;
     
                assert(checkday(last_month, day, last_year));
     
                DateRecord dr{ {0,0,0,day,last_month - 1,last_year - 1900} };
     
                m_DatesVisionnage.emplace_back(dr);
            }
            else
            {
                assert(true && L"format de date d'épisode inconnu.");
            }
     
            if (dates_match[dates_someFlag_index].matched)
            {
                m_DatesVisionnage.back().someFlag = true;
            }
     
            dates_str = dates_match.suffix().str();
        }
     
        if (match[filename_stream_index].matched)
        {
            m_streaming = match[filename_stream_index];
        }
     
        m_NumeroEpisodeDansSaison = std::stoi(match[filename_numero_episode_index]);
    }
     
    void InfosVisionnage::InfosVisionnage_file_content(std::vector<std::wstring>file_content)
    {
        const std::wregex numeroPlusTitres_rg{ L"(?:(\\d)+\\.)?(.*)" };
        std::wsmatch titles_match;
        std::regex_match(file_content[0], titles_match, numeroPlusTitres_rg);
     
        if (titles_match[1].matched)
        {
            m_NumeroEpisodeDansSerie = std::stoi(titles_match[1]);
        }
     
        std::wstring titres = titles_match[2];
     
        trim(titres);
     
        m_titres = extraire_Titres_Depuis_UneLigne(titres);
     
        if (file_content.size() > 1)
            initialiser_Duree(file_content[1]);
     
        if (file_content.size() > 2)
        {
            file_content.erase(file_content.begin(), file_content.begin() + 2);
            m_resume = file_content;
        }
     
    }
    Je suis crevé et Rrrrr !!!
    Font chié !!!

  9. #1169
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 430
    Par défaut
    Faites simple et utilisez des noms "évocateurs" :
    Donc, pour des fonctions qui font des choses ; on construit un nom avec un verbe d'action + l'objet de l'action :
    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
    InfosVisionnage::InfosVisionnage(const Saison& saison, fs::path const& m_cheminFichier) : m_saison{ saison }
    { 
        
    
        auto nomFichier = m_cheminFichier.filename().wstring();
    
        assert(nomFichier.length() > 0 && L"Nom de fichier Épisode vide");
    
        auto stem = m_cheminFichier.stem().wstring();
        assert((stem.length() > 9) && L"Nom de fichier Épisode trop court pour avoir au moins une date");
    
        assert(std::isdigit(stem[0]) && L"Nom de fichier Épisode ne commençant pas par un nombre");
        
        assert((m_NumeroSaison <= 1000) && L"x <= 1000 !!!");// saison == m_NumeroSaison
    
        assert((stem.find(L"x", 0) != std::wstring::npos) && L"Saison::afficher_Episode() :  x !!!");
    
        AnalyserStem(stem);
    
        std::vector<std::wstring> file_content = lire_fichierTxt(m_cheminFichier.wstring(), { L"\n" }, false);
    
        if (file_content.size() > 0)
        {
            AnalyserContenu(file_content);
        }
    }
    
    // ([[:digit:]]+)x([[:digit:]]{1,3})\\.(((([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})))(_?))+)(\\s(.+))?
    const std::wstring numero_saison_format = L"([[:digit:]]{1,2})"; // saison
    const std::wstring sep_numero_saison = L"x"; // x
    const std::wstring numero_episode_format = L"([[:digit:]]{1,3})"; // episode
    const std::wstring sep_episode_saison = L"\\."; //.
    
    const std::wstring date_year_month_day_format = L"([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})";
    const std::wstring date_month_day_format = L"([[:digit:]]{2})-([[:digit:]]{2})";
    const std::wstring date_day_format = L"([[:digit:]]{2})";
    const std::wstring stream_format = L"(\\s(.+))?";
    const std::wstring dates_format = L"((" + date_year_month_day_format + L"|" + date_month_day_format + L"|" + date_day_format + L")(_?))";
    
    const int dates_full_match_index = 0;
    const int dates_date_year_month_day_year_index = dates_full_match_index + 3;
    const int dates_date_year_month_day_month_index = dates_date_year_month_day_year_index + 1;
    const int dates_date_year_month_day_day_index = dates_date_year_month_day_month_index + 1;
    const int dates_date_month_day_month_index = dates_date_year_month_day_day_index + 1;
    const int dates_date_month_day_day_index = dates_date_month_day_month_index + 1;
    const int dates_date_day_day_index = dates_date_month_day_day_index + 1;
    const int dates_someFlag_index = dates_date_day_day_index + 2;
    
    const std::wregex filename_format_rg{ numero_saison_format + sep_numero_saison + numero_episode_format + sep_episode_saison + L"(" + dates_format + L"+)" + stream_format };
    
    const int filename_full_match_index = 0;
    const int filename_numero_saison_index = filename_full_match_index + 1;
    const int filename_numero_episode_index = filename_numero_saison_index + 1;
    const int filename_dates_index = filename_numero_episode_index + 1;
    const int filename_date_year_month_day_year_index = filename_dates_index + 2;
    const int filename_date_year_month_day_month_index = filename_date_year_month_day_year_index + 1;
    const int filename_date_year_month_day_day_index = filename_date_year_month_day_month_index + 1;
    const int filename_date_month_day_month_index = filename_date_year_month_day_day_index + 1;
    const int filename_date_month_day_day_index = filename_date_month_day_month_index + 1;
    const int filename_date_day_day_index = filename_date_month_day_day_index + 1;
    const int filename_someFlag_index = filename_date_day_day_index + 2;
    const int filename_stream_index = filename_someFlag_index + 2;
    
    void InfosVisionnage::AnalyserStem(std::wstring stem)
    {
        std::wsmatch match;
        auto str = stem;
        //Exemple assez complexe de nom de fichier
        //str = L"1x01.2024-02-01_2024-02-02_02-03_0405 Netflix";
        std::regex_match(str, match, filename_format_rg);
    
        if (match[filename_numero_saison_index].matched)
            m_NumeroSaison = std::stoi(match[filename_numero_saison_index]);
    
        std::wsmatch dates_match;
        auto dates_str = match[filename_dates_index].str();
        while (std::regex_search(dates_str, dates_match, std::wregex{ dates_format }))
        {
            if (dates_match[dates_date_year_month_day_year_index].matched)
            {
                auto year = std::stoi(dates_match[dates_date_year_month_day_year_index]);
                auto month = std::stoi(dates_match[dates_date_year_month_day_month_index]);
                auto day = std::stoi(dates_match[dates_date_year_month_day_day_index]);
    
                assert(checkyear(year));
                assert(checkmonth(month));
                assert(checkday(month, day, year));
    
                DateRecord dr{ {0,0,0,day,month - 1,year - 1900} };
    
                m_DatesVisionnage.emplace_back(dr);
            }
            else if (dates_match[dates_date_month_day_month_index].matched)
            {
                assert(m_DatesVisionnage.size() > 0 && L"Utilisation d'un format mois-jour sans avoir d'année déduite.");
    
                auto month = std::stoi(dates_match[dates_date_month_day_month_index]);
                auto day = std::stoi(dates_match[dates_date_month_day_day_index]);
    
                auto lastDateRecord = m_DatesVisionnage.back();
                auto last_year = lastDateRecord.date.tm_year + 1900;
    
                assert(checkmonth(month));
                assert(checkday(month, day, last_year));
    
                DateRecord dr{ {0,0,0,day,month - 1,last_year - 1900} };
    
                m_DatesVisionnage.emplace_back(dr);
            }
            else if (dates_match[dates_date_day_day_index].matched)
            {
                assert(m_DatesVisionnage.size() > 0 && L"Utilisation d'un format jour sans avoir de mois et d'années déduits.");
    
                auto day = std::stoi(dates_match[dates_date_day_day_index]);
    
                auto lastDateRecord = m_DatesVisionnage.back();
                auto last_year = lastDateRecord.date.tm_year + 1900;
                auto last_month = lastDateRecord.date.tm_mon + 1;
    
                assert(checkday(last_month, day, last_year));
    
                DateRecord dr{ {0,0,0,day,last_month - 1,last_year - 1900} };
    
                m_DatesVisionnage.emplace_back(dr);
            }
            else
            {
                assert(true && L"format de date d'épisode inconnu.");
            }
    
            if (dates_match[dates_someFlag_index].matched)
            {
                m_DatesVisionnage.back().someFlag = true;
            }
    
            dates_str = dates_match.suffix().str();
        }
    
        if (match[filename_stream_index].matched)
        {
            m_streaming = match[filename_stream_index];
        }
    
        m_NumeroEpisodeDansSaison = std::stoi(match[filename_numero_episode_index]);
    }
    
    void InfosVisionnage::AnalyserContenu(std::vector<std::wstring>file_content)
    {
        const std::wregex numeroPlusTitres_rg{ L"(?:(\\d)+\\.)?(.*)" };
        std::wsmatch titles_match;
        std::regex_match(file_content[0], titles_match, numeroPlusTitres_rg);
    
        if (titles_match[1].matched)
        {
            m_NumeroEpisodeDansSerie = std::stoi(titles_match[1]);
        }
    
        std::wstring titres = titles_match[2];
    
        trim(titres);
    
        m_titres = extraire_Titres_Depuis_UneLigne(titres);
    
        if (file_content.size() > 1)
            initialiser_Duree(file_content[1]);
    
        if (file_content.size() > 2)
        {
            file_content.erase(file_content.begin(), file_content.begin() + 2);
            m_resume = file_content;
        }
    
    }
    J'ai mis les constantes à l'extérieur des fonctions car il y a des chances qu'elles soient utiles à plusieurs fonctions liées.

    Donc, coupez de manière "logique" les fonctions, cela réduira la nécessité de passer beaucoup de paramètres.


    C'est quoi le problème avec "Rrrrr !!!" ???

    L'utilisation d'un système de fichier peut poser problème (comme l'utilisation de slash "/" ou d'antislash "" dans les titres), mais il sera toujours possible de séparer cette partie du code pour en faire une couche "Data" qui pourra utiliser d'autres sources de données, comme une base de données. Mais pour cela, il ne faut pas que la partie "Métier" actuelle, qui regroupe "Data+Métier", ait encore des trucs liés à l'affichage, qui n'a rien à y faire.

  10. #1170
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    784
    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 : 784
    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
    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
    InfosVisionnage::InfosVisionnage(const Saison& saison, fs::path const& m_cheminFichier) : m_saison{ saison }
    { 
     
     
        auto nomFichier = m_cheminFichier.filename().wstring();
     
        assert(nomFichier.length() > 0 && L"Nom de fichier Épisode vide");
     
        auto stem = m_cheminFichier.stem().wstring();
        assert((stem.length() > 9) && L"Nom de fichier Épisode trop court pour avoir au moins une date");
     
        assert(std::isdigit(stem[0]) && L"Nom de fichier Épisode ne commençant pas par un nombre");
     
        assert((m_NumeroSaison <= 1000) && L"x <= 1000 !!!");// saison == m_NumeroSaison
     
        assert((stem.find(L"x", 0) != std::wstring::npos) && L"Saison::afficher_Episode() :  x !!!");
     
        AnalyserStem(stem);
     
        std::vector<std::wstring> file_content = lire_fichierTxt(m_cheminFichier.wstring(), { L"\n" }, false);
     
        if (file_content.size() > 0)
        {
            AnalyserContenu(file_content);
        }
    }
     
    // ([[:digit:]]+)x([[:digit:]]{1,3})\\.(((([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})))(_?))+)(\\s(.+))?
    const std::wstring numero_saison_format = L"([[:digit:]]{1,2})"; // saison
    const std::wstring sep_numero_saison = L"x"; // x
    const std::wstring numero_episode_format = L"([[:digit:]]{1,3})"; // episode
    const std::wstring sep_episode_saison = L"\\."; //.
     
    const std::wstring date_year_month_day_format = L"([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})";
    const std::wstring date_month_day_format = L"([[:digit:]]{2})-([[:digit:]]{2})";
    const std::wstring date_day_format = L"([[:digit:]]{2})";
    const std::wstring stream_format = L"(\\s(.+))?";
    const std::wstring dates_format = L"((" + date_year_month_day_format + L"|" + date_month_day_format + L"|" + date_day_format + L")(_?))";
     
    const int dates_full_match_index = 0;
    const int dates_date_year_month_day_year_index = dates_full_match_index + 3;
    const int dates_date_year_month_day_month_index = dates_date_year_month_day_year_index + 1;
    const int dates_date_year_month_day_day_index = dates_date_year_month_day_month_index + 1;
    const int dates_date_month_day_month_index = dates_date_year_month_day_day_index + 1;
    const int dates_date_month_day_day_index = dates_date_month_day_month_index + 1;
    const int dates_date_day_day_index = dates_date_month_day_day_index + 1;
    const int dates_someFlag_index = dates_date_day_day_index + 2;
     
    const std::wregex filename_format_rg{ numero_saison_format + sep_numero_saison + numero_episode_format + sep_episode_saison + L"(" + dates_format + L"+)" + stream_format };
     
    const int filename_full_match_index = 0;
    const int filename_numero_saison_index = filename_full_match_index + 1;
    const int filename_numero_episode_index = filename_numero_saison_index + 1;
    const int filename_dates_index = filename_numero_episode_index + 1;
    const int filename_date_year_month_day_year_index = filename_dates_index + 2;
    const int filename_date_year_month_day_month_index = filename_date_year_month_day_year_index + 1;
    const int filename_date_year_month_day_day_index = filename_date_year_month_day_month_index + 1;
    const int filename_date_month_day_month_index = filename_date_year_month_day_day_index + 1;
    const int filename_date_month_day_day_index = filename_date_month_day_month_index + 1;
    const int filename_date_day_day_index = filename_date_month_day_day_index + 1;
    const int filename_someFlag_index = filename_date_day_day_index + 2;
    const int filename_stream_index = filename_someFlag_index + 2;
     
    void InfosVisionnage::AnalyserStem(std::wstring stem)
    {
        std::wsmatch match;
        auto str = stem;
        //Exemple assez complexe de nom de fichier
        //str = L"1x01.2024-02-01_2024-02-02_02-03_0405 Netflix";
        std::regex_match(str, match, filename_format_rg);
     
        if (match[filename_numero_saison_index].matched)
            m_NumeroSaison = std::stoi(match[filename_numero_saison_index]);
     
        std::wsmatch dates_match;
        auto dates_str = match[filename_dates_index].str();
        while (std::regex_search(dates_str, dates_match, std::wregex{ dates_format }))
        {
            if (dates_match[dates_date_year_month_day_year_index].matched)
            {
                auto year = std::stoi(dates_match[dates_date_year_month_day_year_index]);
                auto month = std::stoi(dates_match[dates_date_year_month_day_month_index]);
                auto day = std::stoi(dates_match[dates_date_year_month_day_day_index]);
     
                assert(checkyear(year));
                assert(checkmonth(month));
                assert(checkday(month, day, year));
     
                DateRecord dr{ {0,0,0,day,month - 1,year - 1900} };
     
                m_DatesVisionnage.emplace_back(dr);
            }
            else if (dates_match[dates_date_month_day_month_index].matched)
            {
                assert(m_DatesVisionnage.size() > 0 && L"Utilisation d'un format mois-jour sans avoir d'année déduite.");
     
                auto month = std::stoi(dates_match[dates_date_month_day_month_index]);
                auto day = std::stoi(dates_match[dates_date_month_day_day_index]);
     
                auto lastDateRecord = m_DatesVisionnage.back();
                auto last_year = lastDateRecord.date.tm_year + 1900;
     
                assert(checkmonth(month));
                assert(checkday(month, day, last_year));
     
                DateRecord dr{ {0,0,0,day,month - 1,last_year - 1900} };
     
                m_DatesVisionnage.emplace_back(dr);
            }
            else if (dates_match[dates_date_day_day_index].matched)
            {
                assert(m_DatesVisionnage.size() > 0 && L"Utilisation d'un format jour sans avoir de mois et d'années déduits.");
     
                auto day = std::stoi(dates_match[dates_date_day_day_index]);
     
                auto lastDateRecord = m_DatesVisionnage.back();
                auto last_year = lastDateRecord.date.tm_year + 1900;
                auto last_month = lastDateRecord.date.tm_mon + 1;
     
                assert(checkday(last_month, day, last_year));
     
                DateRecord dr{ {0,0,0,day,last_month - 1,last_year - 1900} };
     
                m_DatesVisionnage.emplace_back(dr);
            }
            else
            {
                assert(true && L"format de date d'épisode inconnu.");
            }
     
            if (dates_match[dates_someFlag_index].matched)
            {
                m_DatesVisionnage.back().someFlag = true;
            }
     
            dates_str = dates_match.suffix().str();
        }
     
        if (match[filename_stream_index].matched)
        {
            m_streaming = match[filename_stream_index];
        }
     
        m_NumeroEpisodeDansSaison = std::stoi(match[filename_numero_episode_index]);
    }
     
    void InfosVisionnage::AnalyserContenu(std::vector<std::wstring>file_content)
    {
        const std::wregex numeroPlusTitres_rg{ L"(?:(\\d)+\\.)?(.*)" };
        std::wsmatch titles_match;
        std::regex_match(file_content[0], titles_match, numeroPlusTitres_rg);
     
        if (titles_match[1].matched)
        {
            m_NumeroEpisodeDansSerie = std::stoi(titles_match[1]);
        }
     
        std::wstring titres = titles_match[2];
     
        trim(titres);
     
        m_titres = extraire_Titres_Depuis_UneLigne(titres);
     
        if (file_content.size() > 1)
            initialiser_Duree(file_content[1]);
     
        if (file_content.size() > 2)
        {
            file_content.erase(file_content.begin(), file_content.begin() + 2);
            m_resume = file_content;
        }
     
    }
    Ok ! Merci beaucoup

    C'est quoi le problème avec "Rrrrr !!!" ???
    Ben, oui !!!

    J'ai mis les constantes à l'extérieur des fonctions car il y a des chances qu'elles soient utiles à plusieurs fonctions liées.

    Donc, coupez de manière "logique" les fonctions, cela réduira la nécessité de passer beaucoup de paramètres.
    Ok !


    L'utilisation d'un système de fichier peut poser problème (comme l'utilisation de slash "/" ou d'antislash "" dans les titres), mais il sera toujours possible de séparer cette partie du code pour en faire une couche "Data" qui pourra utiliser d'autres sources de données, comme une base de données. Mais pour cela, il ne faut pas que la partie "Métier" actuelle, qui regroupe "Data+Métier", ait encore des trucs liés à l'affichage, qui n'a rien à y faire.
    Ah ! Ok
    Mais : Métié ===> utils.h/cpp ???

    Et :

    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
    std::wstring Serie::format_AnneesEtSur(std::wstring& annees_str, std::wstring& sur_str) const
    {
        const std::wstring crochet_ouvrant_str = m_keyColor[0] + L" [" + m_valuesColor;
        const std::wstring crochet_fermant_str = m_keyColor[0] + L"]" + m_valuesColor;
        const wchar_t espace_str = L' ';
        std::wstring annees_et_sur = crochet_ouvrant_str;
        annees_et_sur += annees_str;
        if (sur_str == L"-" || sur_str == L"")
            annees_et_sur += L"";
        else if (sur_str == L"Disney+" && m_disney_sj.size() != 0)
            annees_et_sur += espace_str + m_keyColor[0] + m_valuesColor + m_keyColor[1] + L"sur " + m_valuesColor + sur_str + m_keyColor[1] + L" : " + m_valuesColor + m_disney_sj;
        else if (sur_str == L"Netflix" && m_netflix_sj.size() != 0)
            annees_et_sur += espace_str + m_keyColor[0] + m_valuesColor + m_keyColor[1] + L"sur " + m_valuesColor + sur_str + m_keyColor[1] + L" : " + m_valuesColor + m_netflix_sj;
        else if (sur_str == L"Paramount+" && m_paramount_sj.size() != 0)
            annees_et_sur += espace_str + m_keyColor[0] + m_valuesColor + m_keyColor[1] + L"sur " + m_valuesColor + sur_str + m_keyColor[1] + L" : " + m_valuesColor + m_paramount_sj;
        else if (sur_str.size() != 0)
            annees_et_sur += espace_str + m_keyColor[0] + m_valuesColor + m_keyColor[1] + L"sur " + m_valuesColor + sur_str;
        else
            ; // ???
        return annees_et_sur + crochet_fermant_str;
    }
    Pouvez-vous corriger ???
    Parce que You - Copie :
    Andor.[2022- Disney+]
    ...

    Mais :
    1883.[2021- Paramount+]
    Titre !!! Compliqué !!! (A883)

    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
    const int Serie::afficher_Titre(std::wstring& t, std::wstring const& nomFichier)
    { // Titre_1
        //if (Titre_1_ == true)
        //    return 0;
     
        //wstring t_
    #if Serie_afficher_Titre_ == 1
        //wcout << B_T << L"const int Serie::afficher_Titre(" << t << L", " << _T << L") :" << B_t << endl;
        B.Ok_T(L"const int Serie::afficher_Titre(" + t + L", " + nomFichier + L") :");
    #endif
        if (titre.begin() == titre.end())
        {
    #if Serie_afficher_Titre_ == 1
            //int i;
            //wcout << L"    " << B_W << L"const int Serie::afficher_Titre(" << t << L", " << _T << L") : erreur !!!" << B_w << endl;
            B.Ok_W(L"const int Serie::afficher_Titre(" + t + L", " + nomFichier + L") : erreur !!!");
            //wstring wstr;
            //wstr = B_W;
            //wstr += L"const int Serie::afficher_Titre(";
            //i = ::Console_Lire_txt(t + L", " + _T + L") :" + B_w, 0, 0, Y);
    #endif
            E.afficher_X(-1, t, L"Titre.begin() == Titre.end()");
            return EXIT_FAILURE;
        }
        //Titre_1 = ::afficher_fichier_lire(t, _T);
        try
        {
            // Dans le try, on est assuré que toute exception levée
            // pourra être traitée dans le bloc catch situé après.
            Titre_1 = lire_fichierTxt(nomFichier);
        }
        // Notez qu'une exception s'attrape par référence constante.
        catch (runtime_error const& exception)
        {
            // On affiche la cause de l'exception.
            std::wcout << L"Erreur : " << exception.what() << std::endl;
        }
        Titre_1 += L'\n';
        //
        std::vector<std::wstring> ti;
        std::wstring wstr = L"";
        std::size_t pos = 0;
        pos = Titre_1.find(L'\n');
        int y = 0;
        while (pos != std::wstring::npos)
        {
            //wcout << L"y=" << y << L" titre[" << y << L"] = [" << Titre_1.substr(0, pos) << L']' << endl;
            ti.push_back(Titre_1.substr(0, pos));
    #if Serie_afficher_Titre_ == 1
            B.Ok_W(L"Titre={" + Titre_1.substr(0, pos) + L'}');
    #endif
            Titre_1 = Titre_1.substr(pos + 1);
            pos = Titre_1.find(L'\n');
            y++;
        }
        // Titre[0] + Titre[1] + Titre[2]
        if (affichage_titre_actif && (titre[1] == L" : " || titre[1] == L": " || titre[1] == L"/" || titre[1] == L""))
        {
            //wcout << L"iiiiii" << endl;
            if (ti[0] == (titre[0] + titre[1] + titre[2] + L"\n"))
            {
                bool titre_ = false;
                //wcout << L"xxxxxxx" << endl;
                pos = ti[0].find(L" : ");
                if (pos != wstring::npos && titre_ == false)
                {
                    titre[0] = ti[0].substr(0, pos);
                    titre[1] = L" : ";
                    titre[2] = t.substr(pos + 3, t.length());
                    titre_ = true;
                }
                pos = ti[0].find(L": ");
                if (pos != wstring::npos && titre_ == false)
                {
                    titre[0] = ti[0].substr(0, pos);
                    titre[1] = L": ";
                    titre[2] = t.substr(pos + 2, t.length());
                    titre_ = true;
                }
                pos = ti[0].find(L"/");
                if (pos != wstring::npos && titre_ == false)
                {
                    titre[0] = ti[0].substr(0, pos);
                    titre[1] = L": ";
                    titre[2] = t.substr(pos + 1, t.length());
                    titre_ = true;
                }
                else
                {
                    titre[0] = ti[0];
                    titre[1] = L"";
                    titre[2] = L"";
                    titre_ = true;
                }
                if (titre_ == false)
                {
    #if Serie_afficher_Titre_ == 1
                    //wcout << L"    " << B_W << L"const int Serie::afficher_Titre(" << t << L", " << _T << L") : érreur !!!" << B_w << endl;
                    B.Ok_W(L"const int Serie::afficher_Titre(" + t + L", " + nomFichier + L") : erreur !!!");
    #endif
                    E.afficher_X(-1, t, L"Titre_={false} !!!");
                    return EXIT_FAILURE;
                }
            }
        }
        else
        {
    #if Serie_afficher_Titre_ == 1
            //wcout << L"    " << B_W << L"const int Serie::afficher_Titre(" << t << L", " << _T << L") : érreur !!!" << B_w << endl;
            //wcout << L"yyyyy" << endl;
            B.Ok_W(L"const int Serie::afficher_Titre(" + t + L", " + nomFichier + L") : erreur !!!");
            B.Ok_W(L"yyyyy");
    #endif
            E.afficher_X(-1, nomFichier, t);
            return EXIT_FAILURE;
        }
        //
        //wcout << L"ooooooo" << endl;
        if (y == 1)
        {
            //wcout << L"    " << B_W << L"const int Series::afficher_Titre(" << t << L", " << _T << L") : érreur !!!" << B_w << endl;
            B.Ok_W(L"const int Serie::afficher_Titre(" + t + L", " + nomFichier + L") : erreur !!!");
            E.afficher_X(-1, nomFichier, t);
            return EXIT_FAILURE;
        }
        //
        bool titre_, min_;
        titre_ = min_ = false;
        int i = 0;
        if (titre_ == false && min_ == false && i == 0)
        {
            //std::wcout << L"azertyuiop" << std::endl;
            min_ = ::afficher_Temps(ti[0]);
    //std::wcout << L"azertyuiop" << std::endl;
            if (min_ == false)
            {
                min_ = ::afficher_Temps(ti[1]);
                if (min_ == false)
                    titre.push_back(L""); // _h_min
                else
                {
                    ::afficher_Titre(ti[0], titre);
                    //i = ::afficher_Titre(wstring t, vector<wstring>&titre, bool& titre_);
                    titre_ = true;
                    titre.push_back(ti[1]);
                    min_ = ::afficher_Temps(ti[1]);
                    if (min_ == false)
                    {
                        E.afficher_X(-1, ti[1], ti[1] + L" erreur (" + ti[1] + L") !!!");
                        return -1;
                    }
                    pos = ti[1].find(L' ');
                    while (pos == wstring::npos)
                    {
                        ti[1] = ti[1].substr(0, pos - 1) + ti[1].substr(pos + 1);
                        pos++;
                    }
                    Temps.tm_min = std::stoi(ti[1]);
                    //wcout << L"eee" << endl;
                    if (Temps_ == false)
                        Temps_ = true;
                    ti.erase(ti.begin());
                    ti.erase(ti.begin());
                    //wcout << L"aaa y=" << titre.size() << endl;
                }
            }
            else
            {
                //wcout << L"qsdfghjklm" << endl;
                titre.push_back(ti[0]);
                //Temps.tm_hour = stoi(titre[0]);
                //Temps.tm_min = stoi(titre[0].substr(2));
                Temps.tm_min = stoi(ti[0]);
                if (Temps_ == false)
                    Temps_ = true;
                ti.erase(ti.begin());
                min_ = true;
            }
        }
        else
        {
            titre.push_back(L""); // _min
        }
        for (int j = 0; j < y; j++)
        {
            //wcout << L"j=" << j << L" wstr=[" << wstr << L']' << endl;
            wstr += ti[j] + L'\n';
        }
        titre.push_back(wstr);
    #if Serie_afficher_Titre_== 1
        std::vector <std::wstring>::iterator iter;
        for (iter = titre.begin(), i = 0; iter != titre.end(); iter++, i++)
            //wcout << L"    " << B_W << L"Titre[" << i << L"]={" << *iter << L'}' << B_w << endl;
            B.Ok_W(L"Titre[" + to_wstring(i) + L"]={" + *iter + L'}');
        //wcout << B_T << L"const int Serie::afficher_Titre() : Ok !" << B_t << endl;
        B.Ok_T(L"const int Serie::afficher_Titre() : Ok !");
        //i = ::Console_Lire_txt(B_T + L"const int Serie::afficher_Titre() : Ok !" + B_t, 0, 0, Y);
    #endif
        Titre_1_ = true;
        return EXIT_SUCCESS;
    }
    Rrrrr !!!

  11. #1171
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    784
    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 : 784

  12. #1172
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 430
    Par défaut
    C'est quoi le problème avec "Rrrrr !!!" ???
    Ben, oui !!!
    Oui quoi ???
    Cela devient ubuesque.
    Expliquez-moi quel est le problème avec "Rrrrr !!!", SVP.
    S'il faisait partie du jeu de test dans le dépôt GitHub, ça serait quand même plus simple.

    Mais : Métié ===> utils.h/cpp ???
    Vouloir isoler une couche dans un fichier, c'est un "début" mais ce n'est pas indispensable, et, in fine, c'est trop réducteur.

    Les couches, c'est une architecture particulière d'un type d'architecture modulaire.
    Une architecture modulaire est caractérisée par des "modules". (Merci Captain Obvious)
    Un module, c'est un regroupement de code qui doit dépendre assez peu du reste du code => pas de variables globales qui "irriguent" tout le programme, etc...
    Dans une architecture en couche, chaque module dépend principalement d'un seul autre module. On se retrouve donc avec des modules "empilés" les uns sur les autres.
    Un découpage classique d'une "application de gestion", c'est d'avoir un module en charge de récupérer les données : "Data", un module qui applique des règles "Métier' (ici, ce qu'est une saison d'une série, un hors-série, etc...), et un module qui affiche les données dans une Interface Homme Machine spécifique.

    Actuellement, vous ne faites pas se découpage en modules, tout le code peut/doit connaitre comment le reste du code travail, c'est beaucoup beaucoup trop complexe.
    Ce que je vous demande/bassine, c'est de faire en sorte de découper votre code en 2 modules : "Data+Metier" et "IHM".
    Le code de "Data+Metier" ne doit rien connaitre de comment "IHM" travaille.

    En créant ces modules, vous pourrez mettre le code d'un module dans un sous-répertoire dédié.
    Vous avez déjà plusieurs fichiers qui constituerait ensemble un module, comme "serie.h/.cpp", "film.h/.cpp" etc... qui ferait bien le module "Data+Metier" si vous en expurgiez les choses liées à l'affichage.
    Donc, plus que séparer "physiquement" les modules, commencez par les séparer "logiquement" en séparant le code en morceaux indépendants.

    Si vous séparez la partie affichage du reste des classes et fonctions qui ne sont pas obligées d'afficher des choses, cela les simplifierait énormément.

    L'objectif long terme de ce découpage en 3 couches, c'est de pouvoir changer la manière de stocker les données et de pouvoir changer le type d'affichage sans avoir à tous casser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::wstring Serie::format_AnneesEtSur(std::wstring& annees_str, std::wstring& sur_str) const
    {...}
    Faites simple, en analysant les axes de variabilités du code pour simplifier le machin :
    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
    std::wstring Serie::format_AnneesEtSur(const std::wstring& annees_str, const std::wstring& sur_str) const
    {
        std::wstring crochet_ouvrant_str = m_keyColor[0] + L" [" + m_valuesColor;
        std::wstring crochet_fermant_str = m_keyColor[0] + L"]" + m_valuesColor;
        const wchar_t espace_str = L' ';
        std::wstring canal_prefixe = espace_str + m_keyColor[0] + m_valuesColor + m_keyColor[1] + L"sur " + m_valuesColor;
        std::wstring canal_postfixe = m_keyColor[1] + L" : " + m_valuesColor;
     
        std::wstring signalitique_jeunesse = L"";
        std::wstring canal = L"";
     
        if (sur_str == L"-" || sur_str == L"")
            canal = L"";
        else
            canal = canal_prefixe + sur_str;
     
        if (sur_str == L"Disney+")
            signalitique_jeunesse = m_disney_sj;
        else if (sur_str == L"Netflix")
            signalitique_jeunesse = m_netflix_sj;
        else if (sur_str == L"Paramount+")
            signalitique_jeunesse = m_paramount_sj;
     
        if(signalitique_jeunesse.size() >= 0)
        {
            canal += canal_postfixe;
        }
     
        return crochet_ouvrant_str + annees_str + canal + signalitique_jeunesse + crochet_fermant_str;
    }
    Code que je trouve complexe mais il correspond à une simplification de votre code, qui gère bizarrement les cas aux limites.
    En revient toujours au même, verbalisez ce que vous voulez faire sous forme d'une phrase, pas sous forme d'un code que vous n'arrivez pas à maintenir simple.

    Parce que You - Copie :
    Andor.[2022- Disney+]
    ...
    C'est quoi le problème ?
    Chez moi, ça à l'air de "fonctionner".

    Mais :
    1883.[2021- Paramount+]
    Titre !!! Compliqué !!! (A883)
    C'est ce qui est dans le GitHub, et je ne vois aussi aucun "problème".

    EXPLICITEZ CE QUI NE "VA" PAS, SVP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const int Serie::afficher_Titre(std::wstring& t, std::wstring const& nomFichier)
    {...}
    C'est quoi ce code tout pourri ???

    Qu'est-que vous reprochez à la fonction "Serie::calcul_Titres_Affichage" qui fait le job actuellement ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::wstring Serie::calcul_Titres_Affichage() const
    {
        std::wstring titres_str;
        titres_str = m_keyColor[0] + L"Titre : " + m_valuesColor + m_titres[0];
        if (m_titres.size() == 3)
            titres_str += m_keyColor[1] + m_titres[1] + m_valuesColor + m_titres[2];
        return titres_str;
    }
    (Oui elle est aussi un peu pourri mais rien de comparable avec "Serie::afficher_Titre" ci-avant.

  13. #1173
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    784
    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 : 784
    Par défaut
    Bon !

    d:\Work\Prg\CPP\You - Copie\You.cpp : 1883.[2021- Paramount+] : Release
    1883
    60 min
    La famille Dutton s'embarque pour un voyage vers l'ouest américain à travers les Grandes Plaines fuyant la pauvreté pour chercher un meilleur avenir au sein de la terre promise de l'Amérique - le Montana.
    Erreur !

    A883
    60 min
    La famille Dutton s'embarque pour un voyage vers l'ouest américain à travers les Grandes Plaines fuyant la pauvreté pour chercher un meilleur avenir au sein de la terre promise de l'Amérique - le Montana.
    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
    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
    const int Serie::afficher_Titre(std::wstring& t, std::wstring const& nomFichier)
    { // Titre_1
    #if Serie_afficher_Titre_ == 1
        B.Ok_T(L"const int Serie::afficher_Titre(" + t + L", " + nomFichier + L") :");
    #endif
        if (titre.begin() == titre.end())
        {
    #if Serie_afficher_Titre_ == 1
            B.Ok_W(L"const int Serie::afficher_Titre(" + t + L", " + nomFichier + L") : erreur !!!");
    #endif
            E.afficher_X(-1, t, L"Titre.begin() == Titre.end()");
            return EXIT_FAILURE;
        }
        try
        {
            // Dans le try, on est assuré que toute exception levée
            // pourra être traitée dans le bloc catch situé après.
            Titre_1 = lire_fichierTxt(nomFichier);
        }
        // Notez qu'une exception s'attrape par référence constante.
        catch (runtime_error const& exception)
        {
            // On affiche la cause de l'exception.
            std::wcout << L"Erreur : " << exception.what() << std::endl;
        }
        Titre_1 += L'\n';
        //
        std::vector<std::wstring> ti;
        std::wstring wstr = L"";
        std::size_t pos = 0;
        pos = Titre_1.find(L'\n');
        int y = 0;
        while (pos != std::wstring::npos)
        {
            ti.push_back(Titre_1.substr(0, pos));
    #if Serie_afficher_Titre_ == 1
            B.Ok_W(L"Titre={" + Titre_1.substr(0, pos) + L'}');
    #endif
            Titre_1 = Titre_1.substr(pos + 1);
            pos = Titre_1.find(L'\n');
            y++;
        }
        // Titre[0] + Titre[1] + Titre[2]
        if (affichage_titre_actif && (titre[1] == L" : " || titre[1] == L": " || titre[1] == L"/" || titre[1] == L""))
        {
            if (ti[0] == (titre[0] + titre[1] + titre[2] + L"\n"))
            {
                bool titre_ = false;
                pos = ti[0].find(L" : ");
                if (pos != wstring::npos && titre_ == false)
                {
                    titre[0] = ti[0].substr(0, pos);
                    titre[1] = L" : ";
                    titre[2] = t.substr(pos + 3, t.length());
                    titre_ = true;
                }
                pos = ti[0].find(L": ");
                if (pos != wstring::npos && titre_ == false)
                {
                    titre[0] = ti[0].substr(0, pos);
                    titre[1] = L": ";
                    titre[2] = t.substr(pos + 2, t.length());
                    titre_ = true;
                }
                pos = ti[0].find(L"/");
                if (pos != wstring::npos && titre_ == false)
                {
                    titre[0] = ti[0].substr(0, pos);
                    titre[1] = L": ";
                    titre[2] = t.substr(pos + 1, t.length());
                    titre_ = true;
                }
                else
                {
                    titre[0] = ti[0];
                    titre[1] = L"";
                    titre[2] = L"";
                    titre_ = true;
                }
                if (titre_ == false)
                {
    #if Serie_afficher_Titre_ == 1
                    B.Ok_W(L"const int Serie::afficher_Titre(" + t + L", " + nomFichier + L") : erreur !!!");
    #endif
                    E.afficher_X(-1, t, L"Titre_={false} !!!");
                    return EXIT_FAILURE;
                }
            }
        }
        else
        {
    #if Serie_afficher_Titre_ == 1
            B.Ok_W(L"const int Serie::afficher_Titre(" + t + L", " + nomFichier + L") : erreur !!!");
    #endif
            E.afficher_X(-1, nomFichier, t);
            return EXIT_FAILURE;
        }
        if (y == 1)
        {
             B.Ok_W(L"const int Serie::afficher_Titre(" + t + L", " + nomFichier + L") : erreur !!!");
            E.afficher_X(-1, nomFichier, t);
            return EXIT_FAILURE;
        }
        //
        bool titre_ = false;
        bool min_ = false;;
        int i = 0;
        if (titre_ == false && min_ == false && i == 0)
        {
        //    min_ = ::afficher_Temps(ti[0]);
            if (min_ == false)
            {
                min_ = ::afficher_Temps(ti[1]);
                if (min_ == false)
                    titre.push_back(L""); // _h_min
                else
                {
                    ::afficher_Titre(ti[0], titre);
                    titre_ = true;
                    titre.push_back(ti[1]);
                    min_ = ::afficher_Temps(ti[1]);
                    if (min_ == false)
                    {
                        E.afficher_X(-1, ti[1], ti[1] + L" erreur (" + ti[1] + L") !!!");
                        return -1;
                    }
                    pos = ti[1].find(L' ');
                    while (pos == wstring::npos)
                    {
                        ti[1] = ti[1].substr(0, pos - 1) + ti[1].substr(pos + 1);
                        pos++;
                    }
                    Temps.tm_min = std::stoi(ti[1]);
                    if (Temps_ == false)
                        Temps_ = true;
                    ti.erase(ti.begin());
                    ti.erase(ti.begin());
                }
            }
            else
            {
                titre.push_back(ti[0]);
                Temps.tm_min = stoi(ti[0]);
                if (Temps_ == false)
                    Temps_ = true;
                ti.erase(ti.begin());
                min_ = true;
            }
        }
        else
        {
            titre.push_back(L""); // _min
        }
        for (int j = 0; j < y; j++)
        {
            wstr += ti[j] + L'\n';
        }
        titre.push_back(wstr);
    #if Serie_afficher_Titre_== 1
        std::vector<std::wstring>::iterator iter;
        for (iter = titre.begin(), i = 0; iter != titre.end(); iter++, i++)
            B.Ok_W(L"Titre[" + to_wstring(i) + L"]={" + *iter + L'}');
        B.Ok_T(L"const int Serie::afficher_Titre() : Ok !");
    #endif
        Titre_1_ = true;
        return EXIT_SUCCESS;
    }
    Que faire ? Voilà !

    Parce que : Exemple ---> Debug !!!
    Oui, mais bon !

  14. #1174
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 430
    Par défaut
    Bon !

    d:\Work\Prg\CPP\You - Copie\You.cpp : 1883.[2021- Paramount+] : Release
    1883
    60 min
    La famille Dutton s'embarque pour un voyage vers l'ouest américain à travers les Grandes Plaines fuyant la pauvreté pour chercher un meilleur avenir au sein de la terre promise de l'Amérique - le Montana.
    Erreur !

    A883
    60 min
    La famille Dutton s'embarque pour un voyage vers l'ouest américain à travers les Grandes Plaines fuyant la pauvreté pour chercher un meilleur avenir au sein de la terre promise de l'Amérique - le Montana.
    Ok !
    Soyez plus explicite !!!
    C'est quoi qui est bon ?
    C'est quoi l'erreur ?
    C'est quoi qui est Ok ?

    "Release" ???
    Vous considérez le projet "You" comme une "Release" et le projet "Exemple" comme un projet "Debug" ???
    "You - Copie\You.cpp" ???
    Pourquoi vous nous sortez ce projet "You" qui est à l'arrêt dans GitHub depuis plus d'un an, qui n'est même pas compilable en l'état et qui est d'une complexité FOLLE ???

    Avec le projet Exemple, je voulais vous montrer qu'en commençant simple et en faisant attention à ne pas faire n'importe quoi, le projet resterait simple.
    Vous ne m'avez pas écouté en collant tout et n'importe quoi dans les classes qui n'ont pas à être affichables, donc le code s'est inutilement complexifié. Mais pas au niveau du projet "You".

    Donc, je ne sais pas si votre "Erreur" est sur le projet "You" ou "Exemple".
    Et quand bien même, je ne connais pas la nature de l'"Erreur".
    Je suppose que vous avez un "1883" à la place d'un "A883".
    OU L'INVERSE, ON SAIT PAS CE QUE VOUS VOULEZ A LA FIN.
    "1883", c'est le titre indiqué par le nom du répertoire; "A883" c'est le titre indiqué dans le contenu du fichier "Titres.txt".
    C'est qui qui doit avoir raison à la fin ???
    (Le contenu d'un fichier n'a pas les mêmes limitations qu'un nom de répertoire/fichier mais vous ne nous avez jamais parlé d'un contournement de limitation de nom de répertoire/fichier)

    Si on considère le projet "Exemple", il y a la fonction libre "fusionner_Titres" aux lignes 369 à 394 du fichier "film_serie.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
    std::vector<std::wstring> fusionner_Titres(const std::vector<std::wstring>& nouveaux_titres, const std::vector<std::wstring>& vieux_titres)
    {
        assert(nouveaux_titres.size() < 4 && L"???");
        assert(vieux_titres.size() < 4 && L"???");
    
        std::vector<std::wstring> resultat = nouveaux_titres;
    
        if (vieux_titres.size() == nouveaux_titres.size())
        {
            // double titres_ration{ 80.0 }; ???
            if (vieux_titres.size() == 1 && nouveaux_titres.size() == 1)
            {
                resultat = vieux_titres;
            }
            if (vieux_titres.size() == 3 && nouveaux_titres.size() == 3 && vieux_titres[0] == nouveaux_titres[0] && vieux_titres[1] != nouveaux_titres[1] && vieux_titres[2] == nouveaux_titres[2])
            {
                resultat[1] = vieux_titres[1];
            }
            if (vieux_titres.size() == 3 && nouveaux_titres.size() == 3 && (vieux_titres[0] != nouveaux_titres[0] || vieux_titres[1] != nouveaux_titres[1] || vieux_titres[2] != nouveaux_titres[2]))
            {
                resultat = vieux_titres;
            }
        }
    
        return resultat;
    (Comme c'est pratique d'avoir des noms plus explicites que "E", "Ok()" ou encore "Ok_W". )
    Bon, le code est bien pourri mais on va dire qu'il fait ce qu'il indique dans le nom de la fonction.
    "nouveaux_titres" devrait être ceux venant du contenu du fichier "Titre.txt" et "vieux_titres" ceux venant du nom du répertoire, car on traite le nom du répertoire avant le contenu du fichier "Titre.txt".
    (Il faudrait donc penser à des noms de paramètre plus explicite.)
    Dans notre cas, on devrait passer à la ligne 381 (en rouge dans l'extrait ci-avant).
    Pourquoi rester avec les vieux titres quand vous n'en n'avez qu'un dans le nom du répertoire et un dans le contenu du fichier "Titre.txt", alors que le comportement par défaut, c'est de prendre toujours les nouveau titres (cf. ligne 374 en vert d'en l'extrait ci-avant) ???

    Franchement, il n'y a que peu de logique dans cette fonction.
    Je pense que si vous explicitiez ce qu'elle devrait faire, elle ne ferait pas plus de 5 lignes et serait bien plus simple que ce code imbuvable.

    Donc, à la sortie de la fonction, à la ligne 1781 de "serie.cpp" dans la fonction "Serie::initialiser_Titre" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void Serie::initialiser_Titre(fs::path const& cheminFichier)
    {
        auto res = extraire_Informations_DepuisLeContenuDUnFichier(cheminFichier);
        m_titres = fusionner_Titres(m_titres, std::get<0>(res));
        m_duree_en_seconde = std::get<1>(res) ? std::get<1>(res).value() : -1;
        m_resume = std::get<2>(res);
    }
    Bon, bin, là, on a passé la valeur du champ "m_titres" (qui contient à ce moment encore les titres récupérés dans le nom du répertoire) comme paramètre "nouveaux_titres" et ce qui a été retourné par la fonction "extraire_Informations_DepuisLeContenuDUnFichier" appelé la ligne d'avant comme paramètre "vieux_titres".
    On a donc, je crois, inversé les arguments de l'appel, ce qui explique pourquoi cela retourne "A883" car c'est le contenu de l'argument "vieux_titres".

    Si c'est fait exprès ; vous êtes un psychopathe.
    Corrigez votre code pour qu'il fasse ce qu'indique leur nom, et leur nom doivent être univoques/explicites.

    Expliquez ce que DOIT faire ce code.
    Actuellement, il ne fait que piéger son développeur.
    On sait même pas si c'est un "1883" ou un "A883" qui doit être affiché ET POURQUOI !!!

    Pour le projet "You", c'est plus simple, vous n'utilisez pas le nom du répertoire et vous affichez le titre qu'au moment où vous lisez le contenu du fichier "Titre.txt".
    Donc, s'il n'y a pas de fichier "Titre.txt" dans le répertoire, vous n'affichez pas de titre.
    Vous affichez le titre à n'importe quel moment lors de l'affichage d'une série, car c'est au moment de la lecture du fichier "Titre.txt".
    Vous pouvez le lire en premier dans le répertoire comme en 20ème position.
    Dans le premier cas, vous l'avez au début de l'affichage de la série, dans le 2ème cas, potentiellement en 20ème ligne (en plein milieu) de l'affichage de la série, pas très logique pour des titres.
    Il faut séparer la lecture des données de l'affichage des données.
    C'est ce qu'a permis de faire les classes dans le projet "Exemple", malgré votre tâche de forcené de vouloir fusionner l'affichage avec des classes.
    Comment voulez-vous faire sans séparer la lecture des données de l'affichage des données ?
    Moi, je ne vois pas.
    Donc, si c'est le nom du répertoire et pas le contenu du fichier 'Titre.txt" qu'il faut afficher, au bout du compte, bin, d'emmerdez-vous pour avoir le nom du répertoire.
    C'est facile, c'est dans le projet "Exemple" que vous semblez mépriser.

    Mais en fin de compte, pourquoi avoir l'information à 2 endroits et que le fait que les valeurs au 2 endroits soient différentes n'est pas une erreur "critique" ?
    Faudrait être un peu "carré" de temps en temps, et corriger les erreurs "à la source".

    Pour la fonction "Serie::afficher_Titre", si on enlève tout ce qui n'a rien à foutre là, et même en gardant votre "module" d'affichage de psychopathe composé des variables globales B, E et P :
    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
     
    std::optional<long> extraire_Duree_DepuisUneLigneDUnFichier(const std::wstring& ligne)
    {
        const std::wregex duree_format_rg{ L"^(?:(\\d+)\\s?(?:h|H)\\s?)?(?:(\\d+)\\s?(?:min|MIN)\\s?)?$" };
        std::wsmatch match;
        std::optional<long>  duree;
        if (std::regex_match(ligne, match, duree_format_rg))
        {
            duree = (match[1].matched ? std::stoi(match[1]) : 0) * 60 * 60 + (match[2].matched ? std::stoi(match[2]) : 0) * 60;
        }
        else
        {
            throw std::invalid_argument("'" + std::string{ ligne.begin(), ligne.end() } + "' n'est pas un format de durée valide.");
        }
        return duree;
    }
     
    std::vector<std::wstring> extraire_Titres_Depuis_UneLigne(std::wstring& ligne)
    { // Titres
    //    assert(ligne.length() > 0 && L"Nom de titres vide"); // ??? pour Mot de... ?
        std::wstring& t = ligne;
     
        std::vector<std::wstring> titres;
     
        std::size_t pos = 0;
        bool found = false;
        const std::wstring d_p = L" : ";
        pos = t.find(d_p);
        if (!found && pos != std::wstring::npos)
        {
            titres.push_back(t.substr(0, pos));
            titres.push_back(d_p);
            titres.push_back(t.substr(pos + 3));
            found = true;
        }
        const std::wstring d_p2 = L": ";
        pos = t.find(d_p2);
        if (!found && pos != std::wstring::npos)
        {
            titres.push_back(t.substr(0, pos));
            titres.push_back(d_p2);
            titres.push_back(t.substr(pos + 2));
            found = true;
        }
        const std::wstring d_p3 = L"/";
        pos = t.find(d_p3);
        if (!found && pos != std::wstring::npos)
        {
            titres.push_back(t.substr(0, pos));
            titres.push_back(d_p3);
            titres.push_back(t.substr(pos + 1));
            found = true;
        }
        const std::wstring d_p4 = L" - ";
        pos = t.find(d_p4);
        if (!found && pos != std::wstring::npos)
        {
            titres.push_back(t.substr(0, pos));
            titres.push_back(d_p4);
            titres.push_back(t.substr(pos + 3));
            found = true;
        }
        const std::wstring d_p5 = L"- ";
        pos = t.find(d_p5);
        if (!found && pos != std::wstring::npos)
        {
            titres.push_back(t.substr(0, pos));
            titres.push_back(d_p5);
            titres.push_back(t.substr(pos + 2));
            found = true;
        }
        if (!found)
        {
            titres.push_back(t);
            found = true;
        }
        return titres;
    }
     
    std::tuple<std::vector<std::wstring>, std::optional<long>, std::vector<std::wstring>> extraire_Informations_DepuisLeContenuDUnFichier(fs::path const& cheminFichier)
    {
        auto nomFichier = cheminFichier.wstring();
        assert(nomFichier.length() > 0 && L"Nom de fichier vide");
        std::vector<std::wstring> contenu = lire_fichierTxt(cheminFichier.wstring(), { L"\n" });
        assert((contenu.size() != 0));
     
        std::vector<std::wstring>nouveaux_titres = extraire_Titres_Depuis_UneLigne(contenu[0]);
     
        std::optional<long> duree;
     
        contenu.erase(contenu.begin());
        if (contenu.size() > 0)
        {
            duree = extraire_Duree_DepuisUneLigneDUnFichier(contenu[0]);
            contenu.erase(contenu.begin());
        }
     
        return { nouveaux_titres , duree , contenu };
    }
     
    void Serie::afficher_Titre(fs::path const& cheminFichier)
    {
        titre = std::get<0>(extraire_Informations_DepuisLeContenuDUnFichier(cheminFichier));
    }
    Oui, il s'agit majoritairement d'un simple copier-coller de codes du projet "Exemple" car il est assez modulaire pour qu'on puisse facilement copier-coller du code.
    Ce qui n'est pas le cas de votre infâme projet "You", où tout dépend de tout.
    Oui, "afficher_Titre" n'affiche rien, mais ne fait que des choses totalement inutiles (gestion de traces que de simples breakpoints (points d'arrêt) dans le débugueur font bien mieux, gestion de cas qui n'ont rien à voir avec les titres comme la durée (largement mieux géré dans une simple fonction "extraire_Informations_DepuisLeContenuDUnFichier", etc...).
    Le seul effet de bord "utile" de cette monstruosité de plusieurs centaines de lignes, c'est de plus ou moins mal remplir le champ "titre" de la classe Serie.
    Et s'ils en manquent, ils seront faciles à ajouter vu la simplicité de la fonction actuellement : 1 ligne.
    (On pourrait changer le nom de la fonction en "setTitres" non ?)
    Pour utiliser la nouvelle version de la fonction "Serie::afficher_Titre", il faut juste changer la ligne de code "i = afficher_Titre(t, nomFichier);" dans la fonction "const int Serie::afficher_fichier(std::wstring const& nomFichier, int const& nomImage = TXT_)" par "afficher_Titre(nomFichier);"
    Le code récupéré dans le projet "Exemple" est loin d'être "parfait", mais en comparaison du code actuel de "You", il n'y a pas photo.

    Je ne peux pas vérifier que tout fonctionne car la version actuelle dans GitHub ne compile même pas et la correction la plus directe pour la faire compiler plante à l'exécution directement au début de la fonction "wmain" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i = 0;
    i = You_txt(i);
    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
    const int You_txt(int& v)
    {
    #if You_txt_ == 1
        B.Ok_T(L"const int You_txt(" + std::to_wstring(v) + L") :");
    #endif
        switch (v)
        {
        case 0:
    #if You_txt_ == 1
            B.Ok_W(L"== " + std::to_wstring(v) + L" ==");
    #endif
            You_txt_OK();
            break;
        default:
            break;
        }
    #if You_txt_ == 1
        B.Ok_T(L"const int You_txt() : Ok !");
    #endif
        return 0;
    }
    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
    const int You_txt_OK()
    {
    #if You_txt_OK_ == 1
        B.Ok_T(L"const int You_txt_OK() :");
    #endif
        //const wchar_t* p{ L"../" };
        const wchar_t* p{ L"../you.txt" };
        path filePath(p);
        //filePath /= L"you.txt";
        std::wstring t;
        try
        {
            // Dans le try, on est assuré que toute exception levée
            // pourra être traitée dans le bloc catch situé après.
            //t = lire_fichierTxt(L"you.txt");
            t = lire_fichierTxt(filePath);
        }
        // Notez qu'une exception s'attrape par référence constante.
        catch (runtime_error const& exception)
        {
            // On affiche la cause de l'exception.
            std::wcout << L"Erreur : " << exception.what() << std::endl;
        }
        //#if You_txt_OK_ == 1
    //    wcout << L"t={" << endl;
    //    wcout << t << endl;
     //   wcout << L'}' << endl;
    //#endif
        t += L'\n';
        std::wcout << L"t=[" << t << std::endl;
        int i{ 0 }, j{ 0 };
        std::wstring t1 = L"", temps = L"";
        std::size_t pos;
        while (t != L"")
        {
            pos = t.find(L'\n');
            t1 = t.substr(0, pos);
            t1 = you_substr(t1);
    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
    std::wstring you_substr(std::wstring t)
    {
        //t = replace_all(t, L"\n", L"");
        t = replace_all(t, L"\r\n", L"");
        t = replace_all(t, L"\"", L"");
        size_t c = t.length();
        //t[c--];
        if (t[c - 1] == ' ' || t[c - 1] == '\t')
        {
            return L" ";
        }
    #if you_substr_ == 1
        std::wcout << "t=[" << t << "], size=[" << t.size() << "] length=[" << t.length() << "]" << endl;
    #endif
        return t;
    }
    Il se passe quoi si la variable t, au moment de l'exécution de la ligne en rouge dans le dernier code est égale à une chaine vide "" ?
    Bin, ça plante, et elle est toujours vide, toujours.
    Le code qui est avant n'a aucun sens mais fait toujours la même erreur.
    Pouvez-vous m'expliquez ce que fait tout ce code complètement vide de sens ???

  15. #1175
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    784
    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 : 784
    Par défaut
    J'ai un chaton qui fait des bêtises dans la maison. Je me suis rendu compte qu'il avait sûrement marché sur le clavier sur ctr/alt/win et d'autres touches.
    J'avais tapé (par exemple) assert((e_filename == createdBy_filename) && L"Erreur !!! En relation avec... !") pendant "release" et le chat a fait "debug" et... bin !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void Serie::afficher_En_relation_avec(std::wstring& e_filename, std::wstring const& nomFichier, std::vector<std::wstring>&e_r_a) const
    {
        assert((e_filename == createdBy_filename) && L"Erreur !!! En relation avec... !");
        e_r_a = lire_fichierTxt(nomFichier, { L"\n", L", " });
        assert((en_relation_avec.size() != 0));
    }
    Je vais corriger l'erreur !!!

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

    Mais, peut être :
    Exemple (debug) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        const std::vector<std::wstring> racines{
                                            L"L'Attaque des Titans.[2013- Crunchyroll].Manga",
                                            L"Azertyuiop £££.[2024-].Mini-série",
    ...
                                            L"Star Wars- The Clone Wars.(2008-08-27).Animation",
                                            L"Saison.txt"
        };
    ajouter avec par exemple :
    pour :
    you /t s "e:\Séries.[]\1883.[2021- Paramount+]"
    you /t s "e:\Séries.[]\Yellowstone.[2018-2024]"
    you /t s "e:\Séries.[]\+++\R\Resident Alien.[2021-]"
    you /t s "e:\Séries.[]\Will Trent.[2023-]"
    et :
    https://zestedesavoir.com/tutoriels/...-mes-fichiers/ ???

    Merci d'avance et vraiment

  16. #1176
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 430
    Par défaut
    Vous ne répondez jamais aux questions, même les plus simples.
    C'est "1883" ou "A883" qui doit s'afficher ???

    etc...

    J'ai un chaton qui fait des bêtises dans la maison. Je me suis rendu compte qu'il avait sûrement marché sur le clavier sur ctr/alt/win et d'autres touches.
    J'avais tapé (par exemple) assert((e_filename == createdBy_filename) && L"Erreur !!! En relation avec... !") pendant "release" et le chat a fait "debug" et... bin !!!
    Il a le dos large le chaton.

    Google : "cat keystroke detection program"
    => https://improbable.com/2015/09/14/pr...oard-detector/

    "Debug" et "Release", c'est des modes de compilation, je ne vois pas le rapport avec votre chaton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void Serie::afficher_En_relation_avec(std::wstring& e_filename, std::wstring const& nomFichier, std::vector<std::wstring>&e_r_a) const
    {
        assert((e_filename == createdBy_filename) && L"Erreur !!! En relation avec... !");
        e_r_a = lire_fichierTxt(nomFichier, { L"\n", L", " });
        assert((en_relation_avec.size() != 0));
    }
    Code plutôt complexe, qui ne fait rien de ce qui est annoncé par les noms utilisés, avec un mélange entre ce sui vient des paramètres et des champs de la classe ("e_r_a" Vs "en_relation_avec").

    En clair, vous pouvez supprimer cette fonction et remplacer le code d'appel de la fonction de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (L"En relation avec.txt" == t)
    {
        afficher_En_relation_avec(t, nomFichier, en_relation_avec);
    ...
    En
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (L"En relation avec.txt" == t)
    {
        en_relation_avec = lire_fichierTxt(nomFichier, { L"\n", L", " });
    ...
    Mais, peut être :
    Exemple (debug) :
    ...
    ...
    you /t s "e:\Séries.[]\Will Trent.[2023-]"
    Je ne comprends pas la "question".
    Des moyens pour ne pas avoir à lister l'ensemble des répertoires, j'en n'ai déjà donné pour le projet "Exemple" que vous n'avez pas suivi.

    Dans le projet "You", il y a déjà tout ce qu'il faut pour avoir une liste de "racines" dans un fichier de configuration.

    QUEL EST LA QUESTION ???

    Oui mais encore ?
    La fonction "lire_fichierTxt" fait usage de tout ce qui y est dit dans cet article, et bien plus.

    Sur quoi voulez-vous mettre l'accent dans cet article ?

  17. #1177
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    784
    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 : 784
    Par défaut
    1883 : évidement : https://www.allocine.fr/series/fiche...rie=28329.html
    Genre : Drame, Historique, Western !

  18. #1178
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 430
    Par défaut
    "Evidemment" ???
    C'est quoi la règle ?

    Vous nous indiquez qu'il faut faire confiance au nom du répertoire et pas au contenu du fichier ?

    Pourtant le contenu du fichier est moins susceptible d'avoir des limitations que le nom du répertoire.

    Pour le projet "You", vous n'utilisez pas le nom du répertoire, il faut donc corriger le contenu du fichier.

    Pour le projet "Exemple", comme vous utilisez de travers la fonction "fusionner_Titres", on ne sait pas s'il faut corriger la fonction ou la manière dont vous vous en servez.
    Mais pourquoi vous ne corrigez le contenu du fichier ?

    Je ne comprends pas vos "évidences" ni les difficultés que vous ne verbalisez jamais.

  19. #1179
    Membre très actif Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    784
    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 : 784
    Par défaut
    You - Copie : ok !

    Demain : Exemple !

    Mais (Exemple) :
    you /t s "e:\Séries.[]\1883.[2021- Paramount+]"
    you /t s "e:\Séries.[]\Yellowstone.[2018-2024]"
    you /t s "e:\Séries.[]\+++\R\Resident Alien.[2021-]"
    you /t s "e:\Séries.[]\Will Trent.[2023-]"
    Etc...
    Ok ou non !

  20. #1180
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 430
    Par défaut
    You - Copie : ok !
    https://github.com/laurentbouleau/You---Copie
    C'est un clone du projet "You" ???
    Pourquoi le nombre de "-" dans le nom du projet augmente régulièrement ???
    C'est quoi son rôle, à part dupliquer le code et rendre la maintenance des différents projets infernales ???

    you /t s "e:\Séries.[]\1883.[2021- Paramount+]"
    you /t s "e:\Séries.[]\Yellowstone.[2018-2024]"
    you /t s "e:\Séries.[]\+++\R\Resident Alien.[2021-]"
    you /t s "e:\Séries.[]\Will Trent.[2023-]"
    Etc...
    Ok ou non !
    C'est quoi la question ?

+ 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