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. #301
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    J'ai l'impression que là encore, le code mélange trop de choses: Le parsing de la date et son affichage sous un autre format.
    Peut-être faudrait-il séparer cela en deux: Une fonction qui fait le parsing et retourne un objet, et une fonction qui fait l'affichage.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  2. #302
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    387
    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 : 387
    Points : 0
    Points
    0
    Par défaut
    Ben :
    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
    	...
    	while (
    		d[0] != std::wstring::npos &&
    		!(d[0] == L'_' && (pos = d.length()) == 1) &&
    		!(d[0] == L'_' && d[1] == L' ' && (pos = d.length()) > 2) &&
    		!(d[0] == L' ')
    		)
    	{
            ...
    		// year[i] + month[j] + day[k]
    		if (!vrai_year &&
    			ParseYear(Y = std::stoi(d.substr(0, 4))) &&
    			(d[4] == L'-') &&
    			ParseMonth(M = std::stoi(d.substr(5, 2))) &&
    			(d[7] == L'-') &&
    			ParseDay(M, D = std::stoi(d.substr(8, 2)), Y)
    			)
    		{
    ...
        }
    Compliqué pour moi

    Oui, je sais ! Plus tard...

  3. #303
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    387
    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 : 387
    Points : 0
    Points
    0
    Par défaut
    L'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
    const void Cinema::afficher_Note(std::wstring& n_filename, std::wstring const& nomFichier)
    { // 0...5 ou -1
        std::wstring n = lire_fichierTxt(nomFichier);
    	std::size_t pos = n.length();
    	if (n == L"")
    	{
    		note = -1.0;
    		return;
    	}
    	if (pos != 1 && pos != 3)
    	{
    		E.afficher_X(-1, n, L"Pas de [a-z] et/ou [0-9] et/ou etc…");
    		return;
    	}
    	if (!iswdigit(n[0]))
    	{
    		E.afficher_X(-1, n, L"Pas de [a-z] et/ou etc…");
    		return;
    	}
    	if (!(n[0] == L'0' || n[0] == L'1' || n[0] == L'2' || n[0] == L'3' || n[0] == L'4' || n[0] == L'5'))
    	{
    		E.afficher_X(-1, n, L"Pas de [0-5]");
    		return;
    	}
    	if (pos == 1)
    		note = std::stod(n);
    	else
    	{
    		if ((n[1] == L',' || n[1] == L'.') && iswdigit(n[2]) && pos == 3)
    		{
    			n[1] = L',';
    			note = std::stod(n);
    		}
    		else
    		{
    			E.afficher_X(-1, n, L"Pas de…");
    			return;
    		}
    	}
    	return;
    }
    et
    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
    const std::wstring Cinema::PrintNote()
    {
    	if (affichage_distributeur_actif)
    	{
    		std::wstring note_str;
    		if (note != 0.0)
    		{
    			if (note == -1.0)
    				note_str += L' ' + keyColor + L'(' + valuesColor + L"pas de note !" + keyColor + L')' + valuesColor;
    			else
    			{
    				if (note == 0 || note == 1 || note == 2 || note == 3 || note == 4 || note == 5)
    					//note_str += L' ' + std::to_wstring(note);
    					note_str = L' ' + std::to_wstring(static_cast<int>(std::floor(note)));
    				else
    				{
    					std::wstring wstr = std::to_wstring(note);
    					wstr = wstr[0] + keyColor + wstr[1] + valuesColor + wstr[2];
    					note_str += L' ' + wstr;
    				}
    				note_str += keyColor + L"/5" + valuesColor;
    			}
    		}
    		else
    		{
    			note_str = L' ' + keyColor + L'(' + valuesColor + L"pas de note !" + keyColor + L')' + valuesColor;
    		}
    		return note_str;
    	}
    	return L"";
    }
    Clair et parfait ! Tu vois ! Mais, plus tard

  4. #304
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    387
    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 : 387
    Points : 0
    Points
    0
    Par défaut
    Ou, par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void Cinema::afficher_De(std::wstring& d_filename, std::wstring const& nomFichier, std::vector<std::wstring>&de) const
    {
    	assert((d_filename == createdBy_filename) && L"Erreur !!! De... !");
    	de = lire_fichierTxt(nomFichier, { L"\n", L", " });
    	assert((de.size() != 0));
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    const void Cinema::PrintDe(const std::vector<std::wstring>&de)
    {
    	if (affichage_de_actif && de.size() > 0)
    	{
    		std::wstring de_str = keyColor + L"De" + ((de.size() > 1) ? L"s" : L"") + L" : " + valuesColor;
    		bool first = true;
    		for (auto&& d : de)
    		{
    			if (!first)
    			{
    				de_str += keyColor + L", " + valuesColor;
    			}
    			de_str += d;
    			first = false;
    		}
    		de_str += L"\r\n";
     
    		//PrintStringW(m_hOut, creee_par_str, 0);
    		//PrintStringW(HANDLE hOut, creee_par_str);
    		int i = Console_Lire_txt(de_str, 0, 0);
    	}
    }
    Ok !

  5. #305
    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 120
    Points
    12 120
    Par défaut
    Compliqué pour moi
    Pour nous aussi, vous vous êtes pas facilité la tâche quand vous avez écrit ce code.

    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
    	...
    	while (
    		d[0] != std::wstring::npos &&
    		!(d[0] == L'_' && (pos = d.length()) == 1) &&
    		!(d[0] == L'_' && d[1] == L' ' && (pos = d.length()) > 2) &&
    		!(d[0] == L' ')
    		)
    	{
            ...
    		// year[i] + month[j] + day[k]
    		if (!vrai_year &&
    			ParseYear(Y = std::stoi(d.substr(0, 4))) &&
    			(d[4] == L'-') &&
    			ParseMonth(M = std::stoi(d.substr(5, 2))) &&
    			(d[7] == L'-') &&
    			ParseDay(M, D = std::stoi(d.substr(8, 2)), Y)
    			)
    		{
    ...
        }
    C'est du code pour convertir un texte, contenu dans la variable "d", en une date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const void Cinema::afficher_Note(std::wstring& n_filename, std::wstring const& nomFichier)...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const std::wstring Cinema::PrintNote()...
    Font ce qu'indique leur non "afficher une note d'un "Cinema", mais dans mes souvenirs, la classe Cinema porte très mal son nom, c'est plus un Film, donc la note du Film.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Cinema::afficher_De(std::wstring& d_filename, std::wstring const& nomFichier, std::vector<std::wstring>&de) const ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const void Cinema::PrintDe(const std::vector<std::wstring>&de)...
    Idem mais pour les auteurs du film.

    En regardant un peu le code, on voit que les implémentations des fonctions ne correspondent pas vraiment/complètement avec leur nom. Un peu de retravail.
    Les versions "Printxx" sont mieux écrite mais correspondent moins à leur nom.

    Des questions plus "précises" ça serait plus efficace, je pense.

  6. #306
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je suppose que keyColor et valuesColor sont des séquences d'échappement VT100 pour affecter la couleur du texte?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #307
    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 120
    Points
    12 120
    Par défaut
    Oui

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

    Je sais (plus tard) : Problème :

    https://www.developpez.net/forums/at...&thumb=1&stc=1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    const int Console_Lire_txt(std::wstring Textes, int x1, int x2)
    {
     
        if (Textes == L"" && X == 0)
            return 0;
        rtrim(Textes);
        //
        bool ligne_vide = false;
        bool retrait = false;
        wchar_t entree = L'\n';
     
        int I, x;
        int i, j, k, n = 0;
        int l, m;
        std::size_t N;
        // // // //  //
        Textes += entree;
        // // // //  //
        int p = 0;
        std::vector<std::wstring> P;
        std::vector<int> PP;
        std::wstring o;
        int oo = 0;
        N = Textes.length();
        i = 0;
        while (i < N)
        {
            if (Textes[i] == L'\x1b')
            {
                j = i;
                o = L'\x1b';
                j++;
                while (Textes[j] != L'm' || j >= N)
                {
                    o += Textes[j];
                    j++;
                }
                if (j >= N)
                {
                    E.afficher_X(-1, L"::Console_Lire_txt()", L"j >= N !!!");
                    //return -1;
                    return EXIT_FAILURE;
                }
                o += L'm';
                P.push_back(o);
                PP.push_back(i);
                Textes = Textes.replace(i, o.length(), L"");
                p++;
                N = Textes.length();
            }
            i++;
        }
        std::vector <std::wstring>::iterator iter;
        std::wstring wstr;
        x = x1;
        I = X - x;
        j = 0;
        if (I < N)
            n = I;
        else
            n = (int)N;
        std::vector <int>::iterator iter2;
        iter = P.begin();
        iter2 = PP.begin();
        oo = 0;
        while (j < N)
        {
            // Ok
            if (Textes[j] == entree && retrait == true)
            {
                ligne_vide = true;
                //retrait = true;
                goto _ok_;
            }
            // Ok
            for (i = 0; i < x; i++)
    #if Console_Lire_txt_ == 1
                std::wcout << L'_';
    #else
                std::wcout << L' ';
    #endif
            // Ok
            while (Textes[j] == L' ')
            {
                j++;
                n++;
                if (n > N)
                    n = (int)N;
            }
            // Ok
            k = j;
            for (j = k; k < n; k++)
            {
                if (Textes[k] == entree)
                {
                    break;
                }
            }
            if (k != n)
            {
                retrait = true;
                n = k;
            }
            else
            { // ???
                ligne_vide = false;
                retrait = false;
                while (Textes[n] != L' ')
                {
                    n--;
                }
            }
            // Ok
            k = j;
            l = 0;
            for (j = k; k < n; k++)
            {
                if (p != 0 && k == *iter2)
                {
                    o = *iter;
                    std::wcout << o;
                    wstr = o;
                    iter++;
                    iter2++;
                    oo++;
                }
                std::wcout << Textes[k];
                l++;
            }
            // Ok
            j = k;
            m = X - (x + l);
            for (i = 0; i < m; i++)
            {
    #if Console_Lire_txt_ == 1
                std::wcout << L'*';
    #else
                std::wcout << L' ';
    #endif
            }
            // Ok
        _ok_:
            if (ligne_vide == true && retrait == true)
            {
                ligne_vide = false;
                j++;
                n++;
                if (n > N)
                    n = (int)N;
                x = x1;
                continue;
            }
            else if (ligne_vide == false && retrait == true)
            {
                retrait = false;
                x = x1;
            }
            else
            {
                ligne_vide = false;
                retrait = false;
                x = x2;
            }
            j = n;
            if (p != 0 
                &&
                j == *iter2)
            {
                o = *iter;
                std::wcout << o;
                wstr = o;
                iter++;
                iter2++;
                oo++;
            }
            j++;
            // x ?
            n += (X - x);
            if (n > N)
            {
                n = (int)N;
            }
        }
        if (p != 0 && PP.back() <= N)
        {
            std::wcout << P.back() << endl;
            wstr = P.back();
        }
        return EXIT_SUCCESS;
    }
    Possible ???

    Merci beaucoup
    Images attachées Images attachées  

  9. #309
    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 120
    Points
    12 120
    Par défaut
    La fonction "Console_Lire_txt" est très très complexe et fragile (et très mal nommée).

    Quel est le but recherché ?
    Expliquer "Console_Lire_txt" demanderait beaucoup de temps car elle est très très complexe.

    Je crois qu'on avait tenté de la réécrire de manière bien plus simple.

    Ou est-ce une partie de la fonction qui vous bloque ?

  10. #310
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    387
    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 : 387
    Points : 0
    Points
    0
    Par défaut
    Par exemple : min et Avec !
    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
        while (i < N)
        {
            if (Textes[i] == L'\x1b')
            {
                j = i;
                o = L'\x1b';
                j++;
                while (Textes[j] != L'm' || j >= N)
                {
                    o += Textes[j];
                    j++;
                }
                if (j >= N)
                {
                    E.afficher_X(-1, L"::Console_Lire_txt()", L"j >= N !!!");
                    //return -1;
                    return EXIT_FAILURE;
                }
                o += L'm';
                P.push_back(o);
                PP.push_back(i);
                Textes = Textes.replace(i, o.length(), L"");
                p++;
                N = Textes.length();
            }
            i++;
        }
    ???

    Merci vraiment

  11. #311
    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 120
    Points
    12 120
    Par défaut
    Je vais essayer d'être simple, voire simpliste.

    Une console Windows "de base" est (était) très très limitée en termes de fonctionnalités.
    Au niveau des sorties, on lui demande (via les fonctions de l'API Win16/32) d'afficher une chaine de caractère en ASCII (US, donc pas d'accent, etc...) et elle affiche cette chaine dans une fenêtre à fond noir avec des lettres blanches selon une police quelconque (paramétrable au niveau du système, je crois), c'est la fameuse fenêtre "Console".
    Les chaines envoyées à la console s'affichent les unes derrière les autres dans l'ordre de leur envoie à la console.
    Avec des retours à la ligne quand le texte dépasse le nombre de caractère en taille horizontale, faire un scrolling vertical vers le haut quand il n'y a plus de ligne vide disponible, etc...

    Dans l'extrait de code que vous nous donnez, ces appels aux fonctions de l'API Win16/32 sont cachées dans les lignes comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::wcout << Textes[k];
    "std::wcout" est un synonyme de la console de sortie. "out" c'est le diminutif de "output"(sortie en anglais). "cout", c'est la partie sortie de la console. "wcout", c'est pour indiquer que c'est une sortie "wide" (d'où le w devant), c'est à dire avec un jeu de caractère possible très "large" (les caractères chinois, japonais, les emojis, etc...).
    Ici, c'est la fonction appelée qui accepte des caractères étendus, mais rien ne garantit que la fenêtre qui doit les afficher sache le faire, d'où des problèmes d'affichage très fréquent dans les consoles Windows.

    Mais dès les années 1960 ou 1970, des sociétés ont créées des "protocoles" pour pouvoir facilement mettre en page le contenu de ce qui est affiché dans une console : c'est les "séquences d'échappement VT100", qui sont des séquences d'octets directement contenus dans les chaines de caractères, mais qui ne devraient pas être interprétées comme des caractères mais comme des instructions pour changer la couleur des prochaines écritures, positionner l'endroit des prochaines écritures, s'il faut effacer l'écran, etc...

    Le code que vous nous poster cherche à détecter ces "séquences d'échappement VT100" dans le flux de caractère. Cela indique que les données en entrée ne contiennent pas uniquement le texte à afficher mais aussi la mise en page de celui-ci, selon le protocole "séquences d'échappement VT100".
    Le code cherche à détecter ces séquences pour les enlever, pour n'avoir que du texte. Mais aussi à sauvegarder des informations pour essayer d'afficher les textes dans la console Windows comme si c'était une console "VT100" qui comprendrait nativement les "séquences d'échappement VT100" (changement de couleur, positionnement des prochaines écritures à une position particulières, etc...)

    Ce code est très compliqué et ne garantit pas qu'il comprenne toutes les séquences d'échappement possibles, utilisables pour les données en entré.

    Il serait donc, maintenant que la console Windows a progressé, et qu'elle peut implémenter directement des protocoles types "séquences d'échappement VT100", plus simple de directement envoyer les "textes+mise en page" source à la console Windows correctement configurée au préalable pour comprendre les "séquences d'échappement VT100".
    C'est tout le contenu des messages de cette discussion au début de l'année : faire cette configuration pour abandonner cette partie du code, très compliquée, et inutile si la console est correctement configurée.

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

    J'ai oublié ! Comment faire ? Un seul !
    Problème / Solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            for (i = 0; i < x; i++)
                std::wcout << L' ';
    Merci d'avance

  13. #313
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    387
    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 : 387
    Points : 0
    Points
    0
    Par défaut
    Hier, 3 heures !
    Exemples :
    c++ comment faire avec les chiffres pour ' '
    c++ comment faire avec les nombres pour ' '
    c++ comment faire avec ' ' pour les nombres
    ...
    Pas trouver !!!

  14. #314
    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 120
    Points
    12 120
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (i = 0; i < x; i++)
           std::wcout << L' ';
    Ceci est une boucle "classique".
    "i" est la variable qui change (s'incrémente ici) à chaque tour de boucle.
    Elle commence à 0 et la boucle s'arrête quand elle arrive à la valeur contenue dans une autre variable : "x".

    A chaque tour de boucle, un caractère L' ' est envoyé à la console (de sortie).

    Cela permet de décaler d'un nombre "x" de caractère vers la droite la prochaine écriture sur la console, pour faire de la "mise en page".

    C'est le genre de petite fonctionnalité utiles qu'on encapsule dans des fonctions pour s'en servir plus facilement à plein d'endroit où c'est utile.

    c++ comment faire avec les chiffres pour ' '
    c++ comment faire avec les nombres pour ' '
    c++ comment faire avec ' ' pour les nombres
    Pouvez-vous être plus précis ?
    Je pense que ces questions sint trop vague pour que Google donne des résultats satisfaisants, malheureusement.

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

    Voici You.sin (You1.sin plus tard) avec const int Console_Lire_txt(std::wstring Textes, int x1, int x2)
    • for (i = 0; i < x; i++) std::wcout << L' ';
      ou entre
      (L' ', L'_' et L'*')
    • std::pair <std::wstring, int> P;
      et non pas :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
          std::vector<std::wstring> P;
          std::vector<int> PP;
      Exemple : L"\x1b[38;2;0;255;0m"
    • WriteFile(hOut, &str[0], (DWORD)(str.size() * sizeof(wchar_t)), &dwMode, NULL)
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      DWORD dwMode = 0;
      BOOL res = WriteFile(hOut, &str[0], (DWORD)(str.size() * sizeof(wchar_t)), &dwMode, NULL);
      assert(res == TRUE);

    Voila !
    Merci beaucoup

  16. #316
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    387
    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 : 387
    Points : 0
    Points
    0
    Par défaut
    J'ai oublié !!!
    Win + M + ???Nom : Capture d’écran 2023-09-13 165211.png
Affichages : 77
Taille : 23,7 Ko
    Merci vraiment

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

  18. #318
    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 120
    Points
    12 120
    Par défaut
    Pouvez-vous essayer de formaliser les questions ?

    Sinon, on risque bien de toujours répondre à côté.

    Voici You.sin (You1.sin plus tard) avec const int Console_Lire_txt(std::wstring Textes, int x1, int x2)
    On parle bien de la fonction qui est défini dans le projet GitHub You-1, dans le fichier "Utils.cpp" (https://github.com/laurentbouleau/Yo...ster/Utils.cpp), de la ligne 1079 à 1277 ?

    On en a déjà parlé dans cette discussion de forum, c'est une fonction bien trop longue (près de 200 lignes alors que les fonctions font raisonnablement moins de 20 lignes, en gros 10 fois trop longue).
    Elle fait plein de chose à la fois et donc son nom ne reflète pas ce qu'elle fait (et encore moins ce qu'elle est sensée faire).

    Ce n'est donc pas un exemple à suivre pour la suite de votre développement.

    grosso merdo, elle essaye d'afficher dans la console un texte (son 1er argument), le second paramètre indique le nombre d'espace (" ") ou d'underscore ("_") à écrire avant le premier caractère du texte. Le troisième indique la même chose mais pour les autres lignes du texte (le texte peut être multiligne, avec des retours à la ligne dans le texte).
    C'est bien compliqué pour rien !!!!

    for (i = 0; i < x; i++) std::wcout << L' ';
    ou entre
    (L' ', L'_' et L'*')
    Pas clair, les codes proches de celui-ci dans Console_Lire_txt sont :
    lignes 1162 à 1167 qui affiche des blancs (" ") ou des unserscore("_") avant le texte (cf. sens du second paramètre)
    lignes 1219 à 1225 qui affiche des blancs (" ") ou des astérisques ("*") pour remplir la ligne jusqu'au coté droit de la console.

    std::pair <std::wstring, int> P;
    et non pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        std::vector<std::wstring> P;
        std::vector<int> PP;
    Une simple paire chaine_de_caractère, un entier ne peut pas remplace un tableau de taille variable dont chaque élément contient une chaine de caractère + un tableau de taille variable dont chaque élément contient un entier.
    Si ces 2 tableau ont toujours la même taille, on peut remplacer ces 2 tableaux par un tableau de paire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::pair <std::wstring,int>> PandPP
    WriteFile(hOut, &str[0], (DWORD)(str.size() * sizeof(wchar_t)), &dwMode, NULL)
    C'est dans la fonction PrintStringW, cette fonction est bien plus simple que la fonction "Console_Lire_txt".
    Elle utilise WriteFile et non "std::wcout" car "std::wcout" cache les spécificités de l'API Windows des consoles, qui seraient utiles pour simplifier tout votre code.

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

    you.sln ! Et pas you1.sln !!! (Plus tard !!!)
    https://github.com/laurentbouleau/You : Marche pas !!! Comment faire ?

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    inline std::wstring space(int i, wchar_t espace)
    {
        std::wstring wstr = L"";
        //for (auto ===> Pas trouvé !!!)
        for(int j = 0; j < i; j++)
            wstr += espace;
        return wstr;
    }
    
    const int Console_Lire_txt(std::wstring Textes, int x1, int x2)
    {
        if (Textes == L"" && X == 0)
            return 0;
        rtrim(Textes);
        //
        bool ligne_vide = false;
        bool retrait = false;
        wchar_t entree = L'\n';
    
        int I, x;
        int i, j, k, n = 0;
        int l, m;
        std::size_t N;
        // // // //  //
        Textes += entree;
        // // // //  //
        int p = 0;
        std::vector<std::wstring> P;
        std::vector<int> PP;
        std::wstring o;
        int oo = 0;
        N = Textes.length();
        i = 0;
        while (i < N)
        {
    ...
        }
        std::vector <std::wstring>::iterator iter;
        std::wstring wstr;
        x = x1;
        I = X - x;
        j = 0;
        if (I < N)
            n = I;
        else
            n = (int)N;
        std::vector <int>::iterator iter2;
        iter = P.begin();
        iter2 = PP.begin();
        oo = 0;
        while (j < N) // Dermité goto !!!
        {
            // Ok
            if (Textes[j] == entree && retrait)
            {
                ligne_vide = true;
            }
            else
            {
                // Ok
    #if Console_Lire_txt_ == 1
                std::wcout << space(x, L'_');
    #else
                std::wcout << space(x, L' ');
    #endif
                // Ok
                while (Textes[j] == L' ')
                {
                    j++;
                    n++;
                    if (n > N)
                        n = (int)N;
                }
                // Ok
                k = j;
                for (j = k; k < n; k++)
                {
                    if (Textes[k] == entree)
                    {
                        break;
                    }
                }
                if (k != n)
                {
                    retrait = true;
                    n = k;
                }
                else
                { // ???
                    ligne_vide = false;
                    retrait = false;
                    while (Textes[n] != L' ')
                    {
                        n--;
                    }
                }
                // Ok
                k = j;
                l = 0;
                for (j = k; k < n; k++)
                {
                    if (p != 0 && k == *iter2)
                    {
                        o = *iter;
                        std::wcout << o;
                        wstr = o;
                        iter++;
                        iter2++;
                        oo++;
                    }
                    std::wcout << Textes[k];
                    l++;
                }
                // Ok
                j = k;
                m = X - (x + l);
    #if Console_Lire_txt_ == 1
                std::wcout << space(m, L'*');
    #else
                std::wcout << space(m, L' ');
    #endif
            }
            // Ok
            if (ligne_vide && retrait)
            {
                ligne_vide = false;
                j++;
                n++;
                if (n > N)
                    n = (int)N;
                x = x1;
                continue;
            }
            else if (!ligne_vide && retrait)
            {
                retrait = false;
                x = x1;
            }
            else
            {
                ligne_vide = false;
                retrait = false;
                x = x2;
            }
            j = n;
            if (p != 0
                &&
                j == *iter2)
            {
                o = *iter;
                std::wcout << o;
                wstr = o;
                iter++;
                iter2++;
                oo++;
            }
            j++;
            // x ?
            n += (X - x);
            if (n > N)
            {
                n = (int)N;
            }
            }
        if (p != 0 && PP.back() <= N)
        {
            std::wcout << P.back() << endl;
            wstr = P.back();
        }
        return EXIT_SUCCESS;
    }
    Avant :
    Nom : Capture1.PNG
Affichages : 61
Taille : 90,2 Ko
    Après : J'ai oublié !!! "____" et/ou "****" ?
    Nom : Capture d’écran 2023-09-06 150142.png
Affichages : 62
Taille : 117,3 Ko

    Donc :
    • std::pair <std::wstring, int> P;
    • WriteFile(hOut, &str[0], (DWORD)(str.size() * sizeof(wchar_t)), &dwMode, NULL)


    Merci pour tous

    Mon chat est malade :
    https://www.b-lolo.fr/2023/09/11/mon-chat-est-malade/

    Alors, mal dormir !!!

  20. #320
    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 120
    Points
    12 120
    Par défaut
    https://github.com/laurentbouleau/You : Marche pas !!! Comment faire ?
    Vous devez injecter vos sources contenues dans votre machine vers Github, en utilisant un client Github ou en configurant votre projet dans Visual Studio et demander à Visual Studio de faire cette injection.
    Vous avez quoi comme client Git/Github sur votre machine ?
    (C'est une action que vous avez réussis à faire seul il y a environ 8 mois pour créer you1, donc avec un peu de travail de mémoire, peut-être que vous y arriverez de nouveau seul.)

    Mais "you1.sln" semble contenir le code que vous nous postez, on peut donc travailler avec les codes sources contenus dans "you1.sln", non ?

    Les 2 images "Avant/Après", c'est juste que la valeur de la constante de compilation "Console_Lire_txt_" n'était pas égale à 1 avant et que maintenant/après, elle est égale à 1.

    std::pair <std::wstring, int> P;
    WriteFile(hOut, &str[0], (DWORD)(str.size() * sizeof(wchar_t)), &dwMode, NULL)
    Quelle est la question ?

+ 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