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

    https://github.com/laurentbouleau/Exemple : Juin 02/06/2024

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void initialiser_Audiodescription(fs::path const& m_cheminFichier, std::wstring& m_ad)
    {
        auto nomFichier = m_cheminFichier.wstring();
        assert(nomFichier.length() > 0 && L"Nom de fichier vide");
        std::wstring ad = lire_fichierTxt(nomFichier);
        std::size_t pos = ad.find(L"Audiodescription");
        if (pos == std::wstring::npos)
            ;
        else
            ad = ad.substr(0, pos - 3);
        if (std::find(::Audiodescription.begin(), ::Audiodescription.end(), ad) != ::Audiodescription.end())
            m_ad = ad;
        assert((m_ad.size() != 0));
    }
    Ok !
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const std::wstring lire_fichierTxt(std::wstring const& nomFichier)
    {
        std::string contenuFichier{ u8"" };
        std::ifstream fichier{ nomFichier };
     
        contenuFichier = std::string(istreambuf_iterator<char>{fichier}, {});
     
        std::wstring_convert<codecvt_utf8<wchar_t>, wchar_t> convertiseur;
        std::wstring converti = convertiseur.from_bytes(contenuFichier);
        rtrim(converti);
        return converti;
    }
    Ok !

    Et (tous exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void Serie::initialiser_Creee_par(fs::path const& m_cheminFichier)
    { // Creee par
        auto nomFichier = m_cheminFichier.wstring();
        assert(nomFichier.length() > 0 && L"Nom de fichier vide");
        m_creee_par = lire_fichierTxt(nomFichier, { L"\n", L", " });
        assert((m_creee_par.size() != 0));
    }
    Ok !


    Par compter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const std::vector<std::pair<std::wstring, std::wstring>>lire_paireCleValeur_depuisFichierTxt(std::wstring const& nomFichier, std::wstring separeteur)
    {
    ...
    }
    const std::vector<std::wstring> lire_fichierTxt(std::wstring const& nomFichier, std::vector<std::wstring> separeteurs)
    {
    ...
    }
    const std::vector<std::wstring> lire_fichierTxt(std::wstring const& nomFichier, std::vector<std::wstring> separeteurs, bool f)
    {
    ...
    }
    Pas fini !!!

    Mais :
    Nom : Capture d’écran 2024-06-02 120604.png
Affichages : 108
Taille : 71,5 Ko
    ???

    Merci:

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 245
    Points
    12 245
    Par défaut
    Attention, vous recommencez à partir dans tous les sens.
    Commencez par mettre au point vos fonctions "bas niveau". => lire_fichierTxt

    Pour la fonction "initialiser_Audiodescription" pas de bug "systématique" mais assez fragile (valeur en dur, le "-3" sortie de nulle part, m_ dans les noms de paramètres, etc...) et, je trouve, peu clair.
    Cette fonction cherche à trouver la langue de l'audiodescription. Cela ne transparait nulle part.
    (Attention, si vous voulez utiliser des expressions régulières ici, la présence de cédilles et d'accents dans les valeurs possibles va rendre la chose complexe.)
    Si cette fonction n'a de sens que dans le contexte d'une série, vous devriez en faire une fonction membre de la classe Serie et plus une "fonction libre".

    Ok pour le code de la fonction "lire_fichierTxt", mais vous avez corrigé la version de "plus haut niveau".

    Pour preuve, vous pouvez utiliser une autre "version" de la fonction "lire_fichierTxt" pour factoriser le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::wstring lire_fichierTxt(std::wstring const& nomFichier)
    {
        return lire_fichierTxt(nomFichier, {})[0];
    }
    Pour moi, la version "std::wstring lire_fichierTxt(std::wstring const& nomFichier)" aurait dû être la fonction de plus bas niveau, ne faisant pas de découpage, mais comme les autres version de la fonction "lire_fichierTxt" le font, c'est elles qui deviennent les fonctions de bas niveau.
    Quand il y a plusieurs fonctions de même nom, c'est la fonction la plus polyvalente qui devient la fonction "de base". Les autres "versions" utilisant la fonction polyvalente.

    Vous devriez donc renommer les autres fonctions "lire_fichierTxt" en "lire_et_decouper_fichierTxt" par exemple.
    Si les nouvelles "lire_et_decouper_fichierTxt" utilise "lire_fichierTxt", vous la transformez en fonction de plus bas niveau par rapport aux fonctions "lire_et_decouper_fichierTxt".

    Pour la fonction "Serie::initialiser_Creee_par", je n'ai rien à redire.
    C'est au niveau des fonctions "lire_et_decouper_fichierTxt" qu'il faut vérifier que '\r' n'est pas utilisé comme séparateur.

    Par compter :
    ...
    Pas fini !!!
    Il y a des fonctions qui ne servent à rien dans le lot, à supprimer en priorité.
    En utilisant des appels à la fonction "lire_fichierTxt" (avec 1 seul paramètre) au lieu de faire du copier-coller de code, cela rendra votre code plus maintenable.
    La factorisation de votre code est une priorité.

    Pour l'erreur d'exécution, je n'ai pas la même (toujours le fait que vous n'utilisez pas forcément le code ou les données que vous publiez sous Github).
    Chez moi, le problème est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void Print_Titre_Original(const std::vector<std::wstring>& m_titre_original, bool affichage_titre_original_actif, std::vector<std::wstring>& keyColor, std::wstring& valuesColor)
    {
        if (affichage_titre_original_actif && m_titre_original.size() > 0)
        {
            std::wstring titre_original_str = keyColor[0] + L"Titre original : " + valuesColor + m_titre_original[0];
            if (m_titre_original[2] != L"")
            {
                titre_original_str += keyColor[1] + m_titre_original[1] + valuesColor;
                titre_original_str += m_titre_original[2];
            }
            titre_original_str += L"\r\n";
            std::wcout << titre_original_str;
        }
    }
    Parce que le champ "m_titre_original" a une taille de 1. Donc lire le 3ème éléments ("m_titre_original[2]"), ça plante.
    La solution, bin, c'est comme toujours, vérifier la taille du std::vector avant d'essayer d'y lire des données.
    Comment je le sais ?
    Avec le débogueur :
    Nom : developpez6.png
Affichages : 64
Taille : 186,1 Ko

    Pour votre cas, il faut correctement utiliser débugueur.
    Remarquez le rectangle vert dans la copie d'écran ci-avant.
    Vous voyez que ce n'est pas la ligne la plus haute qui est sélectionnée mais celle juste au-dessous.

    La copie d'écran que vous avez posté montre un problème d'allocation dans un composant de la STL, mais le problème n'est très vraisemblablement pas dans la STL elle-même mais dans le code qui l'appelle.
    Pour savoir qui appelle ce bout de code, il faut utiliser la pile d'appel des fonctions.
    Dans le débogueur, vous devez savoir maintenant où elle s'affiche.
    Dans cet affichage, la fonction "courante" est affichée tout en haut, la fonction qui l'a appelé est juste en dessous, et ainsi de suite.
    Pour voir donc la fonction qui a appelé la fonction de la STL où le problème a été détecté, il suffit donc de cliquer sur la ligne juste au-dessous de celle correspond à la fonction courante.
    Si vous tombez encore sur une fonction dans la STL, cliquez sur la ligne encore plus au-dessous, pour voir la fonction appelante de la fonction appelante.
    Et ainsi de suite, jusqu'à tomber sur une fonction "à vous" et utilisez à ce moment-là, la fenêtre "espion 1" pour voir pourquoi il y a une erreur.
    Avec un peu d'expérience vous verrez facilement les lignes de la pile d'appels qui correspond à votre code et pas à la STL.

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

    Plle des appels !!! Ok ! (1)

    Attention, vous recommencez à partir dans tous les sens.
    Commencez par mettre au point vos fonctions "bas niveau". => lire_fichierTxt

    Pour la fonction "initialiser_Audiodescription" pas de bug "systématique" mais assez fragile (valeur en dur, le "-3" sortie de nulle part, m_ dans les noms de paramètres, etc...) et, je trouve, peu clair.
    Cette fonction cherche à trouver la langue de l'audiodescription. Cela ne transparait nulle part.
    (Attention, si vous voulez utiliser des expressions régulières ici, la présence de cédilles et d'accents dans les valeurs possibles va rendre la chose complexe.)
    Si cette fonction n'a de sens que dans le contexte d'une série, vous devriez en faire une fonction membre de la classe Serie et plus une "fonction libre".

    Ok pour le code de la fonction "lire_fichierTxt", mais vous avez corrigé la version de "plus haut niveau".

    Pour preuve, vous pouvez utiliser une autre "version" de la fonction "lire_fichierTxt" pour factoriser le code.
    ...
    Pour moi, la version "std::wstring lire_fichierTxt(std::wstring const& nomFichier)" aurait dû être la fonction de plus bas niveau, ne faisant pas de découpage, mais comme les autres version de la fonction "lire_fichierTxt" le font, c'est elles qui deviennent les fonctions de bas niveau.
    Quand il y a plusieurs fonctions de même nom, c'est la fonction la plus polyvalente qui devient la fonction "de base". Les autres "versions" utilisant la fonction polyvalente.

    Vous devriez donc renommer les autres fonctions "lire_fichierTxt" en "lire_et_decouper_fichierTxt" par exemple.
    Si les nouvelles "lire_et_decouper_fichierTxt" utilise "lire_fichierTxt", vous la transformez en fonction de plus bas niveau par rapport aux fonctions "lire_et_decouper_fichierTxt".

    Pour la fonction "Serie::initialiser_Creee_par", je n'ai rien à redire.
    C'est au niveau des fonctions "lire_et_decouper_fichierTxt" qu'il faut vérifier que '\r' n'est pas utilisé comme séparateur.
    ...
    Il y a des fonctions qui ne servent à rien dans le lot, à supprimer en priorité.
    En utilisant des appels à la fonction "lire_fichierTxt" (avec 1 seul paramètre) au lieu de faire du copier-coller de code, cela rendra votre code plus maintenable.
    La factorisation de votre code est une priorité.
    Pas fini !!!

    ----------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void Print_Titre_Original(const std::vector<std::wstring>& m_titre_original, bool affichage_titre_original_actif, std::vector<std::wstring>& keyColor, std::wstring& valuesColor)
    {
        if (affichage_titre_original_actif && m_titre_original.size() > 0)
        {
            std::wstring titre_original_str = keyColor[0] + L"Titre original : " + valuesColor + m_titre_original[0];
            if (m_titre_original.size() > 3 && m_titre_original[2] != L"")
            {
                titre_original_str += keyColor[1] + m_titre_original[1] + valuesColor;
                titre_original_str += m_titre_original[2];
            }
            titre_original_str += L"\r\n";
            std::wcout << titre_original_str;
        }
    }
    Ok ou pas !
    Ou try... catch ???


    -------
    Mais : (1)
    Nom : Capture d’écran 2024-06-03 215400.png
Affichages : 94
Taille : 185,0 Ko
    ===> A droite, en bas !!! (2 : |->)

    Merci

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

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 245
    Points
    12 245
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (m_titre_original.size() > 3 && m_titre_original[2] != L"")
    Pourquoi 3 et pas 2 ???.
    ">", c'est un supérieur "strict".

    Ou try... catch ???
    Pourquoi faire ???

    ===> A droite, en bas !!! (2 : |->)
    Il faut encore descendre de 10 appels, pour voir la ligne dans la fonction "Serie::initialiser_Titre" qui appelle "mal" l'opérateur "+=" sur une std::wstring.

    Pour la version "Juin 03/06/2024" des sources.

    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::wstring lire_fichierTxt(std::wstring const& nomFichier)
    {
        return lire_fichierTxt(nomFichier, {})[0];
    }
    était une illustration du fait que des fonctions qui portent le même nom doivent utiliser la version la plus polyvalente.

    Vous avez décidé d'avoir une fonction "lire_fichierTxt" et une fonctions "lire_et_decouper_fichierTxt".
    La fonction de bas niveau, c'est "lire_fichierTxt" car elle ne fait qu'une chose.
    La fonction "lire_et_decouper_fichierTxt" n'est pas plus polyvalent que la fonction "lire_fichierTxt", elle fait des choses en plus.
    Donc la fonction "lire_et_decouper_fichierTxt" doit appeller la fonction "lire_fichierTxt".

    Sachant cela, il faut que la signature de vos fonctions reflète ce qu'elles font, même au niveau des paramètres qu'elles prennent.
    La fonction "lire_fichierTxt", n'a besoin que du nom du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::wstring lire_fichierTxt(std::wstring const& nomFichier)
    {
       ...
    }
    La fonction "lire_et_decouper_fichierTxt" a besoin à la fois du nom du fichier et des séparateurs, pour découper le contenu du fichier en ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::vector<std::wstring> lire_et_decouper_fichierTxt(std::wstring const& nomFichier, std::vector<std::wstring> separeteurs)
    {
    ...
        auto contenu_fichier = lire_fichierTxt(nomFichier);
    ...
    }
    Pourquoi avoir 3 versions de la fonction "lire_et_decouper_fichierTxt" ??? (C'est 2 de trop.)

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

    https://github.com/laurentbouleau/Exemple : Juin 04 (05/06/2024)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Vous avez décidé d'avoir une fonction "lire_fichierTxt" et une fonctions "lire_et_decouper_fichierTxt".
    La fonction de bas niveau, c'est "lire_fichierTxt" car elle ne fait qu'une chose.
    La fonction "lire_et_decouper_fichierTxt" n'est pas plus polyvalent que la fonction "lire_fichierTxt", elle fait des choses en plus.
    Donc la fonction "lire_et_decouper_fichierTxt" doit appeller la fonction "lire_fichierTxt".
    ...
    Pas fini !!!

    Mais :

    serie.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    struct InfosVisionnage
    {
     ...
        //std::wstring m_titre;
        //std::wstring m_deux_points;
        //std::wstring m_sous_titre;
        std::vector<std::wstring> m_titres;
    //    unsigned short int m_numero{ 1 };
        long m_duree{ -1 };
        //std::wstring m_phrases{ L"" };
        std::vector<std::wstring> m_resume;
    ...
    };
     
    struct SequenceVisionnage
    {
        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 }
        {};
    ...
        //bool m_fichier_pas_zero{ false };
        //std::wstring m_titre;
        //std::wstring m_deux_points;
        //std::wstring m_sous_titre;
        std::vector<std::wstring> m_titres;
        long m_duree_en_seconde{ -1 };
        //std::wstring m_phrases{ L"" };
        std::vector<std::wstring> m_resume;
    ...
    };
     
    struct Episode
    {
    ...
        std::wstring m_phrases{ L"" }; // Mince ! J'ai oublié !!!
    };
     
    struct Saison
    {
    ...
        std::pair<unsigned short int, std::vector<std::wstring>>saison;
        std::wstring m_titre;
    ...
    };
     
    class Serie
    {
    ...
        std::vector<std::wstring> m_titres;
        long m_duree{ -1 };
        std::vector<std::wstring> m_resume;
        std::vector<std::wstring> m_titres_originaux;
    ...
    };
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    InfosVisionnage::InfosVisionnage(const Saison& saison, fs::path const& m_cheminFichier) : m_saison{ saison }
    {
    ...
        t.erase(t.begin());
        //m_fichier_pas_zero = true;
        //m_numero = 1;
        initialiser_Duree(t[0]);
        t.erase(t.begin());
        m_resume = t;
    }
    ...
    void Saison::afficher(fs::path const& m_cheminFichier) // ???
    {
    ...
            //saison.second = lire_fichierTxt(m_cheminFichier.wstring());
            saison.second = lire_fichierTxt(m_cheminFichier.wstring(), { L"\n" });
    ...
    }
    ...
    void Serie::initialiser_Titre(fs::path const& m_cheminFichier, std::vector<std::wstring>& m_titre)
    { // Titre
    ...
        std::wregex titre_pattern{ L"(.+?)(\\s:\\s|:\\s|/|\\s-\\s)(.+)" };
        std::wsmatch match;
        if (std::regex_match(titre[0], match, titre_pattern))
        {
            m_titre.push_back(match[1]);
            if (match.length() > 2)
            {
                m_titre.push_back(match[2]);
            }
            if (match.length() > 3)
            {
                m_titre.push_back(match[3]);
            }
        }
        else
        {
            m_titre.push_back(titre[0]);
        }
        titre.erase(titre.begin());
        if (titre.size() > 0)
        {
            initialiser_Duree(titre[0]);
            titre.erase(titre.begin());
            if (titre.size() > 0)
                m_resume = titre;
        }
    }
    Donc :
    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
    void Saison::Print()
    {
    // ???
        wchar_t date_string[15];
        std::wcsftime(date_string, 15, L"%d/%m/%Y", &m_dossier.first);
        std::wstring wstr;
        wstr = date_string;
    //
    ...
        wstr = wstr.substr(0, 2) + keyColor[1] + L'/' + valuesColor + wstr.substr(3, 2) + keyColor[1] + L'/' + valuesColor + wstr.substr(6, 4);
        if (m_dossier.second != L"")
            wstr += keyColor[0] + m_dossier.second + valuesColor + L' ';
        if (m_titre != L"")
            wstr += keyColor[1] + L" : " + valuesColor + keyColor[0] + m_titre + valuesColor;
    
        wstr += keyColor[1] + L" : " + valuesColor;
    
        if (serie.m_resume != saison.second) // Pourquoi ?
        {
            for (auto s : saison.second)
                wstr += s;
        }
    
        wstr += L' ' + keyColor[1] + L'(' + valuesColor + std::to_wstring(saison.first) + keyColor[1] + L')' + valuesColor;
        wstr += L"\r\n";
        std::wcout << wstr;
    ...
    }
    Erreur (active) E0020 identificateur "serie" non défini Exemple D:\Work\Prg\CPP\Exemple\serie.cpp 1123
    Pouvez-vous corriger ? (serie.m_resume)

    Merci beaucoup

  7. #687
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    529
    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 : 529
    Points : 0
    Points
    0
    Par défaut
    Le même : (série et saison)
    Un jour comme les autres, Gerry Lane et sa famille se retrouvent coincés dans un embouteillage monstre sur leur trajet quotidien. Ancien enquêteur des Nations Unies, Lane comprend immédiatement que la situation est inhabituelle. Tandis que les hélicoptères de la police sillonnent le ciel et que les motards quadrillent les rues, la ville bascule dans le chaos...

    Les gens s’en prennent violemment les uns aux autres et un virus mortel semble se propager. Les êtres les plus pacifiques deviennent de redoutables ennemis. Or, les origines du fléau demeurent inconnues et le nombre de personnes infectées s’accroît tous les jours de manière exponentielle on parle désormais de pandémie. Lorsque des hordes d’humains contaminés écrasent les armées de la planète et renversent les gouvernements les uns après les autres, Lane n’a d’autre choix que de reprendre du service pour protéger sa famille il s’engage alors dans une quête effrénée à travers le monde pour identifier l’origine de cette menace et trouver un moyen d’enrayer sa propagation...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        if (serie.m_resume != saison.second)
    Alors :
    Bis

    Je suis crevé !

    Merci

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 245
    Points
    12 245
    Par défaut
    Pas fini !!!
    Vous devriez commencer par cela, pour ne pas avoir à corriger du code "mort".

    Pourquoi la classe "InfosVisionnage" a aussi peu de champ ???
    Elle devrait en avoir plein, car elle regroupe les informations nécessaires à la création d'un Episode et aussi nécessaires la création d'un une séquence de séances de visionnage.
    Mettez toutes les informations que vous pouvez récupérer dans les champs de la classe, même si vous ne vous en servez pas plus tard (ou pas encore).

    Pour la classe "SequenceVisionnage", c'est quoi "m_titres" ou "m_duree_en_seconde" ou "m_resume" dans le cadre d'une séquence de séance de visionnage ???
    C'est pas juste un épisode avec les dates où vous l'avez visionné ?
    S'il y a une durée, c'est pas la durée de l'épisode ?
    Ça serait la durée des séances de visionnage ???

    Vous devez avoir une vision claire de ce que chaque type d'objet doit avoir comme information pour être pratique à utiliser.
    Si vous avez besoin de la durée de l'épisode dans une séquence de séances de visionnages, c'est la durée de l'épisode, c'est donc dans l'épisode, pas dans la séquence.
    La classe "SequenceVisionnage" a un champ "m_episode" référençant l'épisode.
    Si une séquence de séance de visionnage de type "SequenceVisionnage" à besoin de la durée de l'épisode, c'est avec un code proche de celui qui suit qu'il pourra l'obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <s>this-></s>m_episode.m_duree
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::wstring m_phrases{ L"" }; // Mince ! J'ai oublié !!!
    Oublié quoi ?
    Ici, c'est juste du code pour initialiser la valeur par défaut du champ "m_phrases". Dans le cas où le constructeur d'"InfosVisionnage" n'arrive pas à récupérer cette information.

    Vérifiez que chaque champ a un sens clair dans le cadre de la classe qui le contient, SVP.

    Serie.cpp ...
    Questions précises, SVP.

    Vous bataillez avec des champs pas clairs. Au lieu de modifier vos fonctions avec du code peu clair. Faites le ménage dans les champs des classes, corrigez leurs noms, après, la correction du code sera grandement simplifié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if (serie.m_resume != saison.second)
    Alors :
    Bis
    Bis de quoi ???
    Je suppose que "serie" serait l'objet de type Serie que la variable "saison" de type Saison considère comme la série dont lui est une saison, non ?

    Mais pas de bol, saison n'est pas un objet de type Saison et la classe Saison n'a d'accès à la série dont il fait partie.

    Encore une fois, le nommage des champs/variable/fonction est important.
    Parce que je me suis "fait un film" qui ne colle pas à la réalité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::pair<unsigned short int, std::vector<std::wstring>>saison;
    C'est quoi ce champ de la classe Saison qui se nomme "saison" ?
    C'est quoi ce "second" de la paire ? Le résumé de l'épisode ???
    Pourquoi ne pas avoir un champ "m_numero" et "m_resume" qui contiennent ces information pour l'objet de type Saison ? ("m_numero" existe déjà)
    La classe Saison devrait avoir un champ de type "const& Serie" (m_serie par exemple) qui référence l'objet Serie dont il est une saison.
    Vous devriez passer en paramètre du constructeur de la classe "Serie" une référence à un objet "Serie". La liste d'initialisation du constructeur fera en sorte d'initialiser le champ "m_serie" avec le paramètre du constructeur.

    Avec ces modifications, un code comme celui qui suit aurait plus de "sens" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if (m_serie.m_resume != m_resume)
    Vous ne trouvez pas ?

    (Reste le problème de l'initialisation des champs m_numero et m_resume de l'objet de la classe Saison, mais le constructeur de la classe Saison devrait avoir de quoi les remplir, non ?)

    Avez-vous bien compris l'utilisation des champs dans un classe ?
    La potentielle différence entre "uneVariableSequenceVisionnage.m_duree" et "uneVariableEpisode.m_duree" ?
    etc...

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

  10. #690
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    529
    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 : 529
    Points : 0
    Points
    0
    Par défaut
    Le matin, mal dormir ! Je suis fatigué ! (Les Acouphènes)

    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
    struct Episode
    {
        const Saison& m_saison;
        Episode(InfosVisionnage const& info_vis) :m_saison{ info_vis.m_saison } {};
    
        void ajouter_SequenceVisionnage(const InfosVisionnage& info_vis);
    
        void Print();
        std::vector<SequenceVisionnage> m_liste_sequence_visionnages{};
    
        int m_numero{ -1 };
        long m_duree{ -1 };
        std::vector<std::wstring> m_resume;
    };
    
    struct Saison
    {
    public:
        const Serie& m_serie;
        //Saison() :m_serie; // ???
        Saison(std::filesystem::path const& m_cheminFichier);
        void afficher(std::filesystem::path const& m_cheminFichier);
        void ajouter_InfosVisionnage(SequenceVisionnage const& seq_vis);
    ...
    };
    Nom : Capture d’écran 2024-06-06 211904.png
Affichages : 56
Taille : 51,7 Ko
    Alors, pouvez-vous recommencer en faisant plus simple ?
    Pouvez-vous expliquer étape par étape ?

    Merci

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 245
    Points
    12 245
    Par défaut
    Vous postez des URL de page Web.
    Attention, une page Web n'a pas/plus grand-chose à voir avec un fichier txt.
    Si ces pages Web sont la source des données dans vos fichier texte, il faudra changer votre système.
    Si allociné dispose d'une API REST d'interrogation, je vous conseille d'utiliser celle-ci plutôt que le contenu de ces pages Web.

    Vos modifications montrent que vous avez compris pas mal de mes remarques. C'est cool.

    Donc Ok pour la création du champs "m_resume" dans la classe Episode, pour y stocker le résumé de l'épisode.
    Ok pour la création du champ "m_serie" dans la classe Saison, pour accéder à la série "contenant" la saison.

    Maintenant, faut juste initialiser correctement ces nouveaux champs.

    Le compilateur n'est pas content car le champ "m_serie" de la classe Saison n'est pas initialisé, ce qui est obligatoire, parce que c'est un champ de type référence.
    C'est même tout l'intérêt des champs de type référence, de forcer à correctement les initialiser.
    Le plus simple et logique, c'est de changer la signature du constructeur de la classe Saison :
    Dans serie.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Saison(std::filesystem::path const& m_cheminFichier, const Serie& serie);
    Dans serie.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Saison::Saison(fs::path const& m_cheminFichier, const Serie& serie) : m_serie{serie}
    Pour pouvoir utiliser la nouvelle version de ce constructeur, il faudra juste change la ligne 483 d'Exemple.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Saison saison(entry_serie,serie);
    Après, pour que la ligne de code de la forme qui suit compile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (m_serie.m_resume != m_resume)
    Il faut que la classe Saison est aussi un champ "m_resume", pour contenir le résumé de la saison, logiquement.
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct Saison
    {
    public:
        const Serie& m_serie;
        std::vector<std::wstring> m_resume;
        Saison(std::filesystem::path const& m_cheminFichier, const Serie& serie);
    ...
    }
    (A vous de voir comment correctement remplir ce champ "m_resume")

    La classe Serie a bien aussi un champ "m_resume", mais c'est un champ privé, invisible de l'extérieur de la classe.
    C'est une mauvaise pratique, mais, pour l'instant, je vous demanderais de transformer ce champ "m_resume" en champ publique.

    Après ces quelques modifications, votre code compilera.
    (Il ne fonctionnera pas très bien, mais il ne plantera pas)
    Il restera encore du travail sur l'initialisation des différents champs, mais le model objet/classe devrait permettre de facilement corriger les choses.

    Juste une remarque, dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (m_serie.m_resume != m_resume)
    On veut faire un truc si et seulement si le résumé de la saison est différent du résumé de la série, c'est ça ?

    Alors attention à l'opérateur "!=" utilisé. Je ne suis pas sûr qu'il comparera le contenu de chaque élément du std::vector et pas juste leur d'adresse mémoire.
    Faites des tests et regardez la documentation sur le sujet.

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

    Nom : Capture d’écran 2024-06-07 212111.png
Affichages : 51
Taille : 85,8 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Saison::Saison(fs::path const& m_cheminFichier)
    Saison::Saison(fs::path const& m_cheminFichier, const Serie& serie) : m_serie{ serie }
    {
        auto nomDossier = m_cheminFichier.filename().wstring();
    ...
    }
    (Complexe René-Tys : La musculation : fatigué !!!)

    Merci

  13. #693
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    529
    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 : 529
    Points : 0
    Points
    0
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct Saison
    {
    public:
        const Serie& m_serie;
         //Saison() :m_serie; // ???
        //Saison(std::filesystem::path const& m_cheminFichier);
        Saison(std::filesystem::path const& cheminFichier, const Serie& serie);
    ...
        std::pair<unsigned short int, std::vector<std::wstring>>saison;
        std::vector<std::wstring>& m_resume = saison.second;
    ...
    };
    ???

    Exemple : saison 1
    4.txt
    blablabla....

    Merci

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

    Ok ! Ça marche ! Mais, pas bien !!!

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 245
    Points
    12 245
    Par défaut
    Normal, il y a pas mal de "petites" erreurs, et je suis pas sûr que vos données soient "bonne".

    Vous avez corrigé votre code, ok, mais pouvez-vous présenter votre code ici, ou mettre à jour le dépôt Git ?

    Ça peut être formateur pour d'autres, c'est l'intérêt des forum.

    Moi, je pencherais pour un nom de classe mal orthographié ou "mal ou pas" déclaré.

    Utilisez le débugueur et votre esprit de déduction pour trouver les sources du premier problème.

    Faites les corrections de bugs 1 par 1.
    Souvent, en corrigeant un bug, beaucoup d'autres anomalies disparaissent.

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

    https://github.com/laurentbouleau/Exemple : Juin 05 (08/06/2024)

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 245
    Points
    12 245
    Par défaut
    Attention, ligne 64 de serie.h :
    ligne 209 de serie.h :
    Faut vous décider, soit c'est une classe soit c'est une structure (je sais, ça change pas grand-chose, mais ça évite des warning qui peuvent cacher des choses importantes.)

    Après, votre programme ne plante pas et affiche des choses qui ne me semblent pas "fausses", à première vue.
    C'est quoi le problème, SVP ?
    (A part que vous n'avez pas suivi mes conseils et juste patché les trucs qui empêchaient de compiler ou qui faisait planter à l'exécution. Un programme qui plante, c'est mieux qu'un programme qui fait n'importe quoi.)

    Votre code est complexe, peu évident, mais c'est peut-être votre "architecture de données" qui veut ça. Mais quand c'est possible, simplifiez votre code et rendez-le plus "transparent".
    Correctement nommer les choses, c'est primordial pour la "transparence".

  18. #698
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Avril 2021
    Messages
    529
    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 : 529
    Points : 0
    Points
    0
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    struct Serie;
    ...
    class Serie
    ...
    Ah ! Oui, c'est vrai !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Après, votre programme ne plante pas et affiche des choses qui ne me semblent pas "fausses", à première vue.
    C'est quoi le problème, SVP ?
    (A part que vous n'avez pas suivi mes conseils et juste patché les trucs qui empêchaient de compiler ou qui faisait planter à l'exécution. Un programme qui plante, c'est mieux qu'un programme qui fait n'importe quoi.)
    Ok !

    Mais :

    You ===> 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
    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
    const int Serie::afficher_dossier(std::wstring const& t)
    {
    #if Serie_afficher_ == true
        B.Ok_T(L"const int Serie::afficher_dossier(" + t + L") :");
    #endif
     
        if (affichage_titre_actif == false)
        {
    #if Serie_afficher_dossier_ == true
            B.Ok_W(L"{" + t + L'}');
     
    #endif
            int i = 0;
            int tm_year = 0, tm_mon = 0, tm_mday = 0;
            std::wstring date = L"";
            std::wstring t2;
            std::size_t idx, idx2 = 0;
            idx = t.find(L".[", 0);
            t2 = t.substr(0, idx);
            i = ::afficher_Titre(t2, titre, affichage_titre_actif);
            Titre__ = t2;
            idx = t.find_last_of(L"[");
            idx2 = t.find_last_of(L"]");
            if (idx2 - idx - 1 == 0)
                return -1;
            idx2--;
            if (!(t.at(idx2) == L' ' || t.at(idx2) == L'-' ||
                t.at(idx2) == L'0' || t.at(idx2) == L'1' || t.at(idx2) == L'2' || t.at(idx2) == L'3' || t.at(idx2) == L'4' ||
                t.at(idx2) == L'5' || t.at(idx2) == L'6' || t.at(idx2) == L'7' || t.at(idx2) == L'8' || t.at(idx2) == L'9'))
            { // Sur
                std::size_t idx3;
                idx3 = t.find_first_of(L" ", idx);
                idx3++;
                t2 = t.substr(idx3, idx2 - idx3 + 1);
                afficher_Sur(t2);
                if (sur == t2)
                {
    #if Serie_afficher_dossier_ == true
                    B.Ok_W(L"Pas de Sur={" + t2 + L"} !!!");
    #endif
                    E.afficher_X(-1, L"Pas de Sur={" + t2 + L"} !!!", L"Erreur (" + t2 + L") !!!");
                    return EXIT_FAILURE;
                }
                else
                {
                    sur = t2;
                }
                if (sur == L"Netflix")
                    netflix_ok_ou_non = true;
                std::wcout << L"Sur={" << sur << L"}" << std::endl;
                idx2 = idx3 - 2;
            }
            idx++;
            if (t.at(idx2) == L' ' || t.at(idx2) == L'-' ||
                t.at(idx2) == L'0' || t.at(idx2) == L'1' || t.at(idx2) == L'2' || t.at(idx2) == L'3' || t.at(idx2) == L'4' ||
                t.at(idx2) == L'5' || t.at(idx2) == L'6' || t.at(idx2) == L'7' || t.at(idx2) == L'8' || t.at(idx2) == L'9')
            { // Date
                t2 = t.substr(idx, idx2 - idx + 1);
                i = afficher_Date(t2);
    #if Serie_afficher_dossier_ == 1
                B.Ok_W(L"afficher_Date={" + t2 + L'}');
    #endif
            }
            idx = t.find(L"].");
            if (idx != std::wstring::npos)
            { // Sous_Genre
                idx += 2;
                sous_genre = t.substr(idx);
                //wstring sous_genre = L"";
                i = afficher_Sous_Genre(sous_genre);
                affichage_sous_genre_actif = true;
            }
            D_I = 0;
    #if Serie_afficher_dossier_ == true
            //wcout << L"    " << L"t={" << t << L"}" << endl;
            B.Ok_W(L"t={" + t + L"}");
    #endif
        }
        else
        {
            std::size_t pos;
            pos = t.length();
            pos--;
            std::wstring t2 = t.substr(0, pos);
            pos = t2.find_last_of(L"\\");
            t2 = t2.substr(++pos);
            D[D_I] = t;
            //
            if (
                (t2[4] == L'-' && t2[7] == L'-' /*&& pos == 11*/  /* && t[11] == wstring::npos*/)
                ||
                (t2[4] == std::wstring::npos)
                ||
                t2 == L"Nouveau dossier"
                )
                // XXXX-XX-XX ou xxxx ou "Nouveau dossier"
            {
                int i = afficher_Diffusee(D_I, t2);
                if (Date_Diffusee_a_partir_de_[D_I] == true)
                {
    #if Serie_afficher_dossier_ == 1
                    //wcout << L"    " << L"Date_Diffusee_a_partir_de_[" << Date_Diffusee_a_partir_de_[D_I] << L"] = ok !" << endl;
                    B.Ok_W(L"Date_Diffusee_a_partir_de_={" + to_wstring(Date_Diffusee_a_partir_de_[D_I]) + L"} = ok !");
    #endif
                    //return 0;
                }
            }
            else
            {
    #if Serie_afficher_dossier_ == 1
                //wcout << L"    " << L"Date_Diffusee_a_partir_de_[" << Date_Diffusee_a_partir_de_[D_I] << L"] = érreur !!!" << endl;
                B.Ok_W(L"Date_Diffusee_a_partir_de_[" + to_wstring(Date_Diffusee_a_partir_de_[D_I]) + L"} = erreur !!!");
    #endif
                E.afficher_X(-1, t2, t + L" erreur !!!");
                return EXIT_FAILURE;
            }
            //D_J[_X2_]
            //wcout << L"*****" << endl;
    #if Serie_afficher_dossier_ == 1
            //wcout << L"-----> D[" << D[D_I] << L"]=" << t << endl;
            B.Ok_W(L"-----> D[" + D[D_I] + L"]=" + t2);
    #endif
            D_J[D_I] = 0;
            D_I++;
        }
    #if Serie_afficher_dossier_ == true
        //wcout << B_T << L"const int Serie::afficher(" << t << L") : Ok !" << B_t << endl;
        B.Ok_T(L"const int Serie::afficher_dossier() : Ok !");
    #endif
        return EXIT_SUCCESS;
    }
    Exemple ===> exemple.cpp ???
    (serie.h ===> void initialiser_Dossier(std::filesystem::path const& m_cheminFichier); ???
    Comme sais ? (la date ou les dates, sur...
    film_serie.cpp ===> void initialiser_Sous_Genre(std::wstring& m_s_g)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const void Serie::Print_Titre()
    {
    ...
            // Note
            //wstr = afficher_OK_Note();
    ...
            std::wcout << titres_str;
        }
    }
    )) : ok ou pas ? ???

    Après, va si !!!

    Je suis crevé !!!

    Merci

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

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 245
    Points
    12 245
    Par défaut
    You ===> serie.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const int Serie::afficher_dossier(std::wstring const& t)
    {
    ...
    }
    Exemple ===> exemple.cpp ???
    (serie.h ===> void initialiser_Dossier(std::filesystem::path const& m_cheminFichier); ???
    Même la "nouvelle" version de You ("Mars 1") ne fonctionne pas car il manque des données, ou elles ne sont pas au bon endroit.

    Donc, si vous voulez montrer des spécificités de formatage des affichages spécifiques à cette version (qui utilise massivement des variables globales, dans mes souvenirs), il faudrait que vous nous montriez des copies d'écrans ou rendre le projet dans le dépôt "You" opérationnel.

    Pouvez-vous nous expliquer ce qui "ne va pas" dans l'affichage actuel du projet "Exemple" (Il y a beaucoup de chose, mais c'est vous qui devez fixer les priorités) ?

    Pour la conversion de "Serie::afficher_dossier" de You vers Exemple, cette fonction fait tellement de choses à la fois et tellement fragile que cela n'aura aucun intérêt de faire ce transfert.
    C'est le transfert inverse, remplacer cette usine à gaz de "Serie::afficher_dossier" par des fonctions plus simples et maintenable du projet "Exemple". Mais le projet Exemple n'est pas encore mûr pour faire ce transfert soit simple.
    Commencez par assainir le projet Exemple en simplifiant le code, ET EN NOMMANT CORRECTEMENT LES CHOSES.
    Et "initialiser_Dossier", c'est un très mauvais nom.

    Comme sais ? (la date ou les dates, sur...
    De quelles dates on parles ?
    Les seules dates dans le projet "Exemple", ce sont les dates dans les séquences de visionnages.
    Quelles difficultées avez-vous à implémenter la fonction "SequenceVisionnage:: Print" pour qu'un objet "SequenceVisionnage", dont les dates de visionnages sont rangées dans la champ "m_DatesVisionnage" ?

    film_serie.cpp ===> void initialiser_Sous_Genre(std::wstring& m_s_g)
    Quel est la question ?
    "initialiser_Sous_Genre" utilise un tableau global de valeur de type chaine de caractère, c'est fragile.
    Pourquoi pas une expression régulière couplée à une énumération (et un fichier de ressource pour les labels de sortie) ?
    Le plus important, c'est de facilement étendre des listes de valeurs possibles.
    Avec votre approche actuelle, c'est "simple" mais vous pouvez rien faire "avec", même pas afficher sa valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const void Serie::Print_Titre()
    {
    ...
            // Note
            //wstr = afficher_OK_Note();
    ...
            std::wcout << titres_str;
        }
    }
    )) : ok ou pas ? ???
    Pas Ok, "Print_Titre" ne doit afficher que le titre, point barre.

    Donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void Serie::Print_Titre()
    {
            std::wcout << m_titre;
    }

+ 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