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 :

Stocker chaîne de caractères dans un tableau


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 43
    Points
    43
    Par défaut Stocker chaîne de caractères dans un tableau
    Bonjour,
    suite à un problème que j'avais ds un autre poste qui était de récupérer la date et l'heure je viens vous demander conseil,

    En effet, arrivant a récupérer date et heure, je voudrais la décomposé.

    Je m'explique :
    je reçois cette chaine de caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date: Fri, 16 May 2008 16:28:04 GM
    via le code suivant :
    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
    while (1)
    	{
    			if (DataRdyUART())				
    			{
    			j = ReadUART();
    				if (j =='D')
    				{
    				while(1)
    					{
    					j = ReadUART();
    					WriteUART(j);
    						if (j == 'S') 
    							{
    							putrsUART("\r\n");
    							f = 1;
    							break;
    							}
    					}
    				}
    				if ( f == 1 ) break;
    			}
    	}

    mais je voudrais tout décomposer pour tout décomposé du style JJ/MM/YY et HH/mm/ss

    je pensais partir sur un solution comme
    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
    ]while (1)
    	{
    			if (DataRdyUART())				
    			{
    			j = ReadUART();
    				if (j =='D')
    				{
    				while(1)
    					{
    					j = ReadUART();
    					DATE[i] = j;
    						if (j == 'S') 
    							{
    							putrsUART("\r\n");
    							f = 1;
    							break;
    							}
                                             i++;
    					}
    				}
    				if ( f == 1 ) break;
    			}
    	}
    par contre pour apres retirer les caractère 2 a 2 je ne vois pas trop comment.
    Car je voudrais a partir de ce tableau créer des variables.

    je ne sais pas si je suis clair...

    en vous remerciant pour votre aide!

  2. #2
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Je pense que tu vas trouver ton bonheur dans la FAQ C du site
    Comment décomposer une date :clique ici

    Comme tu débutes (je demi-débute ) tu gagneras peut être du temps si je pointe le fait que dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     struct tm *t;
     t = gmtime(&timestamp);
    " t " est un pointeur sur une structure tm . Donc si tu veux obtenir les différents champs de la structure il faut utiliser la syntaxe suivante (par exemple pour le jour du mois j )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int j;
    j=t->tm_mday;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    je te remercie pour ta réponse,

    j'avais remarqué le FAQ pour la date...

    mais je ne vois pas du tout comment m'en servir, que dois je lui rentrer?
    une chaine de caractère? un tableau? je vais regarder cela de plus près.

    Deplus je n'est pas la fonction gmtime.

    en effet mon support est un pic 24F, mais j'ai bien un même type de fonction dans ma stack. et donc un équivalent a gmtime.

    Le truc c'est que lorsque je démarre mon système, j'ai bien une bonne incrémentassions des secondes, minute, heure....date. Mais si je démarre le montage a 14h, pour le système il est 00:00:00....
    je veux donc le mettre a l'heure via la chaine de caractères que je récupère.

    mais je bloque sur le comment mettre a jour, ce que je doit fournir a la fonction pour cela.

    merci encore

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Lis quelques tutoriels de plus sur les pointeurs et les chaines de caractère en C si tu veux décomposer ta date qui est sous la forme d'une chaine de caractères et pas un timestamp .

    EDIT :

    bon allez un tip, tu fais une boucle qui remplit les éléments d'un tableau ARRAY[Y] de caractères jusqu'à ce qu'elle arrive au caractère ' ' ( un espace quoi ), là tu incrémentes Y et tu refais le tout jusqu'à ce que t'atteint le caractère 0 ( désignant la fin d'une chaine de caractères ) .

    Même chose pour les virgules ... ( tu ne pouvais vraiment pas faire cela en papier au moins ? car en tant qu'être humain, c'est comme ça qu'on pense )

    EDIT 2 : quelques modifications pour rendre ce que j'ai écrit plus "lisible"
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    Merci

    c'est que je pensais faire, mais je dois avoir une erreur car je n'affiche rien :


    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
     
    while (1)
    	{
    			printf("a");  // balise
    			if (DataRdyUART())				
    			{
    			j = ReadUART();
    				if (j =='D')
    				{
    				while(1)
    					{
    					printf("b");   // balise
    					j = ReadUART();
    					DATE[i] = j;
    					if (j == ' ' || j == ':') i++;
    					if ( j == '\0' || i == 15) 
    						{					
    						f = 1;
    						break;
    						}
    					}
    				}
    			}
    		if (f == 1) break;
    	}
     
    		strcpy(HEURE,DATE);
    		printf("=> %s",HEURE);
    }

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    bonjour tt le monde,

    je viens juste pour vous annoncer que j'ai réussi à faire qq chose de potable...

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char date [30]= "mardi 14 avril 2006, 12:34:54";
    char jour [10];
    char mois [10];
    char annee [10];
    char heure [10];
    char minute [10];
    char seconde [10];
     
    char JOUR [10];
    char MOIS [10];
    char ANNEE [10];
    char HEURE [10];
    char MINUTE [10];
    char SECONDE [10];
     
    int i = 0;
     
    int main (int argc, char *argv[])
    {
        printf("bonjour programme lecture tableau !!!\r\n\r\n");
     
     
    jour[0] = date [0];
    jour[1] = date [1];
    jour[2] = date [2];
    jour[3] = date [3];
    jour[4] = date [4];
    jour[5] = date [5];
     
           strcpy(JOUR,jour);   
           printf("jour : %s",JOUR);
     
    mois[0] = date [9];
    mois[1] = date [10];
    mois[2] = date [11];
    mois[3] = date [12];
    mois[4] = date [13];
     
           strcpy(MOIS,mois);   
           printf("\r\nmois : %s",MOIS);    
     
    annee[0] = date [15];
    annee[1] = date [16];
    annee[2] = date [17];
    annee[3] = date [18];
     
           strcpy(ANNEE,annee);   
           printf("\r\nannee : %s",ANNEE);    
     
     
    heure [0] = date [21];       
    heure [1] = date [22];       
     
           strcpy(HEURE,heure);   
           printf("\r\nheure : %s",HEURE); 
     
    minute [0] = date [24];       
    minute [1] = date [25];      
     
           strcpy(MINUTE,minute);   
           printf("\r\nminute : %s",MINUTE);   
     
    seconde [0] = date [27];       
    seconde [1] = date [28];      
     
           strcpy(SECONDE,seconde);   
           printf("\r\nseconde : %s",SECONDE); 
     
     
    printf("\r\nafichage de l'heure");
     
     
    while(1)
    {
    printf("\r\n%s:%s:%s\r\n",HEURE,MINUTE,SECONDE);   
    system("pause");
    }
     
     
     
        printf("\r\n");
        system("pause");
        return(0);
    }


    mais bizarrement je suis obliger de remplir chaque case du tableau, car en automatique (boucle for) cela me remplie que les première cases (jour).
    pour le reste, bien je n'est rien....
    Mais bon le résultat, est pas trop mal.

    par contre qd je fais mes test sous DEVc++ pas de pb,
    qd j'intègre mon programme sur mon pic des caractère bizard apparaisse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    LA DATE EST :  Tue, 20 May 2008 15:33:53 GMT  // chaine de caractère ds buffer
     
    jour : Tueÿ   // décomposition du buffer
    mois : May
    annee : 2008¦
    heure : 15
    minute : 33F
    seconde : 53|W
     
    15:33F:53|W   // recomposition de la date
    d'ou viennent ces caractère? y a t'il un moyen de les supprimer facilement?

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    essaye de comprendre avant de faire n'importe quoi en recopiant un algo...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tiya17 Voir le message
    bonjour tt le monde,

    je viens juste pour vous annoncer que j'ai réussi à faire qq chose de potable...

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char date [30]= "mardi 14 avril 2006, 12:34:54";
    char jour [10];
    char mois [10];
    char annee [10];
    char heure [10];
    char minute [10];
    char seconde [10];
     
    char JOUR [10];
    char MOIS [10];
    char ANNEE [10];
    char HEURE [10];
    char MINUTE [10];
    char SECONDE [10];
     
    int i = 0;
     
    int main (int argc, char *argv[])
    {
        printf("bonjour programme lecture tableau !!!\r\n\r\n");
     
     
    jour[0] = date [0];
    jour[1] = date [1];
    jour[2] = date [2];
    jour[3] = date [3];
    jour[4] = date [4];
    jour[5] = date [5];
     
           strcpy(JOUR,jour);   
           printf("jour : %s",JOUR);
     
    mois[0] = date [9];
    mois[1] = date [10];
    mois[2] = date [11];
    mois[3] = date [12];
    mois[4] = date [13];
     
           strcpy(MOIS,mois);   
           printf("\r\nmois : %s",MOIS);    
     
    annee[0] = date [15];
    annee[1] = date [16];
    annee[2] = date [17];
    annee[3] = date [18];
     
           strcpy(ANNEE,annee);   
           printf("\r\nannee : %s",ANNEE);    
     
     
    heure [0] = date [21];       
    heure [1] = date [22];       
     
           strcpy(HEURE,heure);   
           printf("\r\nheure : %s",HEURE); 
     
    minute [0] = date [24];       
    minute [1] = date [25];      
     
           strcpy(MINUTE,minute);   
           printf("\r\nminute : %s",MINUTE);   
     
    seconde [0] = date [27];       
    seconde [1] = date [28];      
     
           strcpy(SECONDE,seconde);   
           printf("\r\nseconde : %s",SECONDE); 
     
     
    printf("\r\nafichage de l'heure");
     
     
    while(1)
    {
    printf("\r\n%s:%s:%s\r\n",HEURE,MINUTE,SECONDE);   
    system("pause");
    }
     
     
     
        printf("\r\n");
        system("pause");
        return(0);
    }


    mais bizarrement je suis obliger de remplir chaque case du tableau, car en automatique (boucle for) cela me remplie que les première cases (jour).
    pour le reste, bien je n'est rien....
    Mais bon le résultat, est pas trop mal.

    par contre qd je fais mes test sous DEVc++ pas de pb,
    qd j'intègre mon programme sur mon pic des caractère bizard apparaisse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    LA DATE EST :  Tue, 20 May 2008 15:33:53 GMT  // chaine de caractère ds buffer
     
    jour : Tueÿ   // décomposition du buffer
    mois : May
    annee : 2008¦
    heure : 15
    minute : 33F
    seconde : 53|W
     
    15:33F:53|W   // recomposition de la date
    d'ou viennent ces caractère? y a t'il un moyen de les supprimer facilement?
    Je ne comprends pas pourquoi tu
    - copies octet par octet une zone X dans une zone Y (t'as memcpy() pour ça)
    - copies la zone Y dans la zone Z par strcpy()

    Par ailleurs, tes zones que tu copies par strcpy() ne sont pas des chaînes car t'y as pas mis le '\0'. Donc comme ce ne sont pas des chaînes, t'as pas le droit d'utiliser strcpy() (sous-entendu => si tu le fais quand-même tu obtiens n'importe quoi mais c'est en écrivant n'importe quoi qu'on devient n'importe qui...)

    Et enfin voir la remarque de Souviron34 qui, pour être brève, n'en est pas moins éloquente...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    eeee j'ai rien recopier du tout lol!!!

    par contre oui j'avais oublier le caractère '\0'; sa marche désormais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    jour : Wed
    mois : May
    annee : 2008
    heure : 07
    minute : 25
    seconde : 00
    Merci !!

    mais pour quoi sa marche lorsque j'exécute sous devc++

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tiya17 Voir le message
    eeee j'ai rien recopier du tout lol!!!
    Si. Lorsque tu écris "jour[0] = date [0]" il s'agit d'une copie. Et quand tu écris strcpy(x, y) il s'agit encore d'une autre copie.

    Citation Envoyé par tiya17 Voir le message
    mais pour quoi sa marche lorsque j'exécute sous devc++
    Typique du comportement indéterminé => en C, si tu ne respectes pas les règles, tu tombes dans un comportement qui peut marcher "par hasard" mais qui n'est pas assuré de marcher "tout le temps". Ca peut marcher pendant 1 jour, un mois, un an puis tu rajoutes une instruction totalement bateau style printf("hello") et là, ça marche plus. On appelle ça le "comportement indéterminé". Et bien que le bug semble venir du compilo, tu en es seul responsable...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Si. Lorsque tu écris "jour[0] = date [0]" il s'agit d'une copie. Et quand tu écris strcpy(x, y) il s'agit encore d'une autre copie.
    oui je m'en rencontre désormais.... je voulais transformer un char en int.... mais cela ne le faisait pas du tout.
    Je connais maintenant la fonction atoi() qui pertmet de convertir en int....

Discussions similaires

  1. [XL-2010] Vérfier la présence de deux chaînes de caractères dans un tableau
    Par jérémyp8 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/06/2013, 17h18
  2. [AC-2007] chaîne de caractère dans un tableau - Erreur 13
    Par skippy86 dans le forum VBA Access
    Réponses: 8
    Dernier message: 06/08/2010, 11h29
  3. [16F876] Ecrire des chaînes de caractères dans un tableau
    Par aminousse dans le forum Autres architectures
    Réponses: 0
    Dernier message: 01/03/2008, 01h08
  4. Remplir une chaîne de caractère dans un tableau
    Par Windsor123 dans le forum C
    Réponses: 4
    Dernier message: 03/11/2007, 01h29
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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