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. #961
    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
    https://github.com/laurentbouleau/Exemple : Novembre 18 (15/11/2024)

    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
    ...
    const void Serie::Print_Saisons()
    {
        if (affichage_saisons_actif)
        {
            int i = 1;
            for (auto saison : saisons)
            {
                std::wstring saison_str = m_keyColor[0];
                const std::wstring saison_chiffre = L"Saison ";
                const std::wstring hors_saison = L"Hors saison";
                if (saison.m_hors_saison)
                    saison_str += hors_saison;
                else
                    saison_str += saison_chiffre + std::to_wstring(i++);
                saison_str += L" :" + m_valuesColor + L"\r\n";
                std::wcout << saison_str;
                Print_Saison(saison);
            }
        }
    }
    ...
    Merci

  2. #962
    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
    ???

  3. #963
    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
    Je suis perdu​​​ !!!

    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
    void Episode::Print()
    {
        bool first = true;
        for (auto vis : m_liste_sequence_visionnages)
        {
            if (first)
            {
                PrintFirstSequenceVisionnage(vis);
            }
            else
            {
                PrintSequenceVisionnage(vis);
            }
            first = false;
        }
    }
    
    void Episode::PrintFirstSequenceVisionnage(const SequenceVisionnage& vis)
    {
        // ???
    }
    
    void Episode::PrintSequenceVisionnage(const SequenceVisionnage& vis)
    {
        // ???
    
    }
    Pouvez-vous expliquer ?

    Merci d'avance

  4. #964
    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
    https://github.com/laurentbouleau/Exemple : Novembre 19 (17/11/2024)
    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
    void Episode::Print()
    {
        bool first = true;
        for (auto vis : m_liste_sequence_visionnages)
        {
            if (first)
            {
                PrintFirstSequenceVisionnage(vis);
            }
            else
            {
                PrintSequenceVisionnage(vis);
            }
            first = false;
        }
    }
    
    void Episode::PrintFirstSequenceVisionnage(const SequenceVisionnage& vis)
    {
        // ???
        m_liste_sequence_visionnages.push_back(vis);
    }
    
    void Episode::PrintSequenceVisionnage(const SequenceVisionnage& vis)
    {
        // ???
    }

    ???
    Ok ou pas ?

  5. #965
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 434
    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 434
    Par défaut
    Ça dépend de votre expression régulière et de ce que vous voulez mettre dans "m_streaming".
    Utilisez "https://regex101.com" pour vérifier que vos index ("const int") soient bons pour votre usage.
    Ok ! Bon, tant pis

    https://regex101.com/r/AcrBQ3/1 !!!
    "tant pis" Quoi, SVP ?

    C'est juste faire en sorte que les constantes soient correctement valorisées en fonction de l'expression régulière pour qu'en utilisant une expression comme "match[c_numeroDeLaCaptureQuiMInteresse]" (ou "match" est un paramètre données à la fonction "std::regex_match"), on récupère le "bout" de la chaine de caractères qui nous intéresse.
    Dans le code que j'ai fourni, les constantes sont définies en fonction d'autres constantes pour que, si l'expression régulière change "un peu" (ajout ou suppression d'une capture), vous n'avez qu'à modifier la définition d'une ou deux constantes pour corriger l'ensemble des valeurs de ces constantes.

    Si l'on utilise l'expression régulière que vous avez utilisé dans https://regex101.com/r/AcrBQ3/1, l'outil montre que la capture qui contient la partie "stream" du texte est la 12ème.
    Donc "c_XXX_stream_index" devrait valoir 12 pour que "match[c_XXX_stream_index]" contienne le nom du stream compris dans la chaine de caractère.
    Mais vérifiez bien que l'expression régulière utilisée est la même que celle utilisée dans "https://regex101.com".

    https://regex101.com/r/AcrBQ3/1 "déconne" un peu avec le jeu de test donné dans la partie en bas à gauche, car, avec des expressions régulières un peu complexe, l'outil "capture" 2 lignes à la fois dans le jeu de test au lieu de le faire ligne par ligne.
    Le plus simple, c'est de mettre une ligne vide entre chaque valeur à tester :
    https://regex101.com/r/fNUlXC/1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::wstring SequenceVisionnage_film::Print_Dates_de_visionnage(std::vector<DateRecord>& m_DatesVisionnage, std::vector<std::wstring>& keyColor, std::wstring& valuesColor)
    {
    ...
        const std::wstring streaming_format = m_keyColor[1] + L" : " + m_valuesColor + L"%s";
    ...
    }
    Attention, en mettant les valeurs de "m_keyColor[1]" et de "m_valuesColor" directement dans le format, vous risquez des problèmes en utilisant la fonction "wstring_format" si ces valeurs contiennent des choses qui seraient interprété par "wstring_format" comme un point de remplacement comme "%s" ou "%d" etc...

    C'est plus prudent, et plus lisible, de mettre le format, rien que le format dans la constante "streaming_format", pas des valeurs "en dur".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    std::wstring SequenceVisionnage_film::Print_Dates_de_visionnage(std::vector<DateRecord>& m_DatesVisionnage, std::vector<std::wstring>& keyColor, std::wstring& valuesColor)
    {
    ...
        const std::wstring streaming_format = L"%s : %s%s";
    ...
        if (m_streaming != L"" && dates_de_visionnage_wstr.length() > 0)
             dates_de_visionnage_wstr += wstring_format(streaming_format, m_keyColor[1].c_str(),m_valuesColor.c_str(),m_streaming.c_str());
    ....
    }
    (code non testé)

    Vous pouvez aussi bien faire des classes "AfficheurFilmDansConsole" que des fonctions libres "void AfficherFilmDansConsole(const Film& film)".
    Ou tout autre conception qui sépare l'affichage d'un objet métier du reste de l'objet.
    Plut tard !!!
    Oui, plus tard vos embrouilles d'affichage.

    D'abord serie.cpp !!!
    Pourquoi ???

    Comme pour https://regex101.com/r/AcrBQ3/1 , le plus simple, c'est de mettre une ligne vide entre chaque valeur à tester :
    https://regex101.com/r/xXO4wo/1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
    void Episode::ajouter_SequenceVisionnage(const InfosVisionnage& info_vis)
    {
        m_liste_sequence_visionnages.push_back(SequenceVisionnage(*this, info_vis));
    }
     
    void Episode::GetNumeroSequenceVisionnage(const SequenceVisionnage& sev_vis)
    {
        //...
        //auto NumeroSequenceVisionnage = m_episode.GetNumeroSequenceVisionnage(*this); // ??? #804
        //auto NumeroSequenceVisionnage = m_episode.GetNumeroSequenceVisionnage(sev_vis); // ??? #804
    }
    ...
    J'ai déjà indiqué que cela est plus complexe que je ne voulais et qu'il était plus simple de passer par :
    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
    void Episode::Print()
    {
        bool first = true;
        for (auto vis : m_liste_sequence_visionnages)
        {
            if (first)
            {
                PrintFirstSequenceVisionnage(vis);
            }
            else
            {
                PrintSequenceVisionnage(vis);
            }
            first = false;
        }
    }
    
    void Episode::PrintFirstSequenceVisionnage(const SequenceVisionnage& vis)
    {
        vis.uneFonctionQuiAfficheLaSequenceDeVisionnageSelonLeFormatNecessaireQuandCEstLaPremiereDUnEpisode();
    }
    void Episode::PrintSequenceVisionnage(const SequenceVisionnage& vis)
    {
        vis.uneFonctionQuiAfficheLaSequenceDeVisionnageSelonLeFormatNecessaireQuandCENEstPasLaPremiereDUnEpisode();
    
    }
    Ou, plus succinctement, en utilisant un paramètre booléen :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void Episode::PrintFirstSequenceVisionnage(const SequenceVisionnage& vis)
    {
        vis.uneFonctionQuiAfficheLaSequenceDeVisionnage(true);
    }
    void Episode::PrintSequenceVisionnage(const SequenceVisionnage& vis)
    {
        vis.uneFonctionQuiAfficheLaSequenceDeVisionnage(false);
     
    }
    La fonction "SequenceVisionnage::uneFonctionQuiAfficheLaSequenceDeVisionnage" correspond très bien à votre fonction "SequenceVisionnage:: Print()", mais en utilisant un paramètre booléen fourni par l'objet de type Episode, et pas le champ "m_numero" complètement foireux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SequenceVisionnage::Print(bool isFirstSequence)
    {
    ...
        if(isFirstSequence)
        {
            ....
        }
    ...
    }
    Mais si vous voulez absolument implémenter la fonction "Episode::GetNumeroSequenceVisionnage(const SequenceVisionnage& sev_vis)" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    long long Episode::GetNumeroSequenceVisionnage(const SequenceVisionnage& sev_vis) const
    {
         auto it = std::find(m_liste_sequence_visionnages.begin(), m_liste_sequence_visionnages.end(), sev_vis);
         return (it - m_liste_sequence_visionnages.begin()) + 1; // +1 parce que les numéro de séquence commencent à 1
    }
    Pour que "std::find" fonctionne, il faut implémenter l'opérateur de comparaison de la classe SequenceVisionnage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boolean operator==(const SequenceVisionnage& rhs) const { return this == &rhs; };
    Vous pouvez vous en servir en suite dans "SequenceVisionnage:: Print" sans avoir à passer un booléen "isFirstSequence" :
    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
    void SequenceVisionnage::Print() const
    {
        int numero_sequence = m_episode.GetNumeroSequenceVisionnage(*this);
    
        std::wstring wstr;
        std::wstring chiffre_et_point_ou_pas_str{};
        std::wstring duree_str;
        bool chiffre_et_point_ou_pas = Print_Titre_chiffre_et_point_ou_pas(numero_sequence);
        if (chiffre_et_point_ou_pas)
        {
            chiffre_et_point_ou_pas_str = std::to_wstring(m_episode.m_saison.m_numero) + m_keyColor[1] + L'x' + m_valuesColor + std::to_wstring(m_episode.m_numero) + m_keyColor[1] + L" : " + m_valuesColor;
        }
    
    
        wstr = ((m_titres.size() >= 1) ? m_keyColor[1] + m_titres[0] + m_valuesColor : L"") + ((m_titres.size() >= 2) ? m_titres[1] + m_valuesColor : L"") + ((m_titres.size() >= 3) ? m_keyColor[1] + m_titres[2] + m_valuesColor : L"") ;
       // Pourquoi l'affichages du 2ème titre est différent ???
    
        
        if (numero_sequence == 1)
        {
            long minutes = (m_duree_en_seconde/* % (60 * 60)*/) / 60;
            long secondes = m_duree_en_seconde % 60;
            duree_str += m_keyColor[1] + L" (" + m_valuesColor + std::to_wstring(minutes) + m_keyColor[1] + m_espace3 + (minutes <= 1 ? m_labelMinuteSingulier : m_labelMinutePluriel) + L')' + m_valuesColor;
        }
        else
        {
            duree_str += m_keyColor[1] + L" [" + m_valuesColor + std::to_wstring(numero_sequence) + m_keyColor[1] + L']' + m_valuesColor;
        }
        
        wstr += m_keyColor[1] + L" : " + m_valuesColor;
        wstr += Print_Dates_de_visionnage(m_DatesVisionnage);
    
        std::wstring resume_str;
        if (numero_sequence == 1 && m_resume.size() != 0)
        {
            resume_str += L"\r\n";
            for (auto r : m_resume)
                resume_str += r;
        }
        std::wcout << chiffre_et_point_ou_pas_str << wstr << duree_str << resume_str << L"\r\n";
    }
    (Code à revoir car trop complexe, je pense)


    Pour utiliser correctement ces 2 fonction il faut corriger quelques déclarations et définition de fonction vis à vis de la const-correctness :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        void Print() const;
        std::wstring Print_Dates_de_visionnage(const std::vector<DateRecord>& dr) const;
        bool Print_Titre_chiffre_et_point_ou_pas(int episode) const;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        void Print() const;
        void PrintFirstSequenceVisionnage(const SequenceVisionnage& vis) const;
        void PrintSequenceVisionnage(const SequenceVisionnage& vis) const;
    Mais il y a aussi un piège à éviter :
    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
    void Episode::Print() const
    {
        bool first = true;
        for (auto& vis : m_liste_sequence_visionnages)
        {
            if (first)
            {
                PrintFirstSequenceVisionnage(vis);
            }
            else
            {
                PrintSequenceVisionnage(vis);
            }
            first = false;
        }
    }
    Le "&" permet de ne pas cloner l'objet de type "SequenceVisionnage". S'il est cloné, la fonction "Episode::GetNumeroSequenceVisionnage(const SequenceVisionnage& sev_vis)" ne fonctionne plus.
    Cela est lié à la problématique "class Entité Versus Class Clonable".


    struct Saison, class Serie : ok !

    Mais :
    struct InfosVisionnage
    struct SequenceVisionnage
    struct Episode
    Dure à dire !!!
    Quelle est la question ???

    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
    const void Serie::Print_Saisons()
    {
        if (affichage_saisons_actif)
        {
            int i = 1;
            for (auto saison : saisons)
            {
                std::wstring saison_str = m_keyColor[0];
                const std::wstring saison_chiffre = L"Saison ";
                const std::wstring hors_saison = L"Hors saison";
                if (saison.m_hors_saison)
                    saison_str += hors_saison;
                else
                    saison_str += saison_chiffre + std::to_wstring(i++);
                saison_str += L" :" + m_valuesColor + L"\r\n";
                std::wcout << saison_str;
                Print_Saison(saison);
            }
        }
    }
    Pourquoi utiliser cette variable "i" toute foireuse, plutôt que de demander à la saison elle-même ???

    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
    const void Serie:: Print_Saisons()
    {
        if (affichage_saisons_actif)
        {
            for (auto& saison : saisons)
            {
                const std::wstring saison_chiffre = L"Saison ";
                const std::wstring hors_saison = L"Hors saison";
    
                std::wstring saison_str = m_keyColor[0];
    
                if (saison.m_hors_saison)
                    saison_str += hors_saison;
                else
                    saison_str += saison_chiffre + std::to_wstring(saison.m_numero)
    ;
                saison_str += L" :" + m_valuesColor + L"\r\n";
    
                std::wcout << saison_str;
    
                Print_Saison(saison);
            }
        }
    }
    (Et c'est quoi encore que ce "const void" merdique !!!!)
    Et je pense que c'est plus à la saison de savoir comment s'afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void Serie:: Print_Saisons()
    {
        if (affichage_saisons_actif)
        {
            for (auto& saison : saisons)
            {
                saison.Print();
                std::wcout << L"\r\n"r;
            }
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Episode::PrintFirstSequenceVisionnage(const SequenceVisionnage& vis)
    {
        // ???
        m_liste_sequence_visionnages.push_back(vis);
    }
    C'est quoi la logique ????
    "PrintFirstSequenceVisionnage", c'est pour afficher la première séquence de visionnage d'un épisode.
    Pourquoi ajouter la liste passée en paramètre à la liste des séquences de l'épisode ???
    Elle y est déjà !!!

  6. #966
    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
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        const int filename_dates_index = 0;
        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_someFlag_index = filename_date_day_day_index + 1;
        //const int filename_stream_index = filename_someFlag_index + 2;
        const int filename_stream_index = filename_someFlag_index + 3;
        //const int filename_stream_index = filename_someFlag_index + 3;
    J'essayai pas !!!

  7. #967
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 434
    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 434
    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
    void Episode::PrintFirstSequenceVisionnage(const SequenceVisionnage& vis)
    {
        auto& liste = m_liste_sequence_visionnages[0];
    
        std::wstring liste_str;// = L"\r\n";
    
        //if()
        liste_str += std::to_wstring(liste.m_NumeroSaison + 1);
        liste_str += m_keyColor[1] + L'x' + m_valuesColor;
        liste_str += std::to_wstring(liste.m_NumeroEpisode + 1);
        liste_str += m_keyColor[1] + L" : " + m_valuesColor;
    
        liste_str += m_keyColor[1] + liste.m_titres[0] + m_valuesColor;
        if (liste.m_titres.size() > 1)
            liste_str += liste.m_titres[1] + m_keyColor[1] + liste.m_titres[2] + m_valuesColor;
    
        liste_str += m_keyColor[1] + L" (" + m_valuesColor + m_keyColor[1] + L"min)" + m_valuesColor;
    
        liste_str += L"\r\n";
        for (auto l : liste.m_resume)
        {
            liste_str += l + L"\r\n";
        }
        liste_str += L"\r\n";
        std::wcout << liste_str;
    }
    (dernière modification dans Github)
    Ok, vous considérez que c'est l'Episode qui sait comment afficher la première séquence.
    Mais pourquoi ne pas utiliser le paramètre "const SequenceVisionnage& vis" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    auto& liste = m_liste_sequence_visionnages[0];
    Soit vous passez en paramètre la séquence, soit vous allez directement lire dans les champs de la classe Episode.
    Faire les 2, c'est piégeux.
    J'avais privilégié le passage de paramètre car cela rend le code plus facile à déplacer ailleurs.

    Il faudra revoir le code qui fait des assertions, comme le fait qu'il y ait forcément une séquence de visionnage pour l'épisode, un titre, etc...
    L'utilisation de "wstring_format" simplifierait pas mal le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        const int filename_dates_index = 0;
        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_someFlag_index = filename_date_day_day_index + 1;
        //const int filename_stream_index = filename_someFlag_index + 2;
        const int filename_stream_index = filename_someFlag_index + 3;
        //const int filename_stream_index = filename_someFlag_index + 3;
    J'essayai pas !!!
    Pourquoi ?
    Les valeurs de ces constantes me semblent correctes.
    Les "+3" montre que vous faites pas mal de captures que vous n'utilisez pas (via un numéro de capture dédié).
    Il y a vraisemblablement des possibilités de "simplifier" l'expression régulière.

  8. #968
    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
    Bonsoir,

    Je suis fatigué !!!

    https://github.com/laurentbouleau/Exemple : Novembre 21 (19/11/2024)

    Nom : Capture d’écran 2024-11-19 225619.png
Affichages : 95
Taille : 60,7 Ko

    Merci vraiment

  9. #969
    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
    https://github.com/laurentbouleau/Exemple : Novembre 22 (20/11/2024)

    Je suis perdu !!!

    Merci

  10. #970
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 434
    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 434
    Par défaut
    Pas de panique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void Episode::PrintSequenceVisionnage(const SequenceVisionnage& vis)
    {
        vis.uneFonctionQuiAfficheLaSequenceDeVisionnage(false);
    }
    "vis" est une référence "constante" sur une "SequenceVisionnage".
    Vous ne pouvez appeler que les fonctions "constantes" de cet objet.
    fonction constante : fonction qui ne modifie par les informations "internes" de l'objet.
    "uneFonctionQuiAfficheLaSequenceDeVisionnage" est logiquement une fonction constante.

    serie.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::wstring uneFonctionQuiAfficheLaSequenceDeVisionnage(bool) const;
    serie.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::wstring SequenceVisionnage::uneFonctionQuiAfficheLaSequenceDeVisionnage(bool f) const
    {
    
        return L"1";
    }
    Et j'ai tendance à mettre des noms de fonction très très très "explicite".
    Ne trouvez-vous pas que "SequenceVisionnage::uneFonctionQuiAfficheLaSequenceDeVisionnage" soit très très proche de "SequenceVisionnage:: Print" ???
    Pourquoi "uneFonctionQuiAfficheLaSequenceDeVisionnage" retourne une chaine de caractère ?

    Après la correction de const-correctness de cette fonction la ligne suivante crash à l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const std::wregex filename_format_rg{ L"(" + dates_format + L"+)" + stream_format };
    C'est parce que vous n'avez pas équilibré les ouvertures/fermetures de parenthèses.
    Je ne comprends pas votre logique dans les modifications des expressions régulières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        //const std::wstring dates_format = L"((" + date_year_month_day_format + L"|" + date_month_day_format + L"|" + date_day_format + L")(_?))";
        const std::wstring dates_format = L"((" + date_year_month_day_format + L"|" + date_month_day_format + L"|" + date_day_format + L")" + stream_format;
    Celle en commentaire a équilibré ses parenthèses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const std::wregex filename_format_rg{ L"(" + dates_format + L"+)" + stream_format };
    Pourquoi remettre "stream_format" dans l'expression régulière ? Vous l'avez déjà ajouté (de manière inappropriée, je trouve) dans "dates_format".

    Vous devez avoir un minimum de rigueur quand vous utilisez les expressions régulières.

  11. #971
    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
    Bonjour,

    https://github.com/laurentbouleau/Exemple : Novembre 23 (21/11/2024)

    Ok ou pas ?

    Merci

  12. #972
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 434
    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 434
    Par défaut
    Ok ou pas ?
    Bof.
    La partie expression régulière, OK, car vous êtes revenu à la version d'avant, qui était opérationnelle. C'était juste les indices des captures qui déconnaient.
    Maintenant, c'est "Ok".

    Pour les autres modifications, vous ne semblez pas faire la différence entre une fonction membre d'une classe et une fonction "libre".

    Vous avez ajouté la fonction "libre" "uneFonctionQuiAfficheLaSequenceDeVisionnage" dans serie.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /*SequenceVisionnage*/void uneFonctionQuiAfficheLaSequenceDeVisionnage(bool f)
    {
        bool e = f;
        //return SequenceVisionnage;
    }
    Fonction "libre" que vous n'avez même pas déclarée dans serie.h. Donc utilisable que dans "serie.cpp" et après la ligne 546, ligne où s'arrête la définition de de la dite fonction s'achève.

    Il faut que vous compreniez comment sont déclarées les fonctions membres d'une classe et les fonction "libres".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class UneClasse
    {
    ....
        void uneFonctionMembreDeLaClasseUneClasse();
    ....
    }
    ...
    void unefonctionLibre();
    ...
    La grosse différence entre une fonction membre (non static) d'une classe et une fonction "libre", c'est que la fonction membre a accès directement aux champs de l'objet du type de la classe.
    Les fonctions membres ont accès à l'objet "courant" via la pseudo-variable "this", mais dans la majorité du temps, c'est implicite.
    Une fonction "libre" n'a accès qu'à ses paramètres ; les variables globales et autres cochonneries en tout genre, mais pas les champs d'un objet. Une fonction "libre" n'a pas d'objet courant ("this" ni existe pas).

    Donc, comment votre fonction "libre" "uneFonctionQuiAfficheLaSequenceDeVisionnage(bool f)" va pouvoir affiché le contenu d'une séquence de visionnage, sans séquence de visionnage ???
    Il faudrait au moins lui fournir une référence sur la séquence de visionnage en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void uneFonctionQuiAfficheLaSequenceDeVisionnage(const SequenceVisionnage& vis, bool f)
    Avec cette nouvelle signature, il faudra passer la référence en argument lors de l'appel de la fonction "libre" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
        uneFonctionQuiAfficheLaSequenceDeVisionnage(vis,uneVariableBooleenneAvecUnNomACoucherDehors);
    ...
    Avec ce nouveau paramètre, vous pourrait explicitement accéder aux champs publiques du paramètre "vis".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void Episode::PrintSequenceVisionnage(const SequenceVisionnage& vis)
    {
        /*vis.*/uneFonctionQuiAfficheLaSequenceDeVisionnage(false);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void Episode::PrintSequenceVisionnage(const SequenceVisionnage& vis)
    {
        uneFonctionQuiAfficheLaSequenceDeVisionnage(vis,false);
    }
    Et je le répète, c'est quoi la différence entre "void SequenceVisionnage:: Print(bool isFirstSequence)" et "std::wstring SequenceVisionnage::uneFonctionQuiAfficheLaSequenceDeVisionnage(bool) const;" ???
    A part que le type de retour de la seconde est débile par rapport à son nom et que la première n'est pas taguée "const" parce que, bin, je sais pas ; moi, j'en vois aucune sémantiquement.

    Prenez du recule, et simplifiez votre code, SVP !!!

    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
    void Episode::PrintFirstSequenceVisionnage(const SequenceVisionnage& vis)
    {
        auto& liste = m_liste_sequence_visionnages[0];
     
        std::wstring liste_str;// = L"\r\n";
     
        //if()
        liste_str += std::to_wstring(liste.m_NumeroSaison + 1);
        liste_str += m_keyColor[1] + L'x' + m_valuesColor;
        liste_str += std::to_wstring(liste.m_NumeroEpisode + 1);
        liste_str += m_keyColor[1] + L" : " + m_valuesColor;
     
        liste_str += m_keyColor[1] + liste.m_titres[0] + m_valuesColor;
        if (liste.m_titres.size() > 1)
            liste_str += liste.m_titres[1] + m_keyColor[1] + liste.m_titres[2] + m_valuesColor;
     
        liste_str += m_keyColor[1] + L" (" + m_valuesColor + m_keyColor[1] + L"min)" + m_valuesColor;
     
        liste_str += L"\r\n";
        for (auto l : liste.m_resume)
        {
            liste_str += l + L"\r\n";
        }
        liste_str += L"\r\n";
        std::wcout << liste_str;
    }
     
    void Episode::PrintSequenceVisionnage(const SequenceVisionnage& vis)
    {
        /*vis.*/uneFonctionQuiAfficheLaSequenceDeVisionnage(false);
    }
    Pourquoi les fonctions "Episode:: PrintFirstSequenceVisionnage" et "Episode:: PrintSequenceVisionnage(const SequenceVisionnage& vis)" fonctionnent complètement différemment ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    const void Film::Print_Dates()
    {
        if (affichage_visionnages_actif)
        {
            std::wstring dates_str = L"\r\n";
            for (auto& visionnage : m_visionnages)
            {
                //dates_str += visionnage.Print_Dates_de_visionnage(visionnage.m_DatesVisionnage) + L"\r\n";
                dates_str += visionnage.Print_Dates_de_visionnage(visionnage.m_DatesVisionnage, m_keyColor, m_valuesColor) + L"\r\n";
            }
            dates_str += L"\r\n";
            std::wcout << dates_str;
        }
    }
    Il est où l'esperluette (&), SVP !!!
    Pourquoi passer en paramètre "visionnage.m_DatesVisionnage" car la fonction "Print_Dates_de_visionnage" a accés implicitement à "visionnage" ???
    Pourquoi passer "m_keyColor" et "m_valuesColor" ??? la fonction "Episode::AffichagePersonnaliser(AffichagePersonnalisation perso)" fait déjà en sort que ces champs soient les mêmes dans l'épisode et dans les séquences de visionnage ?
    ("Episode::ajouter_SequenceVisionnage(const InfosVisionnage& info_vis)" devrait être "corrigé" pour faire comme "Episode::AffichagePersonnaliser(AffichagePersonnalisation perso)")

    Prenez du recule, et simplifiez votre code, SVP !!!(BIS)

  13. #973
    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
    Bonsoir,

    https://github.com/laurentbouleau/Exemple : Novembre 24 (22/11/2024)
    Pas de solution !!!
    std::wstring SequenceVisionnage::calcul_Duree_affichage() const : duree_str !!!
    void SequenceVisionnage:rint(bool isFirstSequence) : chiffre_et_point_ou_pas_str

    Je suis crevé ! J'en ai marre !

    Merci

  14. #974
    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
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        SequenceVisionnage(const Episode& episode, const InfosVisionnage& info_vis) :
            m_episode{ episode }, m_titres{info_vis.m_titres}, m_streaming{info_vis.m_streaming},
            m_duree_en_seconde{ info_vis.m_duree * 60 }, m_resume{ info_vis.m_resume },
            m_DatesVisionnage{ info_vis.m_DatesVisionnage }
        {};
    std::wstring SequenceVisionnage::uneFonctionQuiAfficheLaSequenceDeVisionnage(bool found) const
    void InfosVisionnage::Une_Fonction_De_La_Classe_InfosVisionnage(...)
    void SequenceVisionnage::Une_Fonction_De_La_Classe_SequenceVisionnage(...)
    void Episode::Une_Fonction_De_La_Classe_SequenceVisionnage_xxx(...)
    long long Episode::GetNumeroSequenceVisionnage(const SequenceVisionnage& sev_vis) const
    etc... ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    bool SequenceVisionnage::Print_Titre_chiffre_et_point_ou_pas(long episode)
    {
        if (episode == 0)
            return false;
        return true;
    }
    ===> Hors saison (exemple : Dr. STONE : 0 et pas 1?)
    Donc, -1 == Kaleidoscope et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct SequenceVisionnage
    {
    ...
       long m_numero{ -2 };
    ...
    };
    Voilà !!!

  15. #975
    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
    Bonjour,

    https://github.com/laurentbouleau/Exemple : Novembre 25 (23/11/2024)

    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
    SequenceVisionnage_film::SequenceVisionnage_film(fs::path const& m_cheminFichier)
    {
        // (((([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2}))(_?))+)(\s(.+))?
        //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")(_?))";
     
        // (((([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2}))(_?))+)(\s(.+))?
        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 std::wstring dates_format = L"((" + date_year_month_day_format + L"|" + date_month_day_format + L"|" + date_day_format + L")" + stream_format;
     
        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 int dates_full_match_index_f = 0;
        //const int dates_date_year_month_day_year_index_f = dates_full_match_index + 3;
        //const int dates_date_year_month_day_month_index_f = dates_date_year_month_day_year_index + 1;
        //const int dates_date_year_month_day_day_index_f = dates_date_year_month_day_month_index + 1;
        //const int dates_date_month_day_month_index_f = dates_date_year_month_day_day_index + 1;
        //const int dates_date_month_day_day_index_f = dates_date_month_day_month_index + 1;
        //const int dates_date_day_day_index_f = dates_date_month_day_day_index + 1;
        //const int dates_someFlag_index_f = dates_date_day_day_index + 2;
     
        ///const std::wregex filename_format_rg{ L"(" + dates_format + L"+)" + stream_format };
        const std::wregex filename_format_rg{ L"(" + dates_format + L"+)" + stream_format };
     
        const int filename_dates_index = 0;
        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_someFlag_index = filename_date_day_day_index + 2;
        //const int filename_stream_index = filename_someFlag_index + 2;
        //const int filename_stream_index = filename_someFlag_index + 3;
        const int filename_stream_index = filename_someFlag_index + 3;
     
        auto nomFichier = m_cheminFichier.wstring();
     
        assert(nomFichier.length() > 0 && L"Nom de fichier Film vide");
    ...
    }
    Ok ou pas ?

    Merci

  16. #976
    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
    https://github.com/laurentbouleau/Exemple : Novembre 26 (23/11/2024)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void SequenceVisionnage::Print(bool isFirstSequence)
    {
        std::wstring wstr;
    ...
        long minutes = (m_duree_en_seconde % (60 * 60)) / 60;
        wstr += m_keyColor[1] + L" (" + m_valuesColor + std::to_wstring(m_duree_en_seconde / (60 * 60)) + m_keyColor[1] + m_espace3 + (minutes <= 1 ? m_labelMinuteSingulier : m_labelMinutePluriel) + L')' + m_valuesColor;
    ... 
        std::wcout << chiffre_et_point_ou_pas_str << wstr << duree_str << resume_str << L"\r\n";
    }
    Ok ou pas ?

    Merci

  17. #977
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 434
    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 434
    Par défaut
    https://github.com/laurentbouleau/Exemple : Novembre 24 (22/11/2024)
    Pas de solution !!!
    std::wstring SequenceVisionnage::calcul_Duree_affichage() const : duree_str !!!
    C'est chiant que la version Git que vous donnez n'utilise pas le code qui vous pose problème.
    On n'est toujours obligé de modifier au pif votre "Exemple.cpp" pour passer dans le code que vous indiquez.

    Si vous avez la flemme, pourquoi ne pas mettre tous les cas de tests dans un std::vector ???
    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> racines { L"Dr. STONE.[2019-2022 Crunchyroll].Manga" , 
        L"Azertyuiop - qsdfghjklm.[2021-2023 Netflix].Manga",
        L"Azertyuiop £££.[2024].Mini-série",
        L"Kaleidoscope.[2023 Netflix]",
        L"Seven Deadly Sins- Four Knights of the Apocalypse.[2023].Manga",
        L"Andor.[2022- Disney+]",
        L"Star Wars Rebels.[2014-2017 Disney+].Animation",
        L"Star Wars- The Clone wars.[2008-2020 Disney+].Animation",
        L"Shogun.[2024- Disney+]",
        L"Avatar 2 - la voie de l'eau.(2022-12-14)",
        L"Prey.(2022-08-05 Disney+)",
        L"Sous la Seine.(2024-06-05 Netflix)",
        L"Star Wars - Episode VII - Le réveil de la force.(2015-12-16)",
        L"Star Wars- The Clone Wars.(2008-08-27).Animation"
    };
     
    for (auto& racine : racines) {
     
        std::wcout << L"racine=[" << racine << L']' << std::endl;
     
        fs::path r = t + racine;
    ...
    }
    ...
    "Pas de solution", mais c'est quoi le problème !!!
    Exprimer le problème est toujours un bon moyen de le comprendre.
    Je suppute que c'est "l'affichage/calcul" des minutes.

    Vous n'avez même pas pris le temps de comprendre le code qu'on vous fournit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ...
        // Pourquoi l'affichages du 2ème titre est différent ???
    
        
        if (numero_sequence == 1)
        {
            long minutes = (m_duree_en_seconde/* % (60 * 60)*/) / 60;
            long secondes = m_duree_en_seconde % 60;
            duree_str += m_keyColor[1] + L" (" + m_valuesColor + std::to_wstring(minutes) + m_keyColor[1] + m_espace3 + (minutes <= 1 ? m_labelMinuteSingulier : m_labelMinutePluriel) + L')' + m_valuesColor;
        }
        else
        {
            duree_str += m_keyColor[1] + L" [" + m_valuesColor + std::to_wstring(numero_sequence) + m_keyColor[1] + L']' + m_valuesColor;
        }
    J'avais déjà signalé le problème en "strickant" ce code dans mon message du "17/11/2024, 20h41".
    Il sert à quoi ce "% (60 * 60)" ???
    Pour avoir la durée en minutes quand on l'a en secondes, il suffit de faire une division entière par 60.
    "m_duree_en_seconde" est un entier, "60" est un entier, l'opérateur "/" fait donc une division entière "automatiquement".

    void SequenceVisionnage:: Print(bool isFirstSequence) : chiffre_et_point_ou_pas_str
    Vos noms de fonctions toujours aussi abscons.
    En plus, vous utilisez un champ "m_numero" qui ne veut rien dire concrètement, qui n'est jamais correctement initialisé, et qui, je pense, doit être remplacer par l'utilisation du paramètre "isFirstSequence".
    Parce que la fonction "SequenceVisionnage:: Print_Titre_chiffre_et_point_ou_pas", elle est bien débile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SequenceVisionnage(const Episode& episode, const InfosVisionnage& info_vis) :
            m_episode{ episode }, m_titres{info_vis.m_titres}, m_streaming{info_vis.m_streaming},
            m_duree_en_seconde{ info_vis.m_duree * 60 }, m_resume{ info_vis.m_resume },
            m_DatesVisionnage{ info_vis.m_DatesVisionnage }
        {};
    Quelle est la question ???
    Si c'est pour le warning sur SequenceVisionnage, lisez le message.
    Vous avez encore un champ "m_duree" (sans le "_en_seconde") qui sert à rien. Dégagez-le.

    Le code suivant me pose question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_duree_en_seconde{ info_vis.m_duree * 60 }
    Code "logique" si "info_vis.m_duree" est une durée en minute (ce qui est très ambigüe).
    Après une rapide vérification "info_vis.m_duree" contient plutôt une durée en seconde.
    Corrigez le nom du champ "m_duree" de la classe InfosVisionnage en "m_duree_en_seconde".
    Puis remplacez l'initialisation du champ "m_duree_en_seconde" de SequenceVisionnage lors de l'appel du constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SequenceVisionnage(const Episode& episode, const InfosVisionnage& info_vis) :
            m_episode{ episode }, m_titres{info_vis.m_titres}, m_streaming{info_vis.m_streaming},
            m_duree_en_seconde{ info_vis.m_duree_en_seconde }, m_resume{ info_vis.m_resume },
            m_DatesVisionnage{ info_vis.m_DatesVisionnage }
        {};
    std::wstring SequenceVisionnage::uneFonctionQuiAfficheLaSequenceDeVisionnage(bool found) const
    void InfosVisionnage::Une_Fonction_De_La_Classe_InfosVisionnage(...)
    void SequenceVisionnage::Une_Fonction_De_La_Classe_SequenceVisionnage(...)
    void Episode::Une_Fonction_De_La_Classe_SequenceVisionnage_xxx(...)
    long long Episode::GetNumeroSequenceVisionnage(const SequenceVisionnage& sev_vis) const
    etc... ???
    C'est quoi la question, bordel !!!

    std::wstring SequenceVisionnage::uneFonctionQuiAfficheLaSequenceDeVisionnage(bool found) const
    Et je le répète, c'est quoi la différence entre "void SequenceVisionnage:: Print(bool isFirstSequence)" et "std::wstring SequenceVisionnage::uneFonctionQuiAfficheLaSequenceDeVisionnage(bool) const;" ???(BIS)
    (C'est quoi ce "std::wstring" en valeur de retour, putain !!!)
    J'ai mentionné ce nom de fonction dans un raisonnement pour vous faire comprendre qu'un simple changement de signature de la fonction "void SequenceVisionnage:: Print(bool isFirstSequence)" permet de gérer 2 formats d'affichage d'une "SequenceVisionnage" ; quand elle est la première affichée d'un épisode et quand elle ne l'est pas.
    Donc, comme vous avez déjà "corrigé" la signature de "SequenceVisionnage:: Print(bool isFirstSequence) const", vous devriez remplacer les appels à la fonction "SequenceVisionnage::uneFonctionQuiAfficheLaSequenceDeVisionnage(bool found) const" par des appel à la fonction "SequenceVisionnage:: Print(bool isFirstSequence) const" et supprimer cette fonction "SequenceVisionnage::uneFonctionQuiAfficheLaSequenceDeVisionnage(bool found) const".

    void InfosVisionnage::Une_Fonction_De_La_Classe_InfosVisionnage(...)
    Cette fonction était pour illustrer l'utilisation d'une fonction membre de la classe "InfosVisionnage" depuis une autre classe.
    Pourquoi n'a-t-elle pas encore "disparue" ??? Elle sert à quoi ???

    void SequenceVisionnage::Une_Fonction_De_La_Classe_SequenceVisionnage(...)
    Idem, pourquoi c'est encore là ???

    void Episode::Une_Fonction_De_La_Classe_SequenceVisionnage_xxx(...)
    C'est quoi cette fonction, bordel ???
    Une fonction "Une_Fonction_De_La_Classe_SequenceVisionnage" déclarée et définie dans la classe "Episode", vous voyez pas ne problème ???

    long long Episode::GetNumeroSequenceVisionnage(const SequenceVisionnage& sev_vis) const
    C'est quoi la question ???
    Si vous pouvez convertir le type de retour en "int" ou "long", ça serait plus logique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    bool SequenceVisionnage::Print_Titre_chiffre_et_point_ou_pas(long episode)
    {
        if (episode == 0)
            return false;
        return true;
    }
    Cette fonction est toujours aussi "con".
    On remplit son paramètre "episode" avec la valeur du champ "m_numero", qui n'est jamais "correctement" initialisé (toujours -1).
    Le rapport entre "episode" et le "numero" d'une séquence de visionnage ???
    "episode" ne sera jamais égale à 0.

    Pourquoi ce machin plutôt que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void SequenceVisionnage::Print(bool isFirstSequence)
    {
        std::wstring wstr;
        std::wstring chiffre_et_point_ou_pas_str{};
        std::wstring duree_str;
     
        if (isFirstSequence)
        {
            chiffre_et_point_ou_pas_str = std::to_wstring(m_episode.m_saison.m_numero) + m_keyColor[1] + L'x' + m_valuesColor + std::to_wstring(m_episode.m_numero) + m_keyColor[1] + L" : " + m_valuesColor;
        }
    ...
    }
    ???

    ===> Hors saison (exemple : Dr. STONE : 0 et pas 1?)
    Donc, -1 == Kaleidoscope et :
    C'est quoi la question ???
    C'est quoi ces horribles bidouilles avec ce champ "m_numero" à la con???
    Dans votre "conception", c'est la saison qui sait si c'est un "hors saison" via son champ "m_hors_saison".
    Donc, pour savoir dans une "SequenceVisionnage" si c'est un "episode" hors saison, faut juste demander au "bon" objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool estHorsSaison = m_episode.m_saison.m_hors_saison;
    Bonjour,

    https://github.com/laurentbouleau/Exemple : Novembre 25 (23/11/2024)

    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
    SequenceVisionnage_film::SequenceVisionnage_film(fs::path const& m_cheminFichier)
    {
        // (((([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2}))(_?))+)(\s(.+))?
        //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")(_?))";
     
        // (((([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2}))(_?))+)(\s(.+))?
        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 std::wstring dates_format = L"((" + date_year_month_day_format + L"|" + date_month_day_format + L"|" + date_day_format + L")" + stream_format;
     
        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 int dates_full_match_index_f = 0;
        //const int dates_date_year_month_day_year_index_f = dates_full_match_index + 3;
        //const int dates_date_year_month_day_month_index_f = dates_date_year_month_day_year_index + 1;
        //const int dates_date_year_month_day_day_index_f = dates_date_year_month_day_month_index + 1;
        //const int dates_date_month_day_month_index_f = dates_date_year_month_day_day_index + 1;
        //const int dates_date_month_day_day_index_f = dates_date_month_day_month_index + 1;
        //const int dates_date_day_day_index_f = dates_date_month_day_day_index + 1;
        //const int dates_someFlag_index_f = dates_date_day_day_index + 2;
     
        ///const std::wregex filename_format_rg{ L"(" + dates_format + L"+)" + stream_format };
        const std::wregex filename_format_rg{ L"(" + dates_format + L"+)" + stream_format };
     
        const int filename_dates_index = 0;
        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_someFlag_index = filename_date_day_day_index + 2;
        //const int filename_stream_index = filename_someFlag_index + 2;
        //const int filename_stream_index = filename_someFlag_index + 3;
        const int filename_stream_index = filename_someFlag_index + 3;
     
        auto nomFichier = m_cheminFichier.wstring();
     
        assert(nomFichier.length() > 0 && L"Nom de fichier Film vide");
    ...
    }
    Ok ou pas ?
    Je pense plutôt Ok, mais comme "Novembre 26 (23/11/2024)" a tout écrasé avec quasiment que des conneries, c'est maintenant un KO complet.
    Je comprends pas pourquoi vous galérez juste pour faire en sorte que des constantes, dont vous connaissez les valeurs via "https://regex101.com", soient définies les une par rapport aux autres.
    (virez moi ces lignes de code en commentaire, SACRE BLEU)

    https://github.com/laurentbouleau/Exemple : Novembre 26 (23/11/2024)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long minutes = (m_duree_en_seconde % (60 * 60)) / 60;
    Vous avez tout cassé juste parce que vous n'avez pas compris que le problème initial était ce " % (60 * 60)" à la con ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wstr += m_keyColor[1] + L" (" + m_valuesColor + std::to_wstring(m_duree_en_seconde / (60 * 60)) + m_keyColor[1] + m_espace3 + (minutes <= 1 ? m_labelMinuteSingulier : m_labelMinutePluriel) + L')' + m_valuesColor;
    C'est quoi ce "(60 * 60)", putain ???
    Vous voulez afficher le nombre de minutes ou d'heures, BORDEL !!!! ????

    P.S. : Je suis totalement découragé car vous défaites bien plus que vous ne progressez, il me semble.

  18. #978
    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
    https://github.com/laurentbouleau/Exemple : Novembre 27 (24/11/2024)

    (Kingsglaive- Final Fantasy XV : Acteurs de doublage (Voix locales).txt)

  19. #979
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 434
    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 434
    Par défaut
    Je comprends pas trop la "question".

    Pourquoi ne pas juste ajouter les lignes qui manquent ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Acteurs de doublage (Voix originales)
    Print_Avec(affichage_acteurs_de_doublage_voix_originales_actif, m_acteurs_de_doublage_voix_originales, L"Acteurs de doublage (Voix originales) :");
    // Acteurs de doublage (Voix locales)
    Print_Avec(affichage_acteurs_de_doublage_voix_locales_actif, m_acteurs_de_doublage_voix_locales, L"Acteurs de doublage (Voix locales) :");
     // Soundtracks
     Print_Soundtracks();

  20. #980
    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
    Bonsoir,

    https://github.com/laurentbouleau/Exemple : Novembre 28 (25/11/2024)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        std::vector<std::pair<std::wstring, std::wstring>> m_acteurs_de_doublage_voix_locales;
        std::vector<std::pair<std::wstring, std::wstring>> m_acteurs_de_doublage_voix_originales;
        ...
        std::vector<std::pair<std::wstring, std::wstring>> m_avec;
    Ok !

    Mais : Le chaton : https://www.b-lolo.fr/2024/11/25/jimie-et-moi/

    Ben oui

+ 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