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 :

Aide pour composer puis écrire & lire dans un tableau


Sujet :

C

  1. #21
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Hé bien pour faire ça il te faudra ton tableau volet_jour de int et un tableau 2D de char. Ensuite tu fais une boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char charvolets_jour[25][10];
    for (i = 0; i < 25; i++) {
        itoa(volets_jour[i], charvolets_jour[i]);
    }

  2. #22
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    Merci de ton aide,

    Je me suis inspiré de tes exemples pour créer une fonction qui automatisera la transformation de mon tableau d'entier (int) vers un buffer de caractère qui recevra chaque ligne du tableau une à une puis écrira son contenu dans une mémoire eeprom.

    Ma fonction me pose un petit problème que je ne sais pas résoudre.

    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
     
    int volets_jour[25];
    char buffer_volets_jour[25][2+1];
    char mini_eeprom_buffer[2+1];
     
    ...
     
    static void Store_eeprom_volets_jour (LWORD address_start)
    {
        int i, j;
    	// Transformera chaque ligne du tableau numérique volets_jour en un tableau de charactères
    	// chaque ligne contiendra son équivalent entier vers  2 caractères  Ex : int 1 deviendra char 01
    	for(i = 0; i < 25; ++i)
    		{
    		sprintf (buffer_volets_jour[i], (far rom char*)"%02i", volets_jour[i]);
    		// Remplissage automatique puis écriture dans l'eeprom :
    		// buffer_volets_jour[1]
    		// ...
    		// buffer_volets_jour[25]
     
    		strcpy (mini_eeprom_buffer, buffer_volets_jour[i]);   
                    // si i est remplacé manuellement par un nombre : tout va bien 
     
    		    	XEEBeginWrite(EEPROM_CONTROL, address_start);
    		    	for(j = 0; j < strlen(mini_eeprom_buffer); ++j) 
    					{
    			   	 	XE2Write(mini_eeprom_buffer[j]);
    					}
    		    		XE2EndWrite();
    		}
    }
    Mon soucis se situe au niveau de l'écriture du buffer de caractères : mini_eeprom_buffer

    Lorsque je stipule je rentre manuellement le rang à copier dans la mémoire eeprom, la copie se fait correctement sans erreur :

    A titre d'essai, si je remplace i par un nombre tout va bien :
    strcpy (mini_eeprom_buffer, buffer_volets_jour[1]);


    Si par contre je remplace le rang par i, ( i étant le n° du rang du tableau d'entiers ) alors la fonction écrit des caractères inattendus dans mini_eeprom_buffer,


    Pourriez vous me dire ce qu'il ne va pas ?
    Je vous remercie beaucoup,

  3. #23
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    Peut on faire un strcpy avec [i] ?

    La ligne suivante pose pb, et je ne sais pas comment faire pour qu'a chaque valeur de i, qui défini le rang du tableau buffer_volets_jour, la donnée correspondante soit copiée dans mini_eeprom_buffer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcpy (mini_eeprom_buffer, buffer_volets_jour[i]);

    Pourriez vous m'aider en me corrigeant cette ligne svp ?

  4. #24
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 078
    Points : 2 334
    Points
    2 334
    Par défaut
    Euh ?

    strcpy, c'est pour copier des chaine de caractere, pas mettre un caratere dans une chaine.

    Si tu veux mettre un caractere dans une chaine, tu fais

    chaine[indice] = caractere, a condition que chaine puisse avoir ses valeurs modifier.

    Apparemment, une simple boucle suffirait à faire ce que tu veux.

  5. #25
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    Alors je reprends pour vous expliquer ce que je cherche à faire :

    Je voudrai générer une fonction boucle qui traitera les unes après les autres , les 25 lignes d'un tableau numérique appelé volets_jour :


    - volets_jour est un tableau int de 25 lignes : chaque ligne du tableau contient 1 ou 2 chiffres : 1, 13, 7, 22, 9 ...

    - J'ai besoin de lire chaque ligne de ce tableau numérique : volets_jour
    puis convertir à chaque fois l'entier en son équivalent chiffré vers un tableau de caractères appelé buffer_volets_jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char buffer_volets_jour[25][2+1];
    - j'ai besoin d'effectuer un formatage avant de stocker les entiers dans le tableau de caractère, ex : si dans le tableau int j'ai une ligne qui contient un chiffre unique : 1, 7, 9 ... celui ci sera deviendra 01 , 07, 09 ( 0 ajouté devant le chiffre )

    - Stocker chaque ligne du tableau de caractères buffer_volets_jour dans une mémoire eeprom avec la fonction existante : XE2Write

    address_start sera un paramètre de la fonction

    Ex : si en utilisant la fonction on défini address_start à 0x000000 par exemple, les ecritures successives dans l'eeprom seront pour la 1ere ecriture à 0x000000 puis la suivante à 0x000003 puis 0x000006 ... etc ...

    En effet, on sait que chaque ligne de buffer_volets_jour contiendra 2 caractères on indiquera donc au programme que la prochaine adresse d'ecriture sera address_start +3, ainsi la mémoire eeprom se remplira au fur et à mesure pour stocker à la suite les 25 lignes de buffer_volets_jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		XEEBeginWrite(EEPROM_CONTROL, address_start);
    		for(k = 0; k < strlen(buffer_volets_jour); ++k) 
    					{
    			   	 	XE2Write(buffer_volets_jour[k]);
    					}
    		XE2EndWrite();
                    address_start += 0x000003

    D'ou mon idée de créer une fonction qui ressemble à cela, mais ça ne fonctionne pas ...

    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
    void Store_eeprom2_volets_jour (LWORD address_start)
    {
        BYTE i, k;
     
    	// Formatage de chaque ligne du tableau numérique volets_jour en un tableau de charactères
    	// chaque ligne contiendra son équivalent entier vers  2 caractères  Ex : int 1 deviendra char 01
    	for(i = 0; i < 25; ++i)
    		{
    		sprintf (buffer_volets_jour[i], (far rom char*)"%02i", volets_jour[i]);
    		// Remplissage :
    		// buffer_volets_jour[1]
    		// ...
    		// buffer_volets_jour[25]
     
    		// Est ce utile de passer ici par un buffer de caractère temporaire ?
    		mini_eeprom_buffer = buffer_volets_jour[i];  
     
    				// Ecriture de mini_eeprom_buffer dans l'eeprom 				
    				XEEBeginWrite(EEPROM_CONTROL, address_start);
    		    		for(k = 0; k < strlen(mini_eeprom_buffer); ++k) 
    					{
    			   	 	XE2Write(mini_eeprom_buffer[k]);
    					}
    		    	XE2EndWrite();
     
    				// incrémente de +3 l'adresse de départ pour la prochaine écriture dans l'eeprom
    				address_start += 0x000003
    		}		
    }

    Le résultat final attendu serait ceci , exemple :

    Store_eeprom2_volets_jour(0x000000);


    address_start : 0x000000

    si le tableau int volets_jour qui contient 1 , 4, 7, 10, 5, 13 ... 8

    alors le tableau buffer_volets_jour contiendra : 01, 04, 10, 05, 13 ... 08

    et l'eeprom se remplira ainsi :

    adresse 0x000000 : 01
    adresse 0x000003 : 04
    adresse 0x000006 : 10
    adresse 0x000009 : 05
    adresse 0x00000C : 13
    ...
    adresse 0x000019 : 08



    Merci de votre aide,

Discussions similaires

  1. [PERL] Aide pour monter des données en ligne dans un tableau
    Par bouligoulag dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 03/02/2014, 19h54
  2. Réponses: 1
    Dernier message: 26/11/2007, 08h26
  3. écrire et lire dans les registre
    Par patou41000 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 19/06/2007, 08h19
  4. [Débutant] Comment écrire et lire dans un fichier
    Par jeanver dans le forum Delphi
    Réponses: 6
    Dernier message: 15/02/2007, 01h02
  5. Problème pour lire dans un tableau ...
    Par themis dans le forum Oracle
    Réponses: 1
    Dernier message: 15/02/2006, 18h04

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