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 :

probleme concatenation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Par défaut probleme concatenation
    Bonjour, j'essaye de concatener une date que j'ai recueulli grace a la fonction CurrentDate() de TDateTime (format jj/mm/aaaa). Je recupere son resultat dans un AnsiString puis le met dans un char grace a c_str(). Le probleme vient ensuite, lorsque je recupere les infos, ça passe nikel mais des que je veux les regrouper grace a sprintf ou encore strcat sous la forme aaaa-jj-mm, je ne recois plus du tout les bons chiffres et cela modifie meme mes variables préalablement initialisé avec les bonnes valeurs. Voici mon code pour plus de precision :

    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
            char Annee[4];
            char Mois[2];
            char Jour[2];
            char Date2[10];
            int i,j,k;
            int h=0;
            int d=0;
     
            Date = HeureDateCourante.CurrentDate();
     
            char *Date1 = Date.c_str();
     
            for(i=0;i <= 1;i++)
            {
              Jour[i] = Date1[i];
            }
            for(j=3;j <= 4;j++)
            {
              Mois[h] = Date1[j];
              h++;
            }
            for(k=6;k <= 9;k++)
            {
              Annee[d] = Date1[k];
              d++;
            }
     
            Annee[4]='\0';
            Jour[2]='\0';
            Mois[2]='\0';
     
            sprintf(Date2,"%s-%s-%s",Annee,Jour,Mois);
     
            Heure = HeureDateCourante.CurrentTime();
            *IHeure=Heure;
            *IDate=Date2;
    J'ai meme essayer avec atoi pour transformer le contenu des tableaux Annee, Jour et Mois en decimal, mais cela reviens au meme. Voici ce que j'obtiens : "0-11-0" dans le meilleur des cas.
    Merci d'avance.
    john


    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pourquoi repasser par des char*, alors que tu as des AnsiString ? A part pondre beaucoup de code pour rien ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Par défaut
    car en fait, je dois retransformer la date de la forme jj/mm/aaaa pour la passer sous la forme aaaa-jj-mm pour la mettre dans une base de donnée mysql emulée par easyphp. A moins qu'il y ai une solution plus simple pour manipuler la date a ma guise ???

  4. #4
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    Il te faut non pas un char [4] mais un char [5]... car il y a certe 4 caractères dans une année, mais il y a aussi le caractere de fin de chaine...
    de même pour la date et le mois....
    Il serai plus facile d'utiliser des std::string que des char*....

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Par défaut
    Ok, j'ai tester en mettant +1 aux char et 14 au Date2, ainsi que cette commande sprintf(Date2,"%04d-%02d-%02d", Annee, Jour, Mois ); et en mettant :
    Annee[5]='\0';
    Jour[3]='\0';
    Mois[3]='\0';
    En executant en pas a pas, je lis les valeurs "\0006H" dans Annee, "11x" dans Jour, et "\03\0" dans Mois. A la fin je reaffiche Date2 dans un memo et voila ce que cela me donne : 1241280-1241274-1241277 qui n'a rien a voir avec les valeurs des variables Annee, Jour et Mois.
    Merci d'avance pour votre aide.
    John

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Bonsoir

    Voiçi un petit exemple pour reformater la représentation visuelle d' une date en C++ :
    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
     
    #include <iostream>
    #include <iomanip>
    #include <sstream>
    #include <string>
     
    using namespace std ;
     
    string getDate()
    { string d ( "01/03/2006" ) ;
      return d ;
    }
     
    string newFormat( const string& d, char sep )
    { int a, m, j ;
      char c ;
      istringstream is ( d ) ;
     
      is >> j >> c >> m >> c >>  a ;
     
      ostringstream os ;
      os << setfill('0') << setw(4) << a << sep 
         << setw(2) << m << sep 
         << setw(2) << j << endl ;
      return os.str() ;
    }
     
    void do1()
    { string d( getDate() ) ;
      cout << d << endl ;
      string d1 ( newFormat( d , '-' ) ) ;
      cout << d1 << endl ;
    }
     
    int main()
    { do1() ;
      return 0 ;
    }
    Je me suis servi d' une fonction exotique getDate à la place de x.CurrentDate() .

    CurrentDate renvoît quoi , et sous quel format ?
    Si c' est une AnsiString , prévoir des ajustements.

    Cordialement.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Rien ne t'empêche de faire ce que tu veux avec une classe de chaînes (AnsiString si tu l'utilises déjà, sinon std::string). Les manips que tu effectueras (découpage, concaténation, ...) seront bien plus sûres et simples qu'avec des char* et des fonctions C.

  8. #8
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    C'est ce que je disais... Il est beaucoup plus simple d'utiliser les std::string...
    L'erreur d'indice n'aurai pas eu lieu.

Discussions similaires

  1. Probleme Concatenation VBA
    Par vadius dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 08/07/2011, 12h38
  2. probleme concatenation AnsiString
    Par manworms2 dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/12/2008, 21h42
  3. Probleme concatenation avec postgresql
    Par JUSTIN Loïc dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 24/08/2006, 15h49
  4. probleme concatenation
    Par OrgaNik dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/09/2005, 09h44
  5. probleme de concatenation
    Par cyna dans le forum C
    Réponses: 2
    Dernier message: 23/08/2002, 10h41

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