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. #661
    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,

    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
    void Serie::initialiser_Titre(fs::path const& m_cheminFichier, std::vector<std::wstring>& m_titre)
    { // Titre
        auto nomFichier = m_cheminFichier.wstring();
        assert(nomFichier.length() > 0 && L"Nom de fichier vide");
        //std::vector<std::wstring> titre = lire_fichierTxt(m_cheminFichier.wstring(), { L"\r\n" });
        std::vector<std::wstring> titre = lire_fichierTxt(m_cheminFichier.wstring(), { L"\n" });
        assert((titre.size() != 0));
        /*const*/ std::vector<std::wstring> wstr = 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]);
        }
    
        initialiser_Duree(wstr[1]);
        for (auto j = 2; j < wstr[1].size(); j++)
            m_phrases += wstr[j];
    }
    Ok ! Mais, bon...

    Alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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)
    {
    ...
    }
    Ok ou pas ?

    bacelar : 26/05/2024, 02h43 et 26/05/2024, 21h57 : je suis fatigué !!! Pas plus 15 phrases !

    Merci beaucoup

  2. #662
    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
    Vos message du "29/05/2024, 16h00"("Hier, 16h00") et de "30/05/2024, 12h54"("Aujourd'hui, 12h54") semble montrer que vous maitrisez encore assez mal le débugueur.
    C'est normal pour un outil aussi puissant.
    Il faudrait peut-être qu'on se concentre sur la maitrise de cet outil, pour vous rendre plus autonome sur la mise au point de votre programme, non ?

    Pourquoi je pense qu'il y a un défaut de maitrise de l'outil :

    Dans le message du "29/05/2024, 16h00"("Hier, 16h00") :
    Vous postez le code d'une fonction ("lire_paireCleValeur_depuisFichierTxt") qui semble avoir été modifié pour mettre en œuvre mes remarques sur la fonction "lire_fichierTxt" sur d'autres parties du code.
    C'est une bonne nouvelle, car vous avez bien généralisé la problématique, malheureusement avec une "mauvaise" solution, comme je l'indique dans mon message du "29/05/2024, 16h18"("Hier, 16h18").
    Mea Culpa pour la mauvaise solution, mais votre message du "29/05/2024, 21h40"("Hier, 21h40") semble indiqué que vous avez pu appliquer une "bonne" solution, Cool.

    Mais avant que vous ne regénéralisiez la "bonne" solution, je pense que vous devriez factoriser votre code pour que cela soit plus simple et maintenable.
    Concrètement, ici, avec les fonctions "lire_fichierTxt" et "lire_paireCleValeur_depuisFichierTxt", vous avez beaucoup de ligne de code communes à ces 2 fonctions.
    La factorisation ici, ça serait d'utiliser un appel à la fonction "lire_fichierTxt" dans le code de "F".
    En faisant cela, s'il y a un problème à la lecture du contenu d'un fichier "txt", vous corrigez la fonction "lire_fichierTxt"et la fonction "lire_paireCleValeur_depuisFichierTxt" probablement automatiquement corrigée aussi.
    En essayant de faire cela systématiquement, et donc éviter les copier-coller de code, cela simplifiera grandement votre programme.

    Pour en revenir à l'aspect "manque de maitrise du débugueur", vous nous avez donné le code de la fonction "lire_paireCleValeur_depuisFichierTxt" vraisemblablement parce que c'était la dernière que vous aviez modifiée
    Mais la copie d'écran de la console du message montre (et aussi parce que j'obtiens exactement les mêmes traces avec la version "Mai 14 (2024/05/29)" des sources dans GitHub) que le problème qui fait "planté" le programme est dans la fonction "Saison::afficher". (cf. la dernière ligne dans la console qui donne exactement la ligne où est lancée l'exception)

    Voici une copie d'écran du débugueur quand l'exception se déclenche :
    Nom : developpez4.png
Affichages : 59
Taille : 260,2 Ko
    Le rectangle rouge, est la ligne qui lance l'exception, via la fonction "assert".
    Le rectangle vert, c'est la pile d'appels.
    Le rectangle cyan (bleu claire), c'est l'onglet pour sélectionner la visualisation de la pile d'appels.
    Le rectangle orange, c'est le cadre d'appel correspondant à ce qui est affiché dans la zone d'affichage du code source.
    Cliquez sur d'autres lignes dans la "Pile des appels" pour basé d'un cadre d'appel à un autre.
    Par exemple, si vous cliquez sur la ligne "Exemple.exe!Saison::initialiser_Fichier' qui est juste sous le rectangle orange, la zone d'affichage du code source affichera la fonction "Saison::initialiser_Fichier", et en particulier la ligne de code qui appel la fonction suivante dans la pile d'appel : "Saison::afficher". (On remarque par cet enchainement d'appels que la fonction "Saison::afficher" porte très mal son nom, encore une fois, faites attention aux noms que vous utilisez !!!)
    Le rectangle mauve est la vue "Espion 1", qui permet d'évaluer des expressions dans le cadre d'exécution sélectionné via "le rectangle orange".
    Ici, dans le rectangle jaune, j'ai fait évaluer l'expression "saison.second", correspondant au paramètre de la fonction "assert", et qui, sans surprise, à une taille de 0, ce qui déclenche l'exception.
    Le rectangle rose montre l'onglet pour sélectionner l'affichafe de la vue "Espion 1".

    Tout ceci ne devrait pas être une découverte pour vous, mais comme vous nous donnez le code de la fonction "lire_paireCleValeur_depuisFichierTxt" et pas cette fameuse ligne 766 du fichier "serie.cpp", j'ai des doutes.

    En utilisant correctement le débugueur, on voit que "saison.second" n'est pas "correctement" remplis.
    Ligne 760 de serie.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saison.second = lire_fichierTxt(m_cheminFichier.wstring());
    C'est donc bien "lire_fichierTxt" qui fait mal son travail.
    Comme je l'ai déjà indiqué, vous devriez vérifier que les fonctions "bas niveau" fonctionnent correctement, avant le reste.
    La version du code dans GitHub de la fonction "lire_fichierTxt" utilise toujours la "mauvaise" solution.
    Donc en corrigeant la fonction "lire_fichierTxt" avec la "bonne" solution, le programme ne plantera plus.

    Dans le message du "30/05/2024, 12h54"("Aujourd'hui, 12h54") :
    Les copie d'écran ne nous apportent rien pour déterminer le problème.
    Mais contrairement au message du "29/05/2024, 16h00"("Hier, 16h00"), la ligne de code qui est mise en rouge dans le post semble bien poser un problème. (après correction de la fonction "lire_fichierTxt" vraisemblablement.)




    ===> InfosVisionnage info_vis{*this, m_cheminFichier} : ça fonctionne pas ! Pourquoi ?

    Mais, pas-à-pas !!!
    Parce que ce constructeur est bogué.
    Pour le voir, utilisez le débugueur avec un point d'arrêt sur la première ligne de ce constructeur.
    Vous vous arrêterez à cette ligne avec une valeur du paramètre "m_cheminFichier" égale à "Azertyuiop - qsdfghjklm.[2021-2023 Netflix].Manga\2021-11-02\1x1.2021-07-16_08-01_.txt". (m_ )

    Si vous faites une exécution "pas à pas" jusqu'à la ligne 219 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::wstring> t = lire_fichierTxt(m_cheminFichier.wstring(), { L"\r\n" }, false);
    Vous verrez que tout se passe bien (conformément au comportement attendu).

    Mais, avec la version non corrigée (mal corrigée) de la fonction "lire_fichierTxt", la variable "t" ne contient rien, malgré le fait que le fichier "Azertyuiop - qsdfghjklm.[2021-2023 Netflix].Manga\2021-11-02\1x1.2021-07-16_08-01_.txt" ne soit pas vide.
    Mais le "vrai" problème n'est pas dans la fonction "lire_fichierTxt", qui peut très bien retourné "légitimement" une chaine vide, si le fichier le contient rien, comme le fichier "Azertyuiop - qsdfghjklm.[2021-2023 Netflix].Manga\2021-11-02\1x1.2024-03-22_.txt".
    Le "vrai" (premier) problème, c'est qu'au lieu d'envoyer une exception pour prévenir qu'on ne peut pas créer un objet "InfosVisionnage" opérationnel, ici, avec une valeur du champ "m_NumeroEpisode" correctement rempli ; vous initialisez un champ booléen "m_fichier_pas_zero" qui ne sert à rien.
    Le fait que l'initialisation du champ "m_NumeroEpisode" soit obligatoire, c'est pour correctement implémenter l'algorithme :
    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 avec le numéro d'épisode 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>
    "le numéro d'épisode indiqué" correspond au champ "m_NumeroEpisode" de l'objet de classe "InfosVisionnage", donc s'il n'est pas correctement renseigné, tout l'algorithme s'écroule.
    On pourrait modifier l'algorithme pour prendre en compte votre champ "m_fichier_pas_zero" (faites gaffe aux noms SVP) mais cela serait plus complexe pour rien (voir ci-après).
    En faisant un simple "return" et pas un "throw" d'exception (si c'est un problème d'utilisation des données utilisateur) ou un "assert" (si c'est un problème de programmation), vous vous retrouvez dans un cas non géré par l'algorithme.
    Et je pense qu'il n'a pas a être géré par l'algorithme car cette valeur est toujours présente dans le nom du fichier, aussi bien dans "1x1.2021-07-16_08-01_.txt" que dans "1x1.2024-03-22_.txt", malgré le fait que le fichier "1x1.2024-03-22_.txt" soit vide. Le numéro de l'épisode est dans le nom du fichier, toujours.
    Vous vous obstinez à chercher cette valeur dans le contenu du fichier, alors que ce contenu est plus qu'aléatoire (cf. la différence de contenu entre "1x1.2021-07-16_08-01_.txt" et "1x1.2024-03-22_.txt")

    Donc au lieu d'avoir cet horrible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        if (t[0] == L"")
        {
            m_fichier_pas_zero = false;
            //m_numero++;
    //        SequenceVisionnage{ info_vis };
            //InfosVisionnage.push_back();
    //        SequenceVisionnage.push_back({ InfosVisionnage });
            return;
        }
    par un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_NumeroEpisode = std::stoi(match[filename_numero_episode_index]);
    (Les expressions régulières et l'usage des asserts en début de fonction permettent d'être sûr que cette ligne est correcte quel que soit les circonstances.

    Le code qui suit (jusqu'à la ligne 321 : "m_numero = 1;") est très long et compliqué, facilement remplaçable par l'usage d'UNE seule expression régulières et un "if/then/else".
    Vous avez fait des essais (mis en commentaire) d'expression régulière. Avec les explications de mon post du "26/05/2024, 02h43", vous devriez être capable de trouver cette expression régulière, non ?
    Une expression régulière comme : "(([[:digit:]]+)\\.\\s?)?(.+?)(\\s:\\s|:\\s|/|\\s-\\s)(.+)" devrait faire le "boulot".


    Comme signalé depuis pas mal de temps, vos paramètres de compilation en Debug n'utilisent pas
    "Base de données du programme pour Modifier et Continuer (/ZI)" en tant que "format des informations de débogage"
    Sans cela, l'utilisation du débugueur est bien plus complexe.
    C'est l'action numéro 1 que vous devriez faire.

  3. #663
    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 ! Noté... mince... rouge, orange... pas simple !!!

    Merci

  4. #664
    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
    rouge, orange... pas simple !!!
    Pas simple, parce que c'est l'outil qui n'est pas simple ou est-ce que vous avez des problèmes particuliers avec les couleurs (daltonisme, "aphasie langagière", ...) ?
    Vous devez maitriser au minimum les éléments indiqués dans le précédent post : pile d'appel, évaluation d'expression, point d'arrêt.

    J'ai pas mal complété mon précédent post.
    Et mis en fin de post et en gras rouge, le plus important.

  5. #665
    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 !
    Merci

  6. #666
    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
    Comme signalé depuis pas mal de temps, vos paramètres de compilation en Debug n'utilisent pas
    "Base de données du programme pour Modifier et Continuer (/ZI)" en tant que "format des informations de débogage"
    Sans cela, l'utilisation du débugueur est bien plus complexe.
    C'est l'action numéro 1 que vous devriez faire.
    et :
    Nom : Capture d’écran 2024-05-31 105658.png
Affichages : 59
Taille : 16,8 Ko
    Marche-pas !!! Comme faire ?

  7. #667
    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
    Nom : Capture d’écran 2024-05-31 124603.png
Affichages : 59
Taille : 136,2 Ko
    ???
    Crevé !!!

  8. #668
    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

  9. #669
    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
    En ce qui concerne les message de "Aujourd'hui, 10h59" et de "Aujourd'hui, 12h47", cela montre que l'action demandée a "bien" été effectuée (mais pas forcément au bon "endroit"):
    "Base de données du programme pour Modifier et Continuer (/ZI)" en tant que "format des informations de débogage" (noté "(1)" plus avant dans le message)
    Mais les traces de compilation montrent que c'est la configuration "Release" qui est utilisé/compilée.
    Vous avez modifié la mauvaise configuration.
    Cette valeur d'option "(/ZI)" est pertinente en "Debug"; mais généralement pas en "Release", où c'est plutôt '(Zi)" qu'il faut choisir pour cette option (en "Release").
    (Comme déjà indiqué plusieurs fois dans cette file de messages)
    Donc, pour la configuration "Release", le message "cl : ligne de commande error D8016: options de ligne de commande '/ZI' et '/Gy-' non compatibles" est à comprendre :
    => Changer la valeur de l'option "format des informations de débogage" à "Base de données du programme (Zi)"
    (comme avant, si vous avez suivi mes recommandations antérieures)
    '/ZI' et '/Gy-' sont incompatibles.
    '/Zi' et '/Gy-' sont compatibles.

    Mais si vous faites la modification (1) dans la configuration "Debug", vous aurez le même message d'erreur, mais il n'est pas à comprendre de la même manière :
    Ici, ce n'est pas (1) qu'il faut changer mais c'est "/Gy-" qu'il faut corriger.

    C'est exactement le même problème qu'avec l'option "optimisation de l'ensemble du programme" que vous aviez modifiée sans logique apparente.
    Si vous regardez un peu dans les options de compilation, l'option "Gy" apparait dans la section "Génération de code", la ligne "Activer la liaison au niveau des fonctions":
    Nom : developpez5.png
Affichages : 60
Taille : 99,5 Ko
    Comme vous le voyez avec la valeur de l'option écris en gras, ce n'est pas la valeur par défaut.
    Si vous ne savez pas précisément à quoi correspond chaque option, laissez les valeurs par défaut, SVP.
    En sélectionnant "<hériter des paramètres par défaut du parent ou du projet>" vous allez remettre cette valeur par défaut, adaptée à une grande majorité des cas.

    Je signale que toutes ces pérégrinations dans les options du projet consistent à revenir aux valeurs par défaut. Vous avez commencé à toucher n'importe comment aux configurations "Debug" ET "Release" sans, me semble-t-il, qu'on vous ait demander de le faire.
    Pourquoi ???
    Donc, quand vous commencez à toucher aux options, faites très attention à la configuration que vous êtes en train de modifier et ne touchez qu'aux options que vous maitrisez, SVP.

    EDIT :

    Pour le début du message de "Hier, 12h54"
    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
    void Serie::initialiser_Titre(fs::path const& m_cheminFichier, std::vector<std::wstring>& m_titre)
    { // Titre
        auto nomFichier = m_cheminFichier.wstring();
        assert(nomFichier.length() > 0 && L"Nom de fichier vide");
        std::vector<std::wstring> titre = lire_fichierTxt(m_cheminFichier.wstring(), { L"\r\n" });
        assert((titre.size() != 0));
    
        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]);
        }
    
        initialiser_Duree(titre[1]);
        for (auto j = 2; j < titre[1].size(); j++)
            m_phrases += titre[j];
    }
    Pas de solution ?
    Bin si, voir mes précédents messages.

    Remarque en passant : vous utilisez le code "lire_fichierTxt(m_cheminFichier.wstring(), { L"\r\n" }".
    Comme je l'ai déjà signalé, le caractère '\r' pose problème avec l'implémentation actuelle de la fonction "lire_fichierTxt".
    J'ai indiqué qu'il y a 2 approches différentes pour "vivre" avec cette limitation :
    - interdire l'utilisation du caractère '\r' dans les séparateurs avec le lancement d'exception ou via assert.
    - supprimer silencieusement les caractères '\r' dans les séparateurs (peut-être utiliser des traces pour signaler cette "bidouille")

    La version du code que j'ai récupérée (Mai 14) n'implémente ni l'une ni l'autre.
    Encore une fois, commencez par corriger les fonctions de bas niveau.
    Donc, avec cette version boguée/limitée de la fonction "lire_fichierTxt", au mieux t[0] contient tout le fichier, au pire la variable t est complètement vide (t.size() == 0), même sur un fichier "correctement" formaté comme le fichier "Azertyuiop - qsdfghjklm.[2021-2023 Netflix].Manga\2021-11-02\1x1.2021-07-16_08-01_.txt".
    Mais même avec une version "corrigée" de la fonction "lire_fichierTxt, pour un fichier comme "Azertyuiop - qsdfghjklm.[2021-2023 Netflix].Manga\2021-11-02\1x1.2024-03-22_.txt", qui est vide, la variable t sera complètement vide (t.size() == 0).

    Il ne faut donc pas accéder à "titre[1]" sans avoir, préalablement vérifié que la taille de su std::vector "titre" était d'au moins 2.
    Donc, au minimum, il faudra remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    initialiser_Duree(titre[1]);
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(titre.size()>1)
    {
        initialiser_Duree(titre[1]);
    }
    Vous pourrez aussi remarquer une grosse erreur dans le code qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (auto j = 2; j < titre[1].size(); j++)
            m_phrases += titre[j];

    Pour le message de "Hier, 18h32"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //std::vector<std::wstring> titre = lire_fichierTxt(m_cheminFichier.wstring(), { L"\r\n" });
        std::vector<std::wstring> titre = lire_fichierTxt(m_cheminFichier.wstring(), { L"\n" });
        assert((titre.size() != 0));
        /*const*/ std::vector<std::wstring> wstr = titre;
    Je suis "OK" sur la modification de l'appel de la fonction "lire_fichierTxt" : '{ L"\r\n" }' => '{ L"\n" }".
    On "contourne" la limitation (qui peut être considéré comme une fonctionnalité de portabilité) de la fonction "lire_fichierTxt".

    Mais l'ajout de la variable "wstr" n'a aucun intérêt, à par complexifier inutilement le code.
    Le problème de fragilité du code qui n'utilise pas un "if(titre.size()>1){}" comme garde-fou (cf. Pour le début du message de "Hier, 12h54" de ce post) reste le même.
    Corrigez le bug en ayant compris le bug, SVP !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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)
    {
    ...
    }
    Ok ou pas ?
    Ok ou Pas Quoi ???
    Il y a plein de trucs qui me chagrinent dans ces signatures de fonction (nom de fichier en std::wstring plutôt qu'en std::filesystem:path, un "separeteur" Vs des "separeteurs", etc..), mais tant que c'est clair pour vous et qu'il n'y pas de bugs dans leur implémentation, ce n'est pas une priorité (sauf la factorisation de leur implémentation).

    bacelar : 26/05/2024, 02h43 et 26/05/2024, 21h57 : je suis fatigué !!! Pas plus 15 phrases !
    Prenez le temps de relire- ces messages à tête reposées.
    Comme on ne sait pas ce que vous prenez des différents parties des messages, on fait l'assertion que vous avez compris si vous ne posez pas de questions précises sur ces parties.
    Prenez le temps de poser des questions précises, SVP.

    Pour le message de "Aujourd'hui, 17h03"

    Ça fonctionne sur mon navigateur, si on parle de la page Web.
    Je trouve que la traduction automatique ne pose pas trop de problème et ce qui est exposé correspond au contenu du début de ce message.

  10. #670
    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
    En ce qui concerne les message de "Aujourd'hui, 10h59" et de "Aujourd'hui, 12h47", cela montre que l'action demandée a "bien" été effectuée (mais pas forcément au bon "endroit"):
    "Base de données du programme pour Modifier et Continuer (/ZI)" en tant que "format des informations de débogage" (noté "(1)" plus avant dans le message)
    Mais les traces de compilation montrent que c'est la configuration "Release" qui est utilisé/compilée.
    Vous avez modifié la mauvaise configuration.
    Cette valeur d'option "(/ZI)" est pertinente en "Debug"; mais généralement pas en "Release", où c'est plutôt '(Zi)" qu'il faut choisir pour cette option (en "Release").
    (Comme déjà indiqué plusieurs fois dans cette file de messages)
    Donc, pour la configuration "Release", le message "cl : ligne de commande error D8016: options de ligne de commande '/ZI' et '/Gy-' non compatibles" est à comprendre :
    => Changer la valeur de l'option "format des informations de débogage" à "Base de données du programme (Zi)"
    (comme avant, si vous avez suivi mes recommandations antérieures)
    '/ZI' et '/Gy-' sont incompatibles.
    '/Zi' et '/Gy-' sont compatibles.

    Mais si vous faites la modification (1) dans la configuration "Debug", vous aurez le même message d'erreur, mais il n'est pas à comprendre de la même manière :
    Ici, ce n'est pas (1) qu'il faut changer mais c'est "/Gy-" qu'il faut corriger.

    C'est exactement le même problème qu'avec l'option "optimisation de l'ensemble du programme" que vous aviez modifiée sans logique apparente.
    Si vous regardez un peu dans les options de compilation, l'option "Gy" apparait dans la section "Génération de code", la ligne "Activer la liaison au niveau des fonctions":
    Nom : developpez5.png
    Affichages : 10
    Taille : 99,5 Ko
    Comme vous le voyez avec la valeur de l'option écris en gras, ce n'est pas la valeur par défaut.
    Si vous ne savez pas précisément à quoi correspond chaque option, laissez les valeurs par défaut, SVP.
    J'en ai marre !!!

    Pas dormir ! Les Acouphènes : Toujours, et à droit : beaucoup ! Je suis fatigué !!! Après, la douche, et je dormirai !!! Je suis crevé !!!

  11. #671
    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
    https://github.com/laurentbouleau/Exemple : Juin 01/06/2024

    Erreur D8016 options de ligne de commande '/ZI' et '/Gy-' non compatibles Exemple D:\Work\Prg\CPP\Exemple\cl 1

  12. #672
    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
    Comme avant (exemple.cpp) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING
    #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING 1
    /ZI et /Gy-
    ou pas ?

    Merci

  13. #673
    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 ne m'écoutez pas.
    J'ai déjà expliqué le problème au début de mon message de "Hier, 18h45".

    Vous avez salopé les configurations de votre projet et les modifications que vous faites ne sont pas "correctes".

    Mais les modifications que vous avez faites dans la version "Juin 01/06/2024" permettent de compiler en "Debug".
    Le problème que vous indiquez dans votre message d'"Aujourd'hui, 14h07", c'est en "Release".

    N'utilisez PAS la configuration "Release" tant que vous n'avez pas mis au point votre programme.
    Utilisez la configuration "Debug" !!!

    Je fournis le fichier Exemple.vcxproj (zippé, "developpez.com" vaut pas autrement, semble-t-il)
    Exemple.vcxproj.zip
    Remplacez votre fichier par celui que je fournis pour revenir à la configuration "par défaut", qui compile aussi bien en "Debug" qu'en "Release".

    Comme avant (exemple.cpp) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING
    #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING 1
    /ZI et /Gy-
    ou pas ?

    Merci
    Rien à voir avec la choucroute.
    Comprenez nos explications, SVP.
    Si vous faites des modifications "au pif", on ne s'en sortira pas.

  14. #674
    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 !

  15. #675
    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
    Marche pas !
    Plus précis, SVP.

  16. #676
    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
    WinRAR : ok !
    Mais :
    Exemple.vcxproj.zip ===> Exemple.vcxproj
    Marche pas !

  17. #677
    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
    Nom : Capture d’écran 2024-06-01 222819.png
Affichages : 46
Taille : 7,1 Ko

  18. #678
    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 !
    Dossier ---> Exemple - copie/Exemple.vcxproj ===> Exemple/Exemple.vcxproj

    Merci

  19. #679
    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
    C'est bon maintenant ?

  20. #680
    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
    Oui !

    Demain : lire_fichierTxt
    L"\r\n" ===> L"\n"

    Merci

+ 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