Aller au menu - Aller au contenu

Problème avec les facets

Pour les heures

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Résolu Le problème de ce sujet a été résolu

Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne Chlab_lak # Posté le 28/04/2008 à 21:22:53
Tendou
Avatar

études : Ecole Supérieure de l'ETML

Bonjour,

j'ai un problème avec mes facets, je mets le code et j'explique apres:

mon main.cpp, qui affiche chaque seconde l'heure courante
Code : C++
 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
#include <iostream>
#include <locale>
#include <Tools/Hour.hpp>
#include <Tools/Sleep.hpp>

int main(void)
{
    std::cout << "Sample : Hour\n"
                 "Ctrl+C for quit\n" << std::endl;

    ts::HourOFacet *Facet(new ts::HourOFacet("%H %M %S"));
    std::cout.imbue(std::locale(std::cout.getloc(), Facet));

    ts::SecIterator It = ts::Hour::Local();
    for(size_t i = 0; std::cout << *It++ << std::endl; ++i)
    {
        ts::Sleep(1000);

        if(i > 59)
        {
            *It = ts::Hour::Local();
            i = 0;
        }
    }

    return 0;
}


Facet.hpp
Code : C++
 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
#ifndef TOOLS_HOUR_FACET_HPP_INCLUDED
#define TOOLS_HOUR_FACET_HPP_INCLUDED

#include <string>
#include <locale>
#include <ctime>

namespace ts
{
template<typename CharT> class BasicHourOFacet
: public std::time_put<CharT>
{
    private:

        /* Typedef */
        typedef CharT                        char_type;
        typedef std::basic_string<char_type> string_type;
        typedef struct tm                    tm_type;

    public:

        /* Constructor */
        BasicHourOFacet(const char_type *Format, size_t R = 0);

        /* Destructor */
        ~BasicHourOFacet(void);

        /* To string */
        string_type ToString(const tm_type &Me) const;

        /* ID */
        static std::locale::id id;

    private:

        /* Data member */
        const char_type *myFormat;
};
}

#include <Tools/Hour/Facet.inl>

#endif // TOOLS_HOUR_FACET_HPP_INCLUDED


Facet.inl
Code : C++
 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
#include <sstream>

namespace ts
{
template<typename CharT>
std::locale::id BasicHourOFacet<CharT>::id;

template<typename CharT>
BasicHourOFacet<CharT>::BasicHourOFacet(const char_type *Format, size_t R) :
        std::time_put<char_type>(R),
        myFormat                (Format)
{}

template<typename CharT>
BasicHourOFacet<CharT>::~BasicHourOFacet(void)
{}

template<typename CharT>
std::basic_string<CharT> BasicHourOFacet<CharT>::ToString(const tm_type &Me) const
{
    std::basic_ostringstream<char_type> Oss;

    put(Oss, Oss, Oss.fill(), &Me, myFormat, myFormat + sizeof(myFormat));

    return Oss.str();
}
}


Bon mon probleme vient de (main.cpp):
Code : C++
1
ts::HourOFacet *Facet(new ts::HourOFacet("%H %M %S"));

plus precisement ca vient du "%H %M %S", seul les quatres premiers caracteres sont "pris" (càd "%H %"), et je ne comprends pas pourquoi (ca doit venir de ts::BasicHourOFacet::ToString())

Voilà, si j'ai pas été assez clair dites-le moi.
Merci
Édité le 30/04/2008 à 15:36:09 par Chlab_lak
 
Hors ligne Chlab_lak # Posté le 30/04/2008 à 14:12:22
Tendou
Avatar

études : Ecole Supérieure de l'ETML

pour apporter quelques infos, le code suivant marche:
Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <sstream>
#include <locale>
#include <ctime>

int main(void)
{
    time_t TimeT = std::time(0);
    const struct tm *Time = std::localtime(&TimeT);

    const char Format[] = "%H %M %S";
    const std::time_put<char> &TimePut = 
        std::use_facet<std::time_put<char> >(std::cout.getloc());

    std::ostringstream Oss;
    TimePut.put(Oss, Oss, Oss.fill(), Time, Format, Format + sizeof(Format));

    std::cout << Oss.str() << std::endl;

    return 0;
}


il est basé sur le meme principe que ma facet, pourtant avec ma facet ca ne marche pas, donc je UP

Merci
Édité le 30/04/2008 à 15:36:34 par Chlab_lak
 
Hors ligne lmghs # Posté le 30/04/2008 à 21:56:27

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Cela fait trop longtemps que je n'ai plus joué avec les facets.

Je n'ai donc que des pointeurs à te donner: la référence : ce qu'à écrit Angelika Langer (et Klaus Kreft (?)) sur le sujet -- on en retrouve une partie sur son site, leur livre, je soupçonne fortement qu'ils ont participé à la doc de Roguewave.

Sinon, tente ta question sur developpez, ou mieux fclc++.
 
Hors ligne Chlab_lak # Posté le 30/04/2008 à 22:18:49
Tendou
Avatar

études : Ecole Supérieure de l'ETML

Retour au forum "Langage C++" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx