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. #581
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    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 074
    Points : 12 123
    Points
    12 123
    Par défaut
    Ce fichier ne correspond à rien. Je n'ai pas utilisé ce type de nom de fichier.
    Pouvez-vous m'indiquer ce qui ne va pas dans le nom de fichier "1x1.2021-07-16_08-01_2024-03-22_24_.txt" ?
    J'ai l'impression que ce nom de fichier est "conforme", non ?

    Prenez le temps de faire chaque action.

    Mais il faudra toutes les faire pour que votre projet recompile à nouveau si vous utilisez le bout de code que j'ai posté.

    Mais vous pouvez créer la classe "SequenceVisionnage" pour commencer "doucement".

  2. #582
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

    Pouvez-vous m'indiquer ce qui ne va pas dans le nom de fichier "1x1.2021-07-16_08-01_2024-03-22_24_.txt" ?
    J'ai l'impression que ce nom de fichier est "conforme", non ?
    Ben non !

    Parce que :
    Nom : Capture d’écran 2024-04-03 201600.png
Affichages : 154
Taille : 20,4 Ko
    Taille : 1 Ko ou 0 Ko

    1x1.2021-07-16_08-01_.txt
    1. La phrase : verbre
    148Min
    À la mort du duc d'Halstead, son second fils hérite de tout son patrimoine : son titre, sa maison et ses terres, mais aussi une montagne d'ennuis.
    1x1.2024-03-22_.txt
    L""
    1x1.2024-03-24.txt
    L""
    1x2.2021-07-18_18_18 France 5.txt
    2. Tackle Tommy: woo woo
    63 min
    Les aristos et leur garde-chasse traquent une nouvelle sorte de proie. Susie embauche de l'aide pour faire le ménage, et le manoir d'Halstead reçoit une sacrée visite.
    Etc...

    Ou :
    The Walking Dead.[2010-2022]
    2019-12-06
    10x01.2021-05-01.txt
    1. Les limites franchies
    52 min
    Rien ne vaut un entraînement pour souder une équipe face aux rôdeurs. Mais les choses se gâtent quand des débris spatiaux attirent les survivants en territoire ennemi.
    10x01.2022-02-05.txt
    L""
    Etc...
    The Walking Dead.10 :

    Prenez le temps de faire chaque action.
    Ok !
    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    struct Saison_Episode
    {
        friend struct Episode;
        std::wstring titre;
        std::wstring deux_points;
        std::wstring sous_titre;
        unsigned short int numero;
    };
     
    struct Episode
    {
        Episode(std::filesystem::path const& cheminFichier);
        struct Saison;
        friend Saison_Episode;;
    ...
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct DateRecord
    {
        std::tm date{ 0 };
        bool someFlag{ false };
    };
    Peux être ou pas !
    Bien sûr : Saison_Episode ou autre ???
    Plus simple ou pas ?

    Mais il faudra toutes les faire pour que votre projet recompile à nouveau si vous utilisez le bout de code que j'ai posté.
    Ah ! Ok !

    Mais vous pouvez créer la classe "SequenceVisionnage" pour commencer "doucement".
    Ok ! Noté !

    Merci beaucoup

  3. #583
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    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 074
    Points : 12 123
    Points
    12 123
    Par défaut
    Pouvez-vous m'indiquer ce qui ne va pas dans le nom de fichier "1x1.2021-07-16_08-01_2024-03-22_24_.txt" ?
    J'ai l'impression que ce nom de fichier est "conforme", non ?
    Ben non !
    Je sais que ce n'est pas un fichier que vous avez mis dans votre de test, mais SI il existe dans le répertoire, il sera bien interprété comme un nom de fichier valide, non ?
    Sinon, pourquoi il ne serait pas valide ?

    Mais maintenant que vous avez mentionné la notion de "séquence de séance de visionnage", on peut distinguer les 2 cas :

    Celui avec les 3 fichiers :
    1x1.2021-07-16_08-01_.txt
    1x1.2024-03-22_.txt
    1x1.2024-03-24.txt
    Qui correspond à 3 séquences de séance de visionnage du même épisode.
    La première séquence correspond à une séquence de séances compris entre le "2021-07-16" et le "2021-08-01"
    La seconde séquence correspond à une séquence de séances le "2024-03-22" (donc peut-être une séquence de 1 séance ? ou plusieurs séances le même jour ?), mais on reprend le visionnage du début, c'est ça ?
    La troisième séquence correspond à une séquence de séances le "2024-03-24" (donc peut-être une séquence de 1 séance ? ou plusieurs séances le même jour ?), mais on reprend le visionnage du début, c'est ça ?

    Celui avec un seul fichiers "1x1.2021-07-16_08-01_2024-03-22_24_.txt" correspondrait à UNE seule séquence de séance de visionnage qui s'étalerait sur près de 3 ans !!!

    Et dans ce cas, effectivement, les 2 cas ne correspondraient pas à la même situation/mêmes données.

    Ai-je bien compris la situation ???

    Pour la classe/structure "Saison_Episode", comme je vous l'ai déjà dit, je ne comprends pas ce que cette classe est sensée représentée.
    Je ne vois pas son utilité, donc je la dégagerai. Mais si vous avez pensé à la créer, c'est que vous aviez une idée derrière la tête, non ?
    Alors laquelle ?
    Sinon, bin, on dégage (moins de code, moins de bugs)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct Episode
    {
        Episode(std::filesystem::path const& cheminFichier);
        struct Saison;
        friend Saison_Episode;;
    ...
    Pour cette classe Episode, si j'ai bien compris le rôle de chaque fichier ".txt", vous ne pouvez pas créer un épisode (avec tous ces champs correctement initialisés) juste avec le chemin vers un fichier "_x_....txt".
    Car il vous faut plus d'informations pour savoir si le fichier correspond à un nouvel épisode à créer ou à une nouvelle séquence de séances de visionnage d'un épisode que vous avez déjà créé au sein d'une saison.

    Dans ce cas, le constructeur "Episode(std::filesystem::path const& cheminFichier);" n'est plus pertinent.
    Il faudrait le remplacer par un constructeur qui prendrait en paramètre un type de données plus pertinent.
    Comme indiqué dans mon message du "28/03/2024, 19h53", il serait peut-être plus judicieux de passer le chemin du fichier au constructeur d'une classe "SequenceVisionnage".
    L'instance de l'objet de type "SequenceVisionnage" pourrait être un argument pertinent pour le constructeur de la classe Episode.
    On est d'accord que si vous n'avez pas un fichier ".txt" d'une séquence de séance de visionnage, c'est comme si l'épisode n'existait pas, OK ?
    Dans ce cas, on peut remplacer la signature du constructeur d'Episode par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct Episode
    {
        Episode(SequenceVisionnage const& seq_vis);
    Comme un Episode ne doit pas contenir une "Saison" mais être contenu dans une Saison, le champ "Saison" dans la classe Episode doit disparaitre.
    Si vous avez besoin d'accéder à la saison en partant d'un épisode, on pourra voir des mécanismes pour le faire, plus tard.
    Pareil pour "friend Saison_Episode", ça dégage, car "Saison_Episode" ne sert à rien.

    Le nom du type "DateRecord" indique ce que c'est, mais pas à quoi il sert. C'est pas forcement l'idéal mais comme il peut, peut-être, servir à plusieurs usages différents, vous pouvez vraisemblablement vous en servir comme base à un alias de type :
    https://en.cppreference.com/w/cpp/language/type_alias
    Donc un truc comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using DateVisionnage = DateRecord
    Permettrait d'utiliser le type "DateVisionnage" dans la classe "SequenceVisionnage", par exemple, et de vous servir d'un autre alias sur ce type "DateRecord" pour stocker une "date + someFlag" qui correspondrait à autre chose qu'une date de visionnage ailleurs dans le projet.

    Mais commencez par créer la classe "SequenceVisionnage" pour commencer "doucement".

  4. #584
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

    Attention :

    1x1.2021-07-16_08-01_.txt
    égal :
    1x1 : La phrase : verbre (148min) : 16/07/2021 et 01/08/2021 [pas-à-pas] (à suivre)
    À la mort du duc d'Halstead, son second fils hérite de tout son patrimoine : son titre, sa maison et ses terres, mais aussi une montagne d'ennuis.
    Merci

  5. #585
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

    https://github.com/laurentbouleau/Exemple : Avril 01
    Ok !

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

    À-propos :

    https://www.b-lolo.fr/

    https://matomo.org/ : Gratuit
    Mais : Extensions :

    Matomo Analytics - Statistiques éthiques. Observations puissantes : marche pas !!! Avant, oui !!!
    Alors :
    Connect Matomo !!! Tant pis !!!

    Et vous ?

    Et :
    Archives
    mars 2024
    février 2024
    janvier 2024
    ...
    Ben non !!!

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

    Je suis fatigué

    Merci

  6. #586
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    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 074
    Points : 12 123
    Points
    12 123
    Par défaut
    À-propos :

    https://www.b-lolo.fr/

    https://matomo.org/ : Gratuit
    Mais : Extensions :

    Matomo Analytics - Statistiques éthiques. Observations puissantes : marche pas !!! Avant, oui !!!
    Alors :
    Connect Matomo !!! Tant pis !!!

    Et vous ?
    Matomo Analytics ne semble pas gratuit, juste le test est gratuit.
    C'est pas juste la fin de la période de Test ?

    Ok.

    Maintenant, in faut transférer de la classe "Episode" vers la classe "SequenceVisionnage" les champs qui sont associés à une séquence de visionnage et non à un épisode comme :
    - std::filesystem::path m_cheminFichier;
    - std::vector<DateRecord> dates_de_visionnage{ 0 };
    Changez le nom des champs pour qu'ils soient "logiques" dans leur nouveau contexte comme le champ "dates_de_visionnage" d'un épisode deviendrait logiquement un champ "m_dates" dans une "SequenceVisionnage".

    Les fichiers de la forme "numéroSaisonxNuméroEpisode.{listeDeDates}.txt" contiennent à la fois des informations sur l'épisode mais aussi des informations sur une séquence de séances de visionnages.
    Vous ne devriez donc pas faire un constructeur d'Episode qui prenne un "std::filesystem::path" en paramètre, ni créer un constructeur de "SequenceVisionnage" qui prendrait en paramètre aussi un "std::filesystem::path".
    Je vous conseille de gérer les informations contenues dans le nom du fichier et dans le corps du fichier dans une classe dédiées supplémentaires : "InfosVisionnage", par exemple.
    Vous y ajouterez des champs pour y stocker les informations glanées dans le nom et le contenu du fichier. (m_NumeroSaison, m_NumeroEpisode, ..., m_Duree, ..., m_DatesVisionnage, ...).
    Un constructeur de "InfosVisionnage" qui prendrait en paramètre un "std::filesystem::path".
    Il faudra transférer une grande partie du code du constructeur d'Episode, vers le constructeur de "InfosVisionnage".
    Le constructeur de "InfosVisionnage" appellera vraisemblablement le constructeur de la classe "SequenceVisionnage" pour stocker les informations associées dans un champ de type "SequenceVisionnage".

    Le constructeur d'Episode prendra donc en paramètre une "InfosVisionnage" pour initialiser ses champs.
    Il pourra utiliser le champ de type "SequenceVisionnage" contenu dans "InfosVisionnage" pour initialiser un champ qui listera toutes les séquences de séances de visionnage de l'épisode.

    Une fois cette nouvelle classe avec le code transféré, vous pourrez changer les lignes 694 à 710 de 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
            if (
                (nomFichier[0] == L'1' || nomFichier[0] == L'2' || nomFichier[0] == L'3' || nomFichier[0] == L'4' || nomFichier[0] == L'5' || nomFichier[0] == L'6' || nomFichier[0] == L'7' || nomFichier[0] == L'8' || nomFichier[0] == L'9')
                && nomFichier[1] == L'x'
                )
            {
                Creer_Episode(cheminFichier);
                return;
            }
            if (
                (nomFichier[0] == L'1' || nomFichier[0] == L'2' || nomFichier[0] == L'3' || nomFichier[0] == L'4' || nomFichier[0] == L'5' || nomFichier[0] == L'6' || nomFichier[0] == L'7' || nomFichier[0] == L'8' || nomFichier[0] == L'9')
                && (std::isdigit(nomFichier[1]))
                && nomFichier[2] == L'x'
                )
            {
                Creer_Episode(cheminFichier);
                return;
            }
    (Pourquoi la fonction se nomme "void Saison::afficher_Fichier", MORT BLEU !!!)
    par un code bien plus lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if(std::regex_match(nomFichier, std::wregex{L"([[:digit:]]{1,2})x(.)+"}))
    {
        InfosVisionnage info_vis{cheminFichier};
     
        if(m_liste_episodes.existe(info_vis.numero_episode))
        {
            m_liste_episodes[info_vis.numero_episode].AjouterInfosVisionnage(info_vis);
        }
        else
        {
            m_liste_episodes[info_vis.numero_episode] = Creer_Episode(info_vis);
        }
    }
    Il faudra faire quelques aménagements dans les classes pour que ce code "fonctionne".

    Le code d'affichage d'un épisode devrait être revu pour qu'il utilise correctement la liste des séquences de séances d'affichage.

  7. #587
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

    Thunderbird : pas de message !!! forum@redaction-developpez.com ??? 2 fois ???

    Matomo Analytics ne semble pas gratuit, juste le test est gratuit.
    C'est pas juste la fin de la période de Test ?
    ...
    Le code d'affichage d'un épisode devrait être revu pour qu'il utilise correctement la liste des séquences de séances d'affichage.
    Pas de message ? comprendre pas ?
    Pourquoi ???

    Sinon :
    https://github.com/laurentbouleau/Exemple : Avril 02

    Et : (serie)
    void afficher_Chaine(std::filesystem::path const& cheminFichier); et void Print_Chaine();
    vert !
    Pourquoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Serie
    {
    ...
        void afficher_Chaine(std::filesystem::path const& cheminFichier);
    ...
        void Print_Chaine();
    };
    Et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void Serie::afficher_Fichier(fs::path const& cheminFichier)
    ...
    const void Serie::Print_Episodes(Saison saison)
    ...
    const void Serie::Print_Saison(Saison saison)
    ...
    const void Serie::Print_Saisons()
    Pourquoi ?

    Je suis crevé !!!

    Merci d'avance

  8. #588
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    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 074
    Points : 12 123
    Points
    12 123
    Par défaut
    C'est l'essai de la version Cloud qui est gratuite.
    Pour la version "On-Premise", c'est à vous de vous démerder.
    https://matomo.org/pricing/

    Le code d'affichage d'un épisode devrait être revu pour qu'il utilise correctement la liste des séquences de séances d'affichage.
    Pas de message ? comprendre pas ?
    Pourquoi ???
    Quelle est la question ?

    Pour plus d'explication sur ma dernière phrase "Le code d'affichage d'un épisode ... d'affichage", c'est qu'il faut adapter la fonction d'affichage d'un épisode (qui ne fait que de l'affichage, comme le fait la fonction Print, enfin).
    Votre code de la fonction "Episode:rint()" utilise très maladroitement des "flags/drapeaux" comme le champ "numero" pour avoir un affichage différemment un "l'épisode/première séquence de séances de visualisation" des autres séquences.
    C'est très complexe et très très fragile (et ça marche pas avec votre implémentation "naïve").
    En ajoutant la classe "SequenceVisionnage" et en ne mettant directement dans un épisode que les informations sur l'épisode, le code de "Episode:: Print()" sera beaucoup plus simple (et correcte) car les informations sur les séquences de séances de visionnage seront dans un champ dédié.
    Le champ de Episode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<DateRecord> dates_de_visionnage{ 0 };
    devra être remplacer par un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<SequenceVisionnage> m_liste_visionnages{ 0 };
    Je pense qu'en reprenant le code de "Episode:: Print()" depuis le début, votre code devrait ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void Episode::Print()
    {
        PrintData();
        for (auto vis : m_liste_visionnages)
        {
            vis.Print();
        }
    }
    A vous de voir comment implémenter la fonction "PrintData()", mais ça sera pas très compliqué (si vous ne collez pas des "numero" à droite à gauche).
    (Si des données de la première séquence de visionnage sont nécessaire dans cette partie de l'affichage ( PrintData ), on avisera, mais ça sera pas bien compliqué (et toujours sans ce drapeau "numero" à la c.. ).

    Actuellement l'affichage est un peu foireux parce que vous ne renseignez plus correctement le champ "dates_de_visionnage" (mais il doit disparaitre de toutes façons).
    En renseignant correctement le futur champ "m_liste_visionnages", tout sera plus simple.

    Vous avez plutôt bien implémenté les fonctions de la classe "SequenceVisionnage". (transfert du code en particulier)
    Mais suite aux informations communiquées par la suite, j'ai indiqué qu'il serait préférable d'ajouter une classe "InfosVisionnage" car un fichier de la forme "numéroSaisonxNuméroEpisode.{listeDeDates}.txt" contiennent à la fois des informations sur l'épisode mais aussi des informations sur une séquence de séances de visionnages.
    En transférant le code d'analyse des données en entrée dans "InfosVisionnage" plutôt que dans "SequenceVisionnage", le code serait plus simple.

    Tout ce qui contient à la fois des informations sur l'épisode et une séquence de séance de visionnage => dans "InfosVisionnage"
    Tout ce qui contient des informations sur un épisode => dans Episode
    Tout ce qui contient des informations sur une séquence de séance de visionnage => dans "SequenceVisionnage"

    Avec ces modélisation, algorithme devient :

    EDIT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Scan des fichiers d'un Saison>
        Si fichier de la forme "numéroSaisonxNuméroEpisode.{listeDeDates}.txt" 
            alors
                Créer un "InfosVisionnage" à partir du fichier
                Si l'Episode indiqué dans l'InfosVisionnage existe déjà dans la saison
                    alors
                        Mettre à jour l'Episode avec la "SequenceVisionnage" contenu dans l'InfosVisionnage (voir aussi vérifier que les informations sur l'épisode dans l'InfosVisionnage soit les mêmes que dans l'épisode trouvé dans la Saison)
                    Sinon
                        Créer un nouvel Episode en lui passant l'InfosVisionnage pour que l'épisode initialise ces champs, y compris son "m_liste_visionnages"
            Sinon
                ....
    <Fin Scan des fichiers d'un Saison>
    Et : (serie)
    void afficher_Chaine(std::filesystem::path const& cheminFichier); et void Print_Chaine();
    vert !
    Pourquoi ?
    Bin déjà, il y a "Print_Chaine" qui fait ce qui est indiqué par son nom et "afficher_Chaine" qui ne fait absolument pas ce qu'elle indique !
    Donc "Print_Chaine", c'est "bien" et "afficher_Chaine" devrait être renommé en "Initialiser_Chaine", par exemple (en ajoutant un champ "m_chaine" à votre classe Saison).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void Serie::afficher_Fichier(fs::path const& cheminFichier)
    ...
    const void Serie::Print_Episodes(Saison saison)
    ...
    const void Serie::Print_Saison(Saison saison)
    ...
    const void Serie::Print_Saisons()
    Les mêmes bêtises que pour "afficher_Chaine/Print_Chaine", nommez correctement vos fonctions et ça sera plus claire pour vous.

  9. #589
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

    Attention : Chaîne d'origine.txt
    Je sais pas mais c'est oublié le titre parce choix : exemple :
    void Saison::afficher_Chaine(fs::path const& cheminFichier) et void Saison:rint_Chaine()
    et
    void Serie::afficher_Chaine(fs::path const& cheminFichier) et const void Serie:rint_Chaine()
    pas même chose :
    Chaîne d'origine.txt
    ABC
    1.
    Chaîne d'origine.txt
    ABC
    2.
    Chaîne d'origine.txt
    Netflix

    Simple !!!

    Merci

  10. #590
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

    https://github.com/laurentbouleau/Exemple : Avril 03 (2024/04/10)

    Pas compris !!! Long textes : c'est dure !!!
    Pas-à-pas !!! Merci

    <Scan des fichiers d'un Saison>
    Si fichier de la forme "numéroSaisonxNuméroEpisode.{listeDeDates}.txt"
    alors
    Créer un "InfosVisionnage" à partir du fichier
    Si l'Episode indiqué dans l'InfosVisionnage existe déjà dans la saison
    alors
    Mettre à jour l'Episode avec la "SequenceVisionnage" contenu dans l'InfosVisionnage (voir aussi vérifier que les informations sur l'épisode dans l'InfosVisionnage soit les mêmes que dans l'épisode trouvé dans la Saison)
    Sinon
    Créer un nouvel Episode en lui passant l'InfosVisionnage pour que l'épisode initialise ces champs, y compris son "m_liste_visionnages"
    Sinon
    ....
    <Fin Scan des fichiers d'un Saison>
    Après !!!


    Le chat : des convulsions ! Lundi et maintenant ! Encore ! Je n'ai marre !!!

  11. #591
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    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 074
    Points : 12 123
    Points
    12 123
    Par défaut
    Bonjour,

    Attention : Chaîne d'origine.txt
    Je sais pas mais c'est oublié le titre parce choix : exemple :
    void Saison::afficher_Chaine(fs::path const& cheminFichier) et void Saison: Print_Chaine()
    et
    void Serie::afficher_Chaine(fs::path const& cheminFichier) et const void Serie: Print_Chaine()
    pas même chose :
    Chaîne d'origine.txt
    ABC
    1.
    Chaîne d'origine.txt
    ABC
    2.
    Chaîne d'origine.txt
    Netflix

    Simple !!!

    Merci
    Je ne suis pas sûr de comprendre vos interrogations.

    Si c'est "pourquoi il y a des fonctions afficher_xxx et Print_xxx" dans vos classes, c'est parce que les "afficher_xxx" ne font pas ce qu'elle indique via leur nom.
    Elles ne devraient s'appeler "afficher_xxx" mais "Initialiser_xxx" ou être le constructeur de la classe.
    C'est ce que vous avez commencez à faire avec la fonction "Saison::initialiser_Chaine", par exemple.
    A la fin, vous ne devriez plus avoir aucune fonction de la forme "afficher_xxx".

    Si vous avez des fichiers "Chaîne d'origine.txt" au niveau du répertoire de la série et des répertoires des saisons, c'est pas un problème, la classe Serie aura un champ m_chaine et la classe Saison aura aussi un champ m_chaine.
    Le contenu du fichier "Chaîne d'origine.txt" au niveau du répertoire de la série sera stocké dans une instance d'objet Serie, et les contenus des fichiers "Chaîne d'origine.txt" au niveau des répertoires des saisons seront stockés dans chacune des instances d'objet Saison.

    <Scan des fichiers d'un Saison>
    Si fichier de la forme "numéroSaisonxNuméroEpisode.{listeDeDates}.txt"
    alors
    Créer un "InfosVisionnage" à partir du fichier
    Si l'Episode indiqué dans l'InfosVisionnage existe déjà dans la saison
    alors
    Mettre à jour l'Episode avec la "SequenceVisionnage" contenu dans l'InfosVisionnage (voir aussi vérifier que les informations sur l'épisode dans l'InfosVisionnage soit les mêmes que dans l'épisode trouvé dans la Saison)
    Sinon
    Créer un nouvel Episode en lui passant l'InfosVisionnage pour que l'épisode initialise ces champs, y compris son "m_liste_visionnages"
    Sinon
    ....
    <Fin Scan des fichiers d'un Saison>
    La mise en page automatique de developpez.net a "écrasé" l'indentation rendant mon propos incompréhensible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Scan des fichiers d'un Saison>
        Si fichier de la forme "numéroSaisonxNuméroEpisode.{listeDeDates}.txt" 
            alors
                Créer un "InfosVisionnage" à partir du fichier
                Si l'Episode indiqué dans l'InfosVisionnage existe déjà dans la saison
                    alors
                        Mettre à jour l'Episode avec la "SequenceVisionnage" contenu dans l'InfosVisionnage (voir aussi vérifier que les informations sur l'épisode dans l'InfosVisionnage soit les mêmes que dans l'épisode trouvé dans la Saison)
                    Sinon
                        Créer un nouvel Episode en lui passant l'InfosVisionnage pour que l'épisode initialise ces champs, y compris son "m_liste_visionnages"
            Sinon
                ....
    <Fin Scan des fichiers d'un Saison>
    Les dernières modifications semblent montrer que vous avez bien compris les choses à faire :
    L'ajout de la classe InfosVisionnage
    Renommage de certain champs et méthodes

    Mais:
    Pourquoi avoir mis en commentaire/supprimer la classe Episode ?

    Vous avez remplacé le champ "std::vector<Episode> episodes" de la classe Saison par "std::vector<SequenceVisionnage> sequencevisionnages", et je pense que c'est une erreur.

    Une saison "contient" des épisodes et chaque épisode "est associé" à des séquences de séances de visionnage, non ?
    Alors la classe Saison devrait contenir un champ "std::vector<Episode> episodes" et la classe Episode devrait contenir un champ "std::vector<SequenceVisionnage> sequencevisionnages", non ?

    Une grande partie du code du constructeur de "SequenceVisionnage" devrait être transféré dans le constructeur de "InfosVisionnage" car, comme déjà indiqué, un fichier de la forme "numéroSaisonxNuméroEpisode.{listeDeDates}.txt" contient des informations sur la séquence de séances de visionnage mais aussi des information sur l'épisode.

  12. #592
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

    Pas fini !!!

    https://github.com/laurentbouleau/Exemple : Avril 04 (2024/04/12)

    Le chat est malade : encore… https://www.b-lolo.fr/2024/04/12/le-...malade-encore/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Scan des fichiers d'un Saison>
        Si fichier de la forme "numéroSaisonxNuméroEpisode.{listeDeDates}.txt" 
            alors
                Créer un "InfosVisionnage" à partir du fichier
                Si l'Episode indiqué dans l'InfosVisionnage existe déjà dans la saison
                    alors
                        Mettre à jour l'Episode avec la "SequenceVisionnage" contenu dans l'InfosVisionnage (voir aussi vérifier que les informations sur l'épisode dans l'InfosVisionnage soit les mêmes que dans l'épisode trouvé dans la Saison)
                    Sinon
                        Créer un nouvel Episode en lui passant l'InfosVisionnage pour que l'épisode initialise ces champs, y compris son "m_liste_visionnages"
            Sinon
                ....
    <Fin Scan des fichiers d'un Saison>
    Demain : Je suis crevé

    Merci

  13. #593
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

    Elfy va mieux (15 ans) !!! Ben, pas toute suite !

    Alors,
    https://github.com/laurentbouleau/Exemple : Avril 05 (2024/04/18)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Scan des fichiers d'un Saison>
        Si fichier de la forme "numéroSaisonxNuméroEpisode.{listeDeDates}.txt" 
            alors
                >>> Créer un "InfosVisionnage" à partir du fichier etc...
                Si l'Episode indiqué dans l'InfosVisionnage existe déjà dans la saison
                    alors
                        Mettre à jour l'Episode avec la "SequenceVisionnage" contenu dans l'InfosVisionnage (voir aussi vérifier que les informations sur l'épisode dans l'InfosVisionnage soit les mêmes que dans l'épisode trouvé dans la Saison)
                    Sinon
                        Créer un nouvel Episode en lui passant l'InfosVisionnage pour que l'épisode initialise ces champs, y compris son "m_liste_visionnages"
            Sinon
                ....
    <Fin Scan des fichiers d'un Saison>
    Merci

  14. #594
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

    Elfy est bien (15 ans) !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if(std::regex_match(nomFichier, std::wregex{L"([[:digit:]]{1,2})x(.)+"}))
    {
        InfosVisionnage info_vis{cheminFichier};
     
        if(m_liste_episodes.existe(info_vis.numero_episode))
        {
            m_liste_episodes[info_vis.numero_episode].AjouterInfosVisionnage(info_vis);
        }
        else
        {
            m_liste_episodes[info_vis.numero_episode] = Creer_Episode(info_vis);
        }
    }
    et / ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Scan des fichiers d'un Saison>
        Si fichier de la forme "numéroSaisonxNuméroEpisode.{listeDeDates}.txt" 
            alors
                Créer un "InfosVisionnage" à partir du fichier
                Si l'Episode indiqué dans l'InfosVisionnage existe déjà dans la saison
                    alors
                        Mettre à jour l'Episode avec la "SequenceVisionnage" contenu dans l'InfosVisionnage (voir aussi vérifier que les informations sur l'épisode dans l'InfosVisionnage soit les mêmes que dans l'épisode trouvé dans la Saison)
                    Sinon
                        Créer un nouvel Episode en lui passant l'InfosVisionnage pour que l'épisode initialise ces champs, y compris son "m_liste_visionnages"
            Sinon
                ....
    <Fin Scan des fichiers d'un Saison>
    Pourquoi ?

    Merci beaucoup

  15. #595
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    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 074
    Points : 12 123
    Points
    12 123
    Par défaut
    Les fichiers de la forme "numéroSaisonxNuméroEpisode.{listeDeDates}.txt" contiennent à la fois des informations sur un épisode et sur une séquence de séances de visionnage.
    En passant par une classe dédiée pour récupérer toutes les informations puis de s'en servir pour initialiser les instances d'Episode et de SequenceVisionnage, cela permet de ne mettre dans ces 2 classes que des informations pertinentes pour ces types d'objets.

    Le code est un exemple d'implémentation de l'algorithme indiqué.

    A la fin, on doit avoir une organisation des objets simple :
    Une série contient des saisons, une saison contient des épisodes, et un épisode contient des séquences de séances de visionnage, une séquence de séances de visionnage contient des séances de visionnage.
    "m_liste_episodes" est le champ d'un objet Saison contenant la liste des épisodes de la saison.
    "m_liste_visionnages" est le champ d'un objet Episode contenant la liste des séquences de séance de visionnage de l'épisode. on pourrait le nommer "m_liste_sequence_visionnage" pour être plus précis.

  16. #596
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                InfosVisionnage info_vis{ m_cheminFichier };
                if (m_liste_episodes.existe(info_vis.m_NumeroEpisode))
                {
                    m_liste_episodes[info_vis.m_NumeroEpisode].AjouterInfosVisionnage(info_vis);
                }
                else
                {
                    m_liste_episodes[info_vis.m_NumeroEpisode] = Creer_Episode(info_vis);
                }
    existe : Pourquoi ? Pas de solution !!!

    Merci

  17. #597
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

  18. #598
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    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 074
    Points : 12 123
    Points
    12 123
    Par défaut
    Désolé, ma réponse n'était pas si évidente.

    Ce "existe", c'est une fonction "imaginaire", qui est soit à implémenter soi-même soit utiliser celle corresponde dans le type du champ "m_liste_episodes", si son type le permet.

    Si le champ "m_liste_episodes" est une "std::map<int,Episode>" (https://fr.cppreference.com/w/cpp/container/map) par exemple,
    L'équivalent de "existe(NumeroEpisode)" serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_liste_episodes.find(NumeroEpisode)!= m_liste_episodes.end()

  19. #599
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
            if (std::regex_match(nomFichier, std::wregex{ L"([[:digit:]]{1,2})x(.)+" }))
            {
                //creer_InfosVisionnage(m_cheminFichier);
                InfosVisionnage info_vis{ m_cheminFichier };
                if (m_liste_episodes.find(info_vis.m_NumeroEpisode) != m_liste_episodes.end())
                {
                    m_liste_episodes[info_vis.m_NumeroEpisode].AjouterInfosVisionnage(info_vis);
                }
                else
                {
                    m_liste_episodes[info_vis.m_NumeroEpisode] = Creer_Episode(info_vis);
                }
                //creer_SequenceVisionnage(m_cheminFichier);
                return;
            }
    Ok ou non ?

    Merci

  20. #600
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    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 074
    Points : 12 123
    Points
    12 123
    Par défaut
    Oui, si le champ "m_NumeroEpisode" est un int.

+ 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