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. #101
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    367
    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 : 367
    Points : 0
    Points
    0
    Par défaut
    Merci beaucoup ! Je suis allé voir le tutoriel sur C++ , mais j'ai des difficultés de lecture (à cause de mon AVC), donc c'est très dur. Je dois utiliser le narrateur de l'ordinateur pour lire. Là, j'écris avec l'aide de mon orthophoniste.

    Je voudrais corriger des erreurs dans mon programme.

    Je connais le langage de avant 1996. Comment je dois modifier mon code pour que ça marche ?

    Par exemple : But.h, But.cpp, c_s.h, c_s.cpp, cinema.h, cinema.cpp, erreur_ok.h, erreur_ok.cpp, ok_txt.h, ok_txt.cpp, serie.h, serie.cpp, you.h, you.cpp (wmain), you_txt.h, you_txt, cpp et you.txt

  2. #102
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    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 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Je connais le langage de avant 1996. Comment je dois modifier mon code pour que ça marche ?
    Le C++ n'a été standardisé pour la première fois qu'en 1998.
    Si vous vous souvenez du C++ avant 1996, il s'agit d'une version avant normalisation, mais il y a de grosse chance qu'elle respecte a peu près le premier standard : C++98.

    Le code autre que le code des classes Element et Arbre, et dans INDEX2(.H|.CPP) semble être du code écrit par une personne maîtrisant plus ou moins le C et qui utilise des fonctionnalités récentes du C++ de manière assez maladroite (non offense).

    Est-ce que c'est bien votre "situation" : vous connaissez plus ou moins le C et vous avez lu des tutoriels sur le C++ "moderne" ?

    Si c'est le cas, on peut peut-être simplifier la communication en essayant de faire des parallèles avec le langage C, non ?

    Comment je dois modifier mon code pour que ça marche ?

    Par exemple : But.h, But.cpp, c_s.h, c_s.cpp, cinema.h, cinema.cpp, erreur_ok.h, erreur_ok.cpp, ok_txt.h, ok_txt.cpp, serie.h, serie.cpp, you.h, you.cpp (wmain), you_txt.h, you_txt, cpp et you.txt
    Pour qu'on puisse vous aider effacement dans cette tâche, il serait peut-être judicieux que vous uploadiez sur un site comme GitHub ou GitLab ou tout autre gestionnaire de code source public du même acabit, l'ensemble des fichiers sources de votre projet.

    La dernière anomalie sur ces sources que vous nous avez soumi n'était pas directement lié au code.

    C'était vraisemblablement que le fichier recherché n'était pas dans le répertoire attendu. (fichier "e:\Séries.[]\\+++\Unorthodox.[2020- Netflix]" et non dans "e:\Séries.[]\\+++\U\Unorthodox.[2020- Netflix]")
    Là, on ne sait pas si c'est un "problème" dans le placement du fichier de données ou dans le code source C++.
    On ne connais pas votre/vos objectif(s).

  3. #103
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    367
    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 : 367
    Points : 0
    Points
    0
    Par défaut
    ARBRE.H, INDEX2.H et INDEX.CPP
    Oui, c'est vrai !

    Est-ce que c'est bien votre "situation" : vous connaissez plus ou moins le C et vous avez lu des tutoriels sur le C++ "moderne" ?
    Oui !

    Récemment, j'ai lu ces pages :


    J'ai pas tout compris. C'est pas évident !

    Si c'est le cas, on peut peut-être simplifier la communication en essayant de faire des parallèles avec le langage C, non ?
    Ok !

    Pour qu'on puisse vous aider effacement dans cette tâche, il serait peut-être judicieux que vous uploadiez sur un site comme GitHub ou GitLab ou tout autre gestionnaire de code source public du même acabit, l'ensemble des fichiers sources de votre projet.
    Je ne sais pas comment faire. Je vais essayer !

    C'était vraisemblablement que le fichier recherché n'était pas dans le répertoire attendu. (fichier "e:\Séries.[]\\+++\Unorthodox.[2020- Netflix]" et non dans "e:\Séries.[]\\+++\U\Unorthodox.[2020- Netflix]")
    Là, on ne sait pas si c'est un "problème" dans le placement du fichier de données ou dans le code source C++.
    On ne connais pas votre/vos objectif(s).
    Je veux classer par ordre alphabétique : j'ai fait des répertoires : A, B... Z. Ok !

    Mais quand le titre ne commence pas par une lettre # : (0, 1, 2... #, $, £, etc...) : Problème !

  4. #104
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    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 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Le fait de connaitre le C peut être un obstacle à la compréhension du C++ moderne car, malgré la possibilité de rester très proche des pratiques de programmation du C, cela peut être contre-productif dans le cadre du C++.

    Il peut être efficace de prendre des ressources pédagogiques spécialisées dans ce type d'apprentissage (modern C++ for C developers ???), mais j'en connais pas.
    Il faut se méfier des informations qu'on trouve sur le NET, qui on tendance à présenter le c++ "historique" que le C++ moderne.

    Récemment, j'ai lu ces pages :
    La première référence est bonne mais elle est "très" vieille.
    Les 2 autres références sont sur des aspects particuliers du langage.
    Je pense qu'il faudrait commencer par une vue d'ensemble du langage, d'où la référence sur le tutoriel de Zeste de savoir mentionnée précédemment.

    J'ai pas tout compris. C'est pas évident !
    C'est normal, seules, ces références sont très complexes. J'espèce que la lecture du tutoriel de Zeste de savoir aplanira les difficultés.

    Je veux classer par ordre alphabétique : j'ai fait des répertoires : A, B... Z. Ok !

    Mais quand le titre ne commence pas par une lettre # : (0, 1, 2... #, $, £, etc...) : Problème !
    J'espère que vous ne créez pas ces répertoires juste pour classer alphabétiquement les séries/films.
    Si c'est le cas, il vaut mieux que votre programme fasse le classement "lui-même".

    Si l'on reprend le code que vous avez posté le 26/07/2022
    (à l'arrache, pas testé)
    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
    const int You_Rechercher(int c, wchar_t** v)
    {
        size_t pos = 0;
        size_t npos = -1;
        wstring t;
    
        wcout << P.R_T << L"Rechercher :" << P.R_t << endl;
        if (v[3][0] == L'\0')
        {
            wcerr << L"Erreur !!! (v[3][0] == L'\0')" << endl;
            E.afficher_X(-3, L"v[3][0] == L'\0' erreur !!!", L"Erreur !!!");
            return -3;
        }
        wstring rechercher = v[3];
        wstring RECHERCHER = rechercher;
        transform(RECHERCHER.begin(), RECHERCHER.end(), RECHERCHER.begin(), ::toupper);
        wstring r_r = RECHERCHER.substr(0, 1);
    
        if (v[2][0] == L's' && v[2][1] == L'\0')
        {
            P_cs = P_serie;
            P.P_T = P.S_W;
            P.P_t = P.S_w;
        }
        else if (v[2][0] == L'c' && v[2][1] == L'\0')
        {
            P_cs = P_cinema;
        }
        else if (v[2][0] == L'c' && v[2][1] == L'v' && v[2][2] == L'\0')
            P_cs = P_cinema_VOD;
        else if (v[2][0] == L'c' && v[2][1] == L'd' && v[2][2] == L'\0')
            P_cs = P_cinema_DVD;
        else
        {
            wcerr << L"Erreur !!!" << endl;
            E.afficher_X(-3, L"Erreur !!!", L"Erreur !!!");
            return -3;
        }
        if (v[2][0] == L'c')
        {
            P.P_T = P.C_T;
            P.P_t = P.C_t;
        }
        //
        int i = 0;
        vector<wstring>r;
        r.push_back(P_cs.cs + L"\\" + r_r);
        r.push_back(P_cs.cs + L"\\-" + r_r);
        r.push_back(P_cs.cs + L"\\+\\" + r_r);
        r.push_back(P_cs.cs + L"\\++\\" + r_r);
        r.push_back(P_cs.cs + L"\\+++\\" + r_r);
        r.push_back(P_cs.cs + L"\\++++\\" + r_r);
        r.push_back(P_cs.cs + L"\\+++++\\" + r_r);
    
        vector<wstring>::iterator iter;
        wstring TT;
        wstring rr;
    
        set<wstring> sorted_by_name;
    
        for (iter = r.begin(); iter != r.end(); iter++)
        {
            rr = *iter;
            for (directory_iterator next(*iter), end; next != end; ++next)
            {
                t = next->path();
                if (is_directory(t))
                {
                    TT = t;
                    transform(TT.begin(), TT.end(), TT.begin(), ::toupper);
                    pos = TT.find(RECHERCHER);
                    if (pos != wstring::npos)
                    {
                        if (*iter != L"" && rr == *iter)
                        {
                            sorted_by_name.insert(*iter);
                            rr = L"";
                        }
                        //wcout << L"    " << t << endl;
                        i++;
                    }
                }
            }
        }
    
        if (i == 0)
            wcout << L"    " << L"Pas de rechercher !!!" << endl;
        else
        {
            //--- print the files sorted by filename
           for (auto &filename : sorted_by_name)
               wcout << L">> " << P.P_T << filename << P.P_t << endl;
        }
    
        return EXIT_SUCCESS;
    }
    https://stackoverflow.com/questions/...names-in-order

    Si l'arborescence de répertoire n'est pas là pour "trier" dans le bon ordre m'ai juste pour "classer".
    Utiliser d'autres caractères que des lettres comme nom de répertoire ne pose pas de problème particulier.
    Sauf que des systèmes de fichiers ou des OS peuvent interdirent certains caractères ou suite de caractères dans les noms de fichiers ou de répertoire.
    Par exemple, sous Windows, "CON", "PRN" ou des noms fichiers contenant ":" ou "\" ou "/" ou "?" ou "<" ect..., sont "interdits".

    Comme les noms de films ou de séries peuvent contenir ce type de caractères ou ensemble de caractère, vous devriez utiliser un système d'encoding/decoding pour "escaper" ces caractères dans les noms de fichiers/répertoires.

    Mais j'ai pas l'impression que vos problèmes actuels soient liés à ces spécificités.

    Pouvez-vous nous donnez un cas concret où vous n'arrivez pas à créer/trier correctement le nom du répertoire ?

  5. #105
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    367
    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 : 367
    Points : 0
    Points
    0
    Par défaut
    Bonsoir à toute

    Comme les noms de films ou de séries peuvent contenir ce type de caractères ou ensemble de caractère, vous devriez utiliser un système d'encoding/decoding pour "escaper" ces caractères dans les noms de fichiers/répertoires.
    Oui, je sais ! 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
    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
    const wstring afficher_fichier_lire(wstring t)
    {
    #if afficher_fichier_lire_ == 1
        B.Ok_T(L"const wstring afficher_fichier_lire(" + t + L") : ");
        B.Ok_W(L"{" + t + L"}");
    #endif
        wchar_t const* t_ = t.c_str();
        FILE* fichier = NULL;
        if ((fichier = _wfopen(t_, L"r")) == NULL) // C4996
        {
    #if afficher_fichier_lire_ == 1
            wcerr << L"Le fichier '" << t_ << L"' n'a pas été ouvert !\n" << endl;
    #endif
            return L"";
        }
        string p = u8"";
        char phrase[254] = { u8"" };
        while (!feof(fichier))
        {
            if (fgets(phrase, 254, fichier) == NULL)
                break;
            else
                p += phrase;
        }
        fclose(fichier);
        if (p == u8"")
            return L"";
        assert(p != u8"");
        wstring_convert<codecvt_utf8_utf16<wchar_t>, wchar_t> convert;
        wstring P = convert.from_bytes(p);
        size_t pos = P.length();
        while (P[pos - 1] == L'\n' || P[pos - 1] == L'\t' || P[pos - 1] == L' ')
        {
            P = P.substr(0, pos - 1);
            pos--;
        }
    #if afficher_fichier_lire_ == 1
         B.Ok_W(L"P={" + P + L"}");
        B.Ok_T(L"const wstring afficher_fichier_lire() : Ok !");
    #endif
        return P;
    }
    Je ne suis pas sûr du code ! Pouvez-vous m'expliquer ?

    Merci beaucoup

  6. #106
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    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 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Je ne suis pas sûr du code ! Pouvez-vous m'expliquer ?
    Juste ce qui est en rouge ou toute la fonction "afficher_fichier_lire" ?

    Si c'est juste la partie en rouge, il faut qu'en même que je dise que je trouve le code des lignes 18 à 24 très louche.
    wstring_convert:
    https://en.cppreference.com/w/cpp/lo...string_convert
    codecvt_utf8_utf16:
    https://en.cppreference.com/w/cpp/lo...cvt_utf8_utf16
    En gros, la variable "convert" est un outil qui permet de convertir des chaines de caractères qui sont au format UTF-8 vers un format UTF-16 compatible avec la classe std::wstring.

    wstring P = convert.from_bytes(p);
    Ici, "p" est un pointeur vers une chaîne de caractère supposée être au format UTF-8 et grâce à la fonction "from_bytes" de l'objet "convert", la variable "P" doit être initialisée avec la même chaîne de caractère mais au format UTF-16 (compatible avec std::wstring).

  7. #107
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    367
    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 : 367
    Points : 0
    Points
    0
    Par défaut
    Juste ce qui est en rouge ou toute la fonction "afficher_fichier_lire" ?
    C'était seulement la partie en rouge !

    Si c'est juste la partie en rouge, il faut qu'en même que je dise que je trouve le code des lignes 18 à 24 très louche.
    wstring_convert:
    https://en.cppreference.com/w/cpp/lo...string_convert
    codecvt_utf8_utf16:
    https://en.cppreference.com/w/cpp/lo...cvt_utf8_utf16
    En gros, la variable "convert" est un outil qui permet de convertir des chaines de caractères au format UTF-8 au format UTF-16 compatible avec la classe std::wstring.
    Merci beaucoup Mais, depuis mon AVC, je ne comprends presque plus l'anglais !!! J'ai essayé avec le narrateur et google traduction !
    wstring P = convert.from_bytes(p);
    Ici, "p" est un pointeur vers une chaîne de caractère supposée être au format UTF-8 et grâce à la fonction "from_bytes" de l'objet "convert", la variable "P" doit être initialisée avec la même chaîne de caractère mais au format UTF-16 (compatible avec std::wstring).
    Est-ce que vous pourriez corriger la fonction ?

    Merci d’avance !

  8. #108
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    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 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Mais, depuis mon AVC, je ne comprends presque plus l'anglais !!! J'ai essayé avec le narrateur et google traduction !
    Malheureusement, ces articles ne semblent pas encore traduits.
    Mais je pense que les exemples sont plus utiles que le reste de l'article.
    Mais bon, en bref, c'est juste pour convertir une chaine de caractères d'un format à un autre.

    Est-ce que vous pourriez corriger la fonction ?
    Compliqué de "corriger" une fonction quand on n'a pas les spécifications et un jeu de test.

    Si vous mettez ces 2 lignes en avant, c'est parce qu'elles génèrent des erreurs de compilation ?

    Si oui, donnez-nous ces erreurs de compilation.

    Si le problème est plus à l'exécution, pouvez-vous nous fournir les données en entré, les données reçues en sortie et les données qui devraient sortir de la fonction fonctionnait correctement ?

  9. #109
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    367
    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 : 367
    Points : 0
    Points
    0
    Par défaut
    Ok !

    you /t s "e:\Séries.[]\Dahmer - Monstre - L'histoire de Jeffrey Dahmer.[2022 Netflix]"
    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
    const int afficher_Gense(wstring g, wstring _T, vector<wstring>& G)
    { // Gense
    #if afficher_Gense_ == true
        B.Ok_T(L"const int afficher_Gense(" + g + L", " + _T + L", vector<wstring>& G) :");
    #endif
        size_t pos;
        if (g == L"Gense.txt")
        {
            //g = ::afficher_fichier_lire(g, _T);
            g = afficher_fichier_lire(_T);
        }
        else
        {
            pos = g.find(L".txt");
            if (pos != wstring::npos)
                g = g.substr(0, pos);
        }
        g = replace_all(g, L", ", L"\n");
        g += L'\n';
        pos = g.find(L'\n');
        // Ok !
        while (pos = g.find(L'\n'))
        {
            if (g[0] != g.length())
            {
                if (find(::Gense.begin(), ::Gense.end(), g.substr(0, pos)) != ::Gense.end())
                {
                    G.push_back(g.substr(0, pos));
                    g = g.substr(pos + 1);
                }
                else
                {
                    return EXIT_FAILURE;
                }
            }
            else
                break;
        }
    #if afficher_Gense_ == true
        int i = 0;
        vector <wstring>::iterator iter;
        wstring wstr = L"Gense={";
        for (iter = G.begin(); iter != G.end(); iter++)
        {
            wstr += *iter;
            i++;
            if (i != G.size())
                wstr += L", ";
        }
        B.Ok_W(wstr + L'}');
        B.Ok_T(L"const int afficher_Gense() : Ok !");
    #endif
        return EXIT_SUCCESS;
    }
    Merci

  10. #110
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    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 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Je ne sais où vous voulez aller.

    Le code que vous nous poster est assez souvent d'assez mauvaise "qualité" et donc assez complexe pour ce qu'il doit faire.
    Le nommage des variables renforce beaucoup l'impression de mauvaise "qualité".

    En résumé, la fonction "afficher_Gense" prend 3 arguments en paramètre et retourne un entier, qui est plus là pour coller à la méthode de retour de code d'erreur du C, qui est complètement anecdotique en C++.

    L'argument "G" est en fait le "vrai" résultat du travail de la fonction "afficher_Gense". C'est pour cela que le vecteur de "string" est passé par référence et non par valeur.
    et non .
    En passant par référence, la fonction appelant pourra lire les résultats après le retour de la fonction.

    une constant ou une variable globale de nom "::Gense" doit contenir la liste des Genres "possible".

    Si le paramètre "g" est égale à "Gense.txt", la liste des genres sera contenue dans la première ligne du fichier dont le nom est donnée dans la valeur du paramètre "_T".
    Sinon, si le paramètre "g" contient ".txt", la liste des genres sera contenue dans la valeur du paramètre "g" avant le ".txt".

    Le code considère que les genres sont séparés dans la chaîne de caractère par des ", ". Il découpe donc la chaîne pour avoir une liste de chaîne de caractère.
    Par exemple :
    Si la chaîne de caractères contient "Triller, Drame", le liste "G" contiendra alors 2 éléments :
    Triller
    Drame

    Mais avant d'ajouter les chaînes de caractère "individuelles" dans G, le code vérifie que la chaîne "individuelle" existe dans une liste de valeur stockées dans la variable globale "::Gense".

    L'utilisation d'un débogueur permet de "voir" l'exécution d'un bout de code.

  11. #111
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    367
    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 : 367
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    J'ai oublié ! Après, ok ! Puis, j'ai oublié ! Etc...

    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
    // ######################################################################################################################################################
    // #                                                                                                                                                    #
    // # Gense                                                                                                                                              #
    // # const int afficher_Gense(wstring _T, vector<wstring>& G)                                                                                           #
    // #                                                                                                                                                    #
    // ######################################################################################################################################################
     
    const int afficher_Gense(wstring const& _T, vector<wstring>& G)
    { // Gense
    #if afficher_Gense_ == true
        B.Ok_T(L"const int afficher_Gense(" + _T + L", vector<wstring>& G) :");
    #endif
        size_t pos;
        static const basic_string <wchar_t>::size_type npos = -1;
        pos = _T.find_last_of(L"\\");
        if (pos == npos)
        {
            E.afficher_X(-1, _T, L"Érreur !!! Gense pas... !");
            return EXIT_FAILURE;
        }
        pos++;
        wstring g = _T.substr(pos);
        if (g == L"Gense.txt")
        {
            try
            {
                // Dans le try, on est assuré que toute exception levée
                // pourra être traitée dans le bloc catch situé après.
                g = afficher_fichier_lire(_T);
            }
            // Notez qu'une exception s'attrape par référence constante.
            catch (runtime_error const& exception)
            {
                // On affiche la cause de l'exception.
                wcout << L"Erreur : " << exception.what() << endl;
            }
        }
        else
        {
            E.afficher_X(-1, _T, L"Érreur !!! Gense pas... !");
            return EXIT_FAILURE;
        }
        g = replace_all(g, L", ", L"\n");
        g += L'\n';
        pos = g.find(L'\n');
        // Ok !
        while (pos = g.find(L'\n'))
        {
            if (g[0] != g.length())
            {
                if (find(::Gense.begin(), ::Gense.end(), g.substr(0, pos)) != ::Gense.end())
                {
                    G.push_back(g.substr(0, pos));
                    g = g.substr(pos + 1);
                }
                else
                {
                    return EXIT_FAILURE;
                }
            }
            else
                break;
        }
    #if afficher_Gense_ == true
        int i = 0;
        vector <wstring>::iterator iter;
        wstring wstr = L"Gense={";
        for (iter = G.begin(); iter != G.end(); iter++)
        {
            wstr += *iter;
            i++;
            if (i != G.size())
                wstr += L", ";
        }
        B.Ok_W(wstr + L'}');
        B.Ok_T(L"const int afficher_Gense() : Ok !");
    #endif
        return EXIT_SUCCESS;
    }
    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
    const wstring afficher_fichier_lire(wstring const& t)
    {
    #if afficher_fichier_lire_ == 1
        B.Ok_T(L"const wstring afficher_fichier_lire(" + t + L") : ");
        B.Ok_W(L"{" + t + L"}");
    #endif
        string lignes{ u8"" };
        string ligne{ u8"" };
        ifstream fichier{ t };
        if (!fichier)
        {
            throw runtime_error("Fichier impossible à ouvrir.");
        }
        while (getline(fichier, ligne, u8'\n'))
        {
            lignes += ligne + u8'\n';
        }
        if (lignes == u8"")
            return L"";
        assert(lignes != u8"");
        wstring_convert<codecvt_utf8_utf16<wchar_t>, wchar_t> convert;
        wstring P = convert.from_bytes(lignes);
        size_t pos = P.length();
        while (P[pos - 1] == L'\n' || P[pos - 1] == L'\t' || P[pos - 1] == L' ')
        {
            P = P.substr(0, pos - 1);
            pos--;
        }
    #if afficher_fichier_lire_ == 1
        B.Ok_W(L"P={" + P + L"}");
        B.Ok_T(L"const wstring afficher_fichier_lire() : Ok !");
    #endif
        return P;
    }
    L'utilisation d'un débogueur permet de "voir" l'exécution d'un bout de code.
    Oui, ça vraie ! Et puis, j'ai oublié !

    Ok ! Je dormirai, creux-vé !

  12. #112
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    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 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Je ne comprends pas ce que vous demandez.

    La référence que vous donnez dans votre dernier post est très très bonne.

    Le code actuel ne suit que partiellement ce qui est montré dans la référence, mais Rome ne sait pas faite en 1 jour.

  13. #113
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    367
    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 : 367
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    int wmain(int argc, wchar_t* argv[])
    --> const int You_t(int c, wchar_t** v)
    ----> const int Serie::afficher(wstring const& t)
    ----> const int Serie::afficher(wstring const& _T, int const& _T_ = _TXT_) /* t => c, etc... */
    ------> const int afficher_Gense(wstring const& _T, vector<wstring>& G)
    ------> const int Serie::afficher_Creee_par(wstring& c, wstring const& _T) /* évidemment !!! _t => c */
    ------> etc...
    ------> const int Serie::afficher(int I, wstring _T, int _T_ = _TXT_) /* J'ai oublié */
    --------> const int Serie::afficher_Note(wstring n, wstring _T, int& note, bool& note_) /* J'ai oublié */
    --------> etc...
    ----> const int Serie::afficher_OK()
    Voilà ! Mais, pas sur !

    Merci d'avance

  14. #114
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    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 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Ce que vous avez posté semble être un mixte entre une pile d'appel et des traces d'exécution.

    C'est des traces d'exécution car elles semblent tracer chronologiquement l'appel des fonctions.
    Les fonctions appelés en premiers sont en faut des traces.

    Mais c'est aussi une aide à la visualisation à la pile d'appel de ces fonctions, car le nombre de '--' en préfixe des lignes indique le nombre d'appel de fonction non encore dépilé.

    Ainsi:
    "int wmain(int argc, wchar_t* argv[])" est la première fonction appelé (le point d'entré du programme)
    "int wmain(int argc, wchar_t* argv[])" appelle fonction "const int You_t(int c, wchar_t** v)"
    "const int You_t(int c, wchar_t** v)" appelle la fonction "const int Serie::afficher(wstring const& t)" puis "const int Serie::afficher(wstring const& _T, int const& _T_ = _TXT_)", mais je pense là à une erreur dans le code d'affichage, car il est plus logique que "const int Serie::afficher(wstring const& t)" appelle "lui-même" la fonction "const int Serie::afficher(wstring const& _T, int const& _T_ = _TXT_)".
    "const int Serie::afficher(wstring const& _T, int const& _T_ = _TXT_)"appelle la fonction "const int afficher_Gense(wstring const& _T, vector<wstring>& G)" puis "const int Serie::afficher_Creee_par(wstring& c, wstring const& _T)"
    ect...
    Puis la fonction "const int Serie::afficher(int I, wstring _T, int _T_ = _TXT_)"
    "const int Serie::afficher(int I, wstring _T, int _T_ = _TXT_)" appelle la fonction "const int Serie::afficher_Note(wstring n, wstring _T, int& note, bool& note_)"

    Après être retourné de la fonction "const int Serie::afficher_Note(wstring n, wstring _T, int& note, bool& note_)", puis de la fonction "const int Serie::afficher(int I, wstring _T, int _T_ = _TXT_)", puis de la fonction "const int Serie::afficher(wstring const& _T, int const& _T_ = _TXT_)" et enfin de la fonction "const int Serie::afficher(wstring const& t)" on n'est encore dans la fonction "const int You_t(int c, wchar_t** v)" et on appelle la fonction "const int Serie::afficher_OK()".

  15. #115
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    367
    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 : 367
    Points : 0
    Points
    0
    Par défaut
    Oui !

  16. #116
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    367
    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 : 367
    Points : 0
    Points
    0
    Par défaut
    Si je remplace Titre = L"blabla" par Titre = u8"Blabla" est-ce que c'est mieux ? (wmail() ===> main())

    Question : encoding/decoding ?

    Merci d'avance

  17. #117
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    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 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Ca dépend.
    Mais il faut éviter au maximum d'avoir des valeurs en dur dans son code.
    Il faut aussi faire attention à ce que l'encodage (ASCII/UTF-8/UCS2/...) des fichiers source soit cohérent avec la convention que vous utilisez pour spécifier ces valeurs "magiques".

    Il y a une approche sous Windows qui est d'utiliser des TCHAR pour pouvoir faire le choix ASCII/UCS2 au moment de la compilation, mais c'est plus très intéressant, je trouve.

    Je vous conseillerais d'utiliser des UCS2 en interne, pour ne pas avoir de manque de "représentation", mais de faire en sorte que les entré/sortie soient en UTF-8/UTF-16/UCS2.
    L'utilisation de format de fichier type XML avec BOM permet d'avoir une détection "automatique" de l'encodage des fichiers.
    Sinon, je vous conseille dans choisir un des 3 et de paramétrer tous vos outils (éditeurs de fichier, éditeurs de code source, éditeurs de ressources, etc...) pour qu'ils l'utilisent.

  18. #118
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    367
    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 : 367
    Points : 0
    Points
    0
    Par défaut
    Bonjour Bacelar,

    Microsoft Visual C++*2022 ---> Déboguer
    Je trouve pas !!!

    Merci beaucoup ;-)

  19. #119
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    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 059
    Points : 12 095
    Points
    12 095
    Par défaut
    Copie d'écran de Visual Studio avec votre projet C++ ouvert dedans, SVP.

  20. #120
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    367
    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 : 367
    Points : 0
    Points
    0
    Par défaut
    Copie d'écran de Visual Studio avec votre projet C++ ouvert dedans, SVP.
    Je n'arrive pas à le trouver !

+ Répondre à la discussion
Cette discussion est résolue.
Page 6 sur 29 PremièrePremière ... 234567891016 ... DernièreDernière

Discussions similaires

  1. Probléme avc la formclosing
    Par dv-2008 dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/03/2008, 17h33
  2. probléme avc console.readline()
    Par dv-2008 dans le forum VB.NET
    Réponses: 7
    Dernier message: 10/03/2008, 01h33
  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, 10h20
  4. Problème avc une requête
    Par Raiga dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/06/2007, 19h36
  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, 15h50

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