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

    https://cplusplus.com/reference/utility/pair/ : ok !

    https://learn.microsoft.com/fr-fr/cp...?view=msvc-170 : ok !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector <std::wstring, std::wstring>::iterator iter;
    Ok !

    Mais :
    for (iter = avec.begin(); iter != avec.end(); iter++)
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::pair<std::wstring, std::wstring>>& avec_back = avec.back();
    ???

    Merci d'avance

  2. #262
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    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 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector <std::wstring, std::wstring>::iterator iter;
    Il manque pas un "std::pair" quelque-part ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (iter = avec.begin(); iter != avec.end(); iter++)
    C'est quoi le problème (message d'erreur, SVP) ?

    C'est un peu old-school de faire des boucles comme ça.

    La méthode "moderne" et bien plus facile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (auto& un_element_du_vector : avec)
    {
        ....
        ....un_element_du_vector.....
        ....
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::pair<std::wstring, std::wstring>>& avec_back = avec.back();
    "back" renvoie une référence sur le dernier élément du std::vector,, pas un "std::vector".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::pair<std::wstring, std::wstring>& avec_back = avec.back();
    ou encore plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    auto& avec_back = avec.back();
    P.S.: une variable qui se nomme "avec", c'est très moyen comme nom.
    Toujours faire attention au nommage des variables, c'est très important.

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

    Pas trouver !!! Fatigué !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Cinema
    {
    ...
    	std::vector<std::pair<std::wstring, std::wstring>> avec;
    ...
    	bool affichage_avec_actif = true;
    ...
    };
    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
    const void Cinema::PrintAvec()
    {
    	if (affichage_avec_actif)
    	{
    		int i = Console_Lire_txt(keyColor + L"Avec :" + valuesColor + L"\r\n", 0, 0);
    
    		std::wstring avec_str;
    		bool found = false;
    		for (auto&& [nom, role] : avec)
    		{
    			if (nom == L"…" || nom == L"..." || nom == L".")
    				{
    				found = true;
    				break;
    				}
    			if (nom != L"" && role != L"")
    			{
    				avec_str += nom + L' ' + keyColor + L"(" + valuesColor + role + keyColor + L")" + valuesColor;
    			}
    			else if (nom == L"" && role != L"")
    			{
    				avec_str += keyColor + L"(" + valuesColor + role + keyColor + L")" + valuesColor;
    			}
    			else
    			{
    				avec_str += nom;
    			}
    			if (avec.back() != ???)
    				avec_str += keyColor + L", " + valuesColor;
    			else
    				avec_str += keyColor + L'.' + valuesColor;
    		}
    		if(found)
    		    avec_str += L"…";
    		i = Console_Lire_txt(avec_str + L"\r\n", 4, 0);
    	}
    }
    Merci d'avance

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

    Comment faire : std::wcout << (xxx) * L' ';
    Et pas \t !

    Exemple (Blade Runner 2049) :
    Compositeur : Hans Zimmer
    Superviseur musical : Deva Anderson
    Compositeur : Benjamin Wallfisch
    et :
    Compositeur _____ : Hans Zimmer
    Superviseur musical : Deva Anderson
    Compositeur_____ : Benjamin Wallfisch
    Merci beaucoup

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

    C'est là où le fait de bien dissocier la récupération des données et l'affichage des données montre tout son intérêt.

    Si cette mise en forme ne s'applique qu'aux valeurs d'un fichier seul comme "Soundtrack.txt".
    La fonction "lire_paireCleValeur_depuisFichierTxt" renvoie un ensemble de paires "clé/valeur".
    Il est très simple de scanner le std::vector de paires retourné par "lire_paireCleValeur_depuisFichierTxt" pour déterminer quelle est la clé la plus longue.
    Une fois cette longueur déterminé, il y bien des façons de faire.
    Par exemple, la manière la plus simple, vraisemblablement, pour vous (mais pas forcément la plus pérenne), c'est de modifier le contenu du std::vector retourné par "lire_paireCleValeur_depuisFichierTxt" pour ajouter des espaces aux différentes clés des paires pour qu'elles aient toutes la même longueur que la clé la plus longue.
    Une fois cette "correction" faite, vous pouvez passer ce std::vector "corrigé" à votre fonction d'affichage "générique" et elle affichera simplement les paires clé/valeur alignées impeccablement sans rien changer à cette fonction d'affichage.

    Si l'alignement doit se faire sur plus de paires que celles contenus dans un seul fichier, c'est là que l'utilisation d'une instance d'objet prend son sens avec ses champs.
    to_wstring, stoi, ... ???

    Merci d'avance

  6. #266
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    383
    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 : 383
    Points : 0
    Points
    0

  7. #267
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    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 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Citation Envoyé par Laurent_B_ Voir le message
    Bonsoir,

    Pas trouver !!! Fatigué !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Cinema
    {
    ...
    	std::vector<std::pair<std::wstring, std::wstring>> avec;
    ...
    	bool affichage_avec_actif = true;
    ...
    };
    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
    const void Cinema::PrintAvec()
    {
    	if (affichage_avec_actif)
    	{
    		int i = Console_Lire_txt(keyColor + L"Avec :" + valuesColor + L"\r\n", 0, 0);
    
    		std::wstring avec_str;
    		bool found = false;
    		for (auto&& [nom, role] : avec)
    		{
    			if (nom == L"…" || nom == L"..." || nom == L".")
    				{
    				found = true;
    				break;
    				}
    			if (nom != L"" && role != L"")
    			{
    				avec_str += nom + L' ' + keyColor + L"(" + valuesColor + role + keyColor + L")" + valuesColor;
    			}
    			else if (nom == L"" && role != L"")
    			{
    				avec_str += keyColor + L"(" + valuesColor + role + keyColor + L")" + valuesColor;
    			}
    			else
    			{
    				avec_str += nom;
    			}
    			if (avec.back() != ???)
    				avec_str += keyColor + L", " + valuesColor;
    			else
    				avec_str += keyColor + L'.' + valuesColor;
    		}
    		if(found)
    		    avec_str += L"…";
    		i = Console_Lire_txt(avec_str + L"\r\n", 4, 0);
    	}
    }
    Merci d'avance
    Quel est la question ???
    Vous semblez vouloir changer le séparateur pour le dernier élément. Faites le hors de la boucle.

    Compositeur _____ : Hans Zimmer
    Superviseur musical : Deva Anderson
    Compositeur_____ : Benjamin Wallfisch
    Vous avez ces information dans un vector de paire de wstring, non ?
    Faites une boucle sur le vector pour déterminer la longueur maximum du premier élément de chaque paire.
    Ici, on aura la valeur 19 (longueur de "Superviseur musical").
    Vous n'avez qu'à ajouter "19 - longueur du premier élément de la clé" espace pour que les ":" soient alignés.
    Donc "Compositeur" devient "Compositeur"+ (19 - 11) * " " => "Compositeur ". (11, c'est la longueur de "Compositeur").

    to_wstring, stoi, ... ???
    Pourquoi stoi ???

  8. #268
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    383
    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 : 383
    Points : 0
    Points
    0
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    const void Cinema::PrintSoundtracks()
    {
    	if (affichage_soundtraks_actif && soundtrack.size() > 0)
    	{
    		size_t x = 0, xx = 0;
    		std::wstring wstr;
    		for (int i = 0; i < soundtrack.size(); i++)
    		{
    			xx = soundtrack[i].first.length();
    			if (x < xx)
    				x = xx;
    		}
    		// Exemple :
    		// Compositeur :         Hans Zimmer
    		// Superviseur musical : Deva Anderson
    		//Compositeur :          Benjamin Wallfisch
    
    		//PrintStringW(m_hOut, C_T + L"Soundtrack :" + C_t + L"\r\n");
    		int i = Console_Lire_txt(keyColor + L"Soundtrack :" + valuesColor + L"\r\n", 0, 0);
    		// Soundtrack
    		wstr = L"";
    		for (auto&& [role, nom] : soundtrack)
    		{
    			//Donc "Compositeur" devient "Compositeur" + (19 - 11) * " " = > "Compositeur ". (11, c'est la longueur de "Compositeur").
    			wstr = L" " * (x - ??? ); // "Compositeur" + (19 - 11) ???
    			int i = Console_Lire_txt(role + keyColor2 + wstr + L" : " + valuesColor2 + nom + L"\r\n", 4, 0);
    		}
    	}
    }
    ???

  9. #269
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    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 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		size_t x = 0, xx = 0;
    		std::wstring wstr;
    Prenez la peine de nommer CORRECTEMENT vos variables SVP !!!

    Pourquoi le code sous GitHub n'existe plus ?
    https://github.com/laurentbouleau/You

    Je préfère préfixer les champs membre de la classe par m_ pour un aspect pédagogique.

    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
    const void Cinema::PrintSoundtracks()
    {
    	if (affichage_soundtraks_actif && m_soundtrack.size() > 0)
    	{
    		size_t maxKeyLength = 0;
    		for (int i = 0; i < m_soundtrack.size(); i++)
    		{
    			maxKeyLength = std::max(maxKeyLength, m_soundtrack[i].first.length());
    		}
    
    		PrintTmp(keyColor + L"Soundtrack :" + valuesColor + L"\r\n");
    
    		for (auto&& [role, nom] : m_soundtrack)
    		{
    			PrintTmp( keyColor2 + role + std::wstring(maxKeyLength-role.size(), L' ') + L" : " + valuesColor2 + nom + L"\r\n");
    		}
    	}
    }

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

    https://github.com/laurentbouleau/You-1 : Ok ! (PrintStringW)
    https://github.com/laurentbouleau/You : pas trouvé (Console_Lire_txt)

    Pourtant (class Cinema) :
    #include <climits>
    #include <algorithm>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			maxKeyLength = std::max(maxKeyLength, m_soundtrack[i].first.length;
    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			maxKeyLength = max(maxKeyLength, m_soundtrack[i].first.length());
    ???

    Sinon : de, par, avec... ====> m_de, m_par, m_avec...???

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

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    const void Cinema::PrintAvec()
    {
    	if (affichage_avec_actif && avec.size())
    	{
    		int i = Console_Lire_txt(keyColor + L"Avec :" + valuesColor + L"\r\n", 0, 0);
     
    		std::wstring avec_str;
    		bool found = false;
    		for (auto&& [nom, role] : avec)
    		{
    			if (nom == L"…" || nom == L"..." || nom == L".")
    				{
    				found = true;
    				break;
    				}
    			if (nom != L"" && role != L"")
    			{
    				avec_str += nom + L' ' + keyColor2 + L"(" + valuesColor2 + role + keyColor2 + L")" + valuesColor2;
    			}
    			else if (nom == L"" && role != L"")
    			{
    				avec_str += keyColor2 + L"(" + valuesColor2 + role + keyColor2 + L")" + valuesColor2;
    			}
    			else
    			{
    				avec_str += nom;
    			}
    			if (avec.back().first != nom)
    				avec_str += keyColor2 + L", " + valuesColor2;
    			else
    				avec_str += keyColor2 + L'.' + valuesColor2;
    		}
    		if(found)
    		    avec_str += L"...";
    		i = Console_Lire_txt(avec_str + L"\r\n", 4, 0);
    	}
    }
    Ok ou pas ?

  11. #271
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    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 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Citation Envoyé par Laurent_B_ Voir le message
    Bonsoir bacelar,

    https://github.com/laurentbouleau/You-1 : Ok ! (PrintStringW)
    Non, pas OK, la fonction "Console:rintStringW" n'est pas opérationnelle, car il faut appeler "Console::init" avant. (C'est un "Work In Progress")
    Vous avez indiqué vouloir utiliser la classe Console plus tard, alors pourquoi vous en servir ?!?! (Elle n'est pas prête car vous avez voulu ne pas utiliser la classe Console, je ne comprend plus rien)
    On a créé une fonction "PrintTmp" pour attendre, et vous ne l'avez même pas défini dans "Utils.cpp" malgré l'avoir déclaré dans "Utils.h".
    Il faut mettre les .h et les .cpp d'équerre, cohérent. MAINTENANT !!!
    (Et virez-moi ces "extern" à la con)

    Citation Envoyé par Laurent_B_ Voir le message
    https://github.com/laurentbouleau/You : pas trouvé (Console_Lire_txt)
    Quand j'y accède, ce dépôt Git ne contient que 2 fichiers :
    .gitattributes
    .gitignore
    Qui ne servent à rien en dehors de la gestion du dépôt.
    Et arrêtez d'utiliser cette cochonnerie de "Console_Lire_txt".

    Citation Envoyé par Laurent_B_ Voir le message
    Pourtant (class Cinema) :
    #include <climits>
    Pourquoi ?
    Dans votre code, comme dans le mien, il me semble qu'on n'utilise aucune fonctionnalité déclarée dans "<climits>", non ?

    Citation Envoyé par Laurent_B_ Voir le message

    #include <algorithm>
    Ok, c'est "normal", c'est ce qu'indique la documentation de "std::max" :
    https://en.cppreference.com/w/cpp/algorithm/max
    Defined in header <algorithm>

    Citation Envoyé par Laurent_B_ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			maxKeyLength = std::max(maxKeyLength, m_soundtrack[i].first.length;
    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			maxKeyLength = max(maxKeyLength, m_soundtrack[i].first.length());
    ???
    C'est quoi la question ?
    Si c'est pourquoi "std::max" et pas "max" ?
    C'est que "max" a des chances d'être une vieille MACRO toute pourrie qui ne vérifie même pas le typage des paramètres.
    Donc utilisez "std::max" et pas "max".

    Et vous me virez tous ces "using namespace std;" foireux !!!

    Citation Envoyé par Laurent_B_ Voir le message
    Sinon : de, par, avec... ====> m_de, m_par, m_avec...???
    Si c'est des champs membres de la classe, oui.
    (c'est le cas dans le dépôt https://github.com/laurentbouleau/You-1 mais leurs types me semble foireux)

    Mais Pensez à utiliser des noms qui ne sont pas liés à l'affichage actuel:
    de=> auteurs
    par=> realisateurs
    avec=> casting
    Par exemple.

    Citation Envoyé par Laurent_B_ Voir le message
    --------------------------------------------

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    const void Cinema::PrintAvec()
    {
    	if (affichage_avec_actif && avec.size())
    	{
    		int i = Console_Lire_txt(keyColor + L"Avec :" + valuesColor + L"\r\n", 0, 0);
     
    		std::wstring avec_str;
    		bool found = false;
    		for (auto&& [nom, role] : avec)
    		{
    			if (nom == L"…" || nom == L"..." || nom == L".")
    				{
    				found = true;
    				break;
    				}
    			if (nom != L"" && role != L"")
    			{
    				avec_str += nom + L' ' + keyColor2 + L"(" + valuesColor2 + role + keyColor2 + L")" + valuesColor2;
    			}
    			else if (nom == L"" && role != L"")
    			{
    				avec_str += keyColor2 + L"(" + valuesColor2 + role + keyColor2 + L")" + valuesColor2;
    			}
    			else
    			{
    				avec_str += nom;
    			}
    			if (avec.back().first != nom)
    				avec_str += keyColor2 + L", " + valuesColor2;
    			else
    				avec_str += keyColor2 + L'.' + valuesColor2;
    		}
    		if(found)
    		    avec_str += L"...";
    		i = Console_Lire_txt(avec_str + L"\r\n", 4, 0);
    	}
    }
    Ok ou pas ?
    Assez Ok, mais n'utilisez plus "Console_Lire_txt", SVP.

    Il me semble que le code contenu dans la boucle 'for" n'est pas très spécifique à "Avec".
    Essayez dans faire une fonction autonome qui pourra être utilisée par d'autres parties de votre code.

    Si vous avez plusieurs personne avec le même rôle que le dernier (comme un rôle générique type "policier", etc...) votre code pour mettre des "," et des "." fait n'importe quoi.

    Votre génération de "avec_str" en fonction de la présence ou nom d'une valeur pour role et nom est assez lourde.

    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
    std::wtring GenereTexteAPartirDUneCollectionDeKeyValue(std::vector<std::pair<std::wstring, std::wstring>> textes)
    {
        std::wstring ret_str;
        bool elision_found = false;
    
        for (auto&& [key, value] : textes)
       {
            if (key== L"…" || key== L"..." || key== L".")
            {
                elision_found = true;
                break;
            }
    
            if(ret_str.size()>0) ret_str += L",";
    
            bool nokey = (key == L"");
            ret_str += (!nokey ? key : L"");
            ret_str += ((value!= L"") ? ((!nokey ? L" ": L"") + keyColor2 + L"(" + valuesColor2 + value + keyColor2 + L")" + valuesColor2) : L"")
        }
    
        ret_str += (elision_found ) ? L"..."; L".";
    
        return ret_str;
    }
    
    const void Cinema::PrintAvec()
    {
    	if (affichage_avec_actif && m_avec.size())
    	{
    		PrintTmp(keyColor + L"Avec :" + valuesColor + L"\r\n");
    
    		PrintTmp(GenereTexteAPartirDUneCollectionDeKeyValue(m_avec));
    	}
    }

  12. #272
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    383
    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 : 383
    Points : 0
    Points
    0
    Par défaut
    Pas-à-pas !
    Merci

  13. #273
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    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 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Il faut mettre les .h et les .cpp d'équerre, cohérent. MAINTENANT !!!

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

    Assez Ok, mais n'utilisez plus "Console_Lire_txt", SVP.
    Quand je n'utilise pas ça, les retours a la ligne se font n'importe où, même au milieu du mot. Alors, j'utilise Console_Lire_txt, et pas PrintStringW. Comment résoudre ce problème ???

    Merci d'avance

  15. #275
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    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 071
    Points : 12 116
    Points
    12 116
    Par défaut
    PrintStringW n'est pas opérationnel, du moins selon le code visible dans GitHub.

    Pourquoi ne pas utiliser PrintTmp ?

    Code + copie d'écran des anomalies d'affichage, SVP.

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

    Pourquoi ne pas utiliser PrintTmp ?
    Plus tard

    Code + copie d'écran des anomalies d'affichage, SVP.
    Exemple :
    e:/Films.()/+++++/A\Avatar.(2009-12-16)
    Nom : Capture d’écran 2023-02-15 211830.png
Affichages : 102
Taille : 37,1 Ko

    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
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    const void Console_Lire_txt(std::wstring lire)
    {
        std::size_t i = X / lire.length();
        int j = X % lire.length();
        int k;
        for (k = 0; k < i; k++)
            std::wcout << lire;
        k = 0;
        while (k < j)
        {
            std::wcout << (wchar_t)lire[k];
            k++;
        }
    }
     
    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;
                }
                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++;
            // y ?
            n += (X - x);
            if (n > N)
            {
                n = (int)N;
            }
        }
        if (p != 0 && PP.back() <= N/*iter == wstr*/ /* && N != *iter2*/)
        {
            std::wcout << P.back() << endl;
            wstr = P.back();
        }
        return EXIT_SUCCESS;
    }
    Merci beaucoup beaucoup beaucoup

  17. #277
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    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 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Plus tard
    Là, on va avoir un blocage.

    Soit ! "PrintStringW" n'est pas prêt car vous n'avez pas encore les bases sur l'utilisation des classes, mais ne pas utiliser "PrintTmp", qui est très simple (et un peu limité, c'est normal), cela oblige à utiliser mais aussi comprendre "Console_Lire_txt" super mal nommé, super mal fichu, super mal écrit, 10 fois plus longue que la longueur maximum acceptable pour une fonction.

    Je ne vois aucune "anomalie" dans la copie d'écran que vous nous présentez dans votre post précédent.

    Ce que je vois qui est géré dans votre copie d'écran et qu'il ne l'est pas dans les fonctions "PrintStringW" et "PrintTmp", c'est le retrait/indentation en début de paragraphe.
    "Console_Lire_txt" gère de manière très complexe (trop) cet aspect de l'affichage.

    Donc soit on doit expliquer pas à pas comment fonctionne "Console_Lire_txt" qui une horreur où il n'y absolument rien à reprendre tellement c'est nimpornawak, soit on prend notre "PrintTmp" et on implémente simplement ce qu'il manque, comme l'indentation.

    Donc on explique comment cette cochonnerie de "Console_Lire_txt" "gère" l'indentation, et vous allez pleurer, soit vous nous exposez comment devrait être rendu, s'ils le doivent, ces retraits d'indentation.
    Dans le second cas, on peut normalement facilement implémenter ces règles d'indentation avec quelques modifications (vraisemblablement dans une fonction dédiée et non dans "PrintTmp" cf. séparation du travail en tâches indépendantes).
    C'est tellement le bordel dans "Console_Lire_txt" que je peux/veux pas inférer ces règles d'indentation depuis ce "code de cochon".

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

    Dans le second cas, on peut normalement facilement implémenter ces règles d'indentation avec quelques modifications (vraisemblablement dans une fonction dédiée et non dans "PrintTmp" cf. séparation du travail en tâches indépendantes).
    Ok ! Alors ?

    Merci d'avance

  19. #279
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    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 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Donc, quelles sont ces règles ?

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

    Donc, quelles sont ces règles ?
    Ah ! Mince ! Tant pis ! Plus tard

    Film : Avatar
    Date de reprise.txt
    ---------------
    2010-09-01
    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
    const void Cinema::afficher_Date_de_reprise_ou_de_sortie(std::wstring& d_filename, const std::wstring& nomFichier)
    { // Date de reprise
    	assert((d_filename == createdBy_filename) && L"Erreur !!! Date de reprise... !");
    	std::wstring d = lire_fichierTxt(nomFichier);
    	std::size_t pos = 0;
     
    	// year
    	int year = 0;
    	year = std::stoi(d, &pos);
    	try
    	{
    		if (year <= 1900 || year >= 3001)
    		{
    			throw std::wstring(L"L'année illégale doit être l'année numérique - entre 1900 et 3001");
    		}
    	}
    	catch (runtime_error const& exception)
    	{
    		std::wcout << L"Erreur : " << exception.what() << std::endl;
    	}
    	d = d.substr(4);
    	//
    	std::wcout << L"-/. ={" << d[0] << L"}" << std::endl;
    	try
    	{
    		if (d[0] == L'-' || d[0] == L'/' || d[0] == L'.' || d[0] == L' ')
    		{
    			throw std::wstring(L"Illegal aaaaaaaa");
    		}
        }
    	catch (runtime_error const& exception)
    	{
    		std::wcout << L"Erreur : " << exception.what() << std::endl;
    	}
    	d = d.substr(1);
    	// mon
    	int mon = 0;
    	pos = 0;
    	mon = std::stoi(d, &pos);
    	try
    	{
    		if (mon <= 0 || mon >= 13)
    		{
    			throw std::wstring(L"Le mois illégal doit être un mois numérique - entre 1 et 12");
    		}
    	}
    	catch (runtime_error const& exception)
    	{
    		std::wcout << L"Erreur : " << exception.what() << std::endl;
    	}
    	d = d.substr(2);
    	//
    	try
    	{
    		if (d[0] == L'-' || d[0] == L'/' || d[0] == L'.' || d[0] == L' ')
    		{
    			throw std::wstring(L"Illegal aaaaaaaa");
    		}
    	}
    	catch (runtime_error const& exception)
    	{
    		std::wcout << L"Erreur : " << exception.what() << std::endl;
    	}
    	d = d.substr(1);
    	// mday
    	int mday = 0;
    	mday = std::stoi(d, &pos);
    	try
    	{
    		if (mday <= 0 || mday >= 32)
    		{
    			throw std::wstring(L"Le jour illégal doit être un jour numérique - entre 1 et 31");
    		}
    	}
    	catch (runtime_error const& exception)
    	{
    		std::wcout << L"Erreur : " << exception.what() << std::endl;
    	}
            //
    	std::tm date;
    	date.tm_year = year - 1900;
    	date.tm_mon = mon - 1;
    	date.tm_mday = mday;
    	if (d_filename == L"Date de reprise.txt")
    		date_de_reprise = date;
    	else
    		date_de_sortie = date;
    	}
    Explique-moi ?

    Merci énormément

+ 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