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 :

convertir tableau d'entier en char[]


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Points : 12
    Points
    12
    Par défaut convertir tableau d'entier en char[]
    bonjour j'ai un soucis je souhaiterai écrire dans un fichier le contenu d'un tableau d'entier jaimerai savoir comment faire pour convertir assez simplement cette suite d'entier en tableau de char (séparés par des espaces) merci d'avance de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    si c'est pour écrire dans un fichier texte, tu devrais faire une boucle qui parcoure ton tableau et écrire chaque entier avec fprintf()...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    en fait ce que je voulais faire cest dabord mettre tout ces entiers dans un char[] pour ensuite utiliser le fprintf avec le char[].et non pas boucler pour ecrire 100 fois dans le fichier

  4. #4
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Dans ce cas, tu peux utiliser fwrite() pour écrire tout ton tableau d'un coup.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(tab, sizeof tab, 1, handle);
    Nas'

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Mais là, tous les entiers seront écrits sous forme binaire et non pas en texte.
    Attention si tu comptes faire marcher ton programme ailleurs que sur un PC: sur un gros serveur UNIX par exemple, les fichiers ne seront pas compatibles, pour des problèmes d'endianness

  6. #6
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut Re: convertir tableau d'entier en char[]
    Citation Envoyé par nin47
    bonjour j'ai un soucis je souhaiterai écrire dans un fichier le contenu d'un tableau d'entier jaimerai savoir comment faire pour convertir assez simplement cette suite d'entier en tableau de char (séparés par des espaces) merci d'avance de votre aide
    simplement, je ne pense pas.
    En effet deja pour la taille du tableau c'est un peu du au pif car si ton tableau de int contient des nombres > 9 (ce que je pense) le chiffre > 9 prend 2 cases dans ton tableau.
    Mais bon après on peut y arriver (je pense) avec des boucles.

    Tiens prend ce code il fonctionne, et j'ai meme rajouter le calcul de la taille du tableau de char ^^

    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
     
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
            char *b,d[10];
            int z[5]={4, 5, 10, 50, 156};
            int a,c;
            int tailletableauchar=0;
            int tailletableauint=5;
            for(a=0; a<5; a++) { sprintf(d,"%d", z[a]); tailletableauchar+=strlen(d); } // calcul de la taille du tableau de char
            tailletableauchar+=tailletableauint; // pour rajouter les espaces (autant d'espaces que de int dans le tableau)
            tailletableauchar++; // pour le \0
            b=malloc(sizeof(char)*tailletableauchar); // on cree le tableau dynamiquement
            for(a=0,c=0; c < tailletableauint; c++,a++) { sprintf(d,"%d",z[c]); sprintf(&b[a],"%d", z[c]); a+=strlen(d); sprintf(&b[a]," "); }
            b[tailletableauchar-1]=0; // on ajoute le \0
            printf("%s\n", b);
            free(b);
            return 0;
    }

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nin47
    en fait ce que je voulais faire cest dabord mettre tout ces entiers dans un char[] pour ensuite utiliser le fprintf avec le char[].et non pas boucler pour ecrire 100 fois dans le fichier
    Ca n'a aucune importance. Les flux sont bufferisés, et à moins que tu mettes un fflush() à chaque tour, les données seront écrites à la volée dans les buffers systèmes et finalement écrites sur le disque au moment de la fermeture.

    Tu te compliques la vie pour rien, à moins que tu veuilles faire des traitements globaux sur les données (tri, par exemple) avant de les stocker...

    Si c'est ça, il va falloir jouer du malloc() ou du strdup() [POSIX.1].

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    euh en fait j'ai pris le probleme par le mauvais bout

    en fait je voudrait savoir comment organiser mon fichier pour y stocker le contenu dun struct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // definition d'un tableau de 50 caracteres significatifs
    typedef char TabCar [50 + 1] ;
     
    // definition d'un tableau de 1000 entiers
    typedef int TabInt [1000 + 1] ;
     
    typedef struct
    {
        TabCar y ;
        TabInt x ;
        int z ;
    } enreg ;
    voilà et en fait je voudrai stocker des enreg dans le fichier texte sachant que je doit pouvoir en ajouter en supprimer et en ecraser

    Si vous pouviez m'aider ça serait sympa

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nin47
    en fait je voudrait savoir comment organiser mon fichier pour y stocker le contenu dun struct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // definition d'un tableau de 50 caracteres significatifs
    typedef char TabCar [50 + 1] ;
     
    // definition d'un tableau de 1000 entiers
    typedef int TabInt [1000 + 1] ;
    Pourquoi '+1' ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct
    {
        TabCar y ;
        TabInt x ;
        int z ;
    } enreg ;
    voilà et en fait je voudrai stocker des enreg dans le fichier texte sachant que je doit pouvoir en ajouter en supprimer et en ecraser
    • La méthode simple (pas portable) : mapping direct avec fwrite() / fread().
    • La méthode très portable mais un peu lourde : définir un format texte (orienté lignes, genre CSV), convertir et enregistrer en texte. A la lecture, analyser et convertir en données numériques... (fgets(), sscanf(), strtol() etc.)

    S'entrainer sur des petites structures et des petits fichiers...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Pourquoi '+1' ?
    Parce que c'est pas moi qui ai défini ce type et que la personne chargée de la faire l'a défini comme ça

    Citation Envoyé par Emmanuel Delahaye
    mapping direct avec fwrite() / fread().
    Euh le terme de mapping direct m'échappe complétement est ce que tu pourrai me donner un exemple de fwrite et fread par "mapping direct" ?

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nin47
    Citation Envoyé par Emmanuel Delahaye
    mapping direct avec fwrite() / fread().
    Euh le terme de mapping direct m'échappe complétement est ce que tu pourrai me donner un exemple de fwrite et fread par "mapping direct" ?
    Il n'y a rien de particulier. Ca consiste à recopier un bloc mémoire sur le disque sans aucune interprétation.

    Suffit de lire la doc de ces fonctions. Fait de essais et poste le code qui ne fonctionne pas.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Bon j'arrive maintenant à lire et écrire mes struct dans le fichier mais je souhaiterai maintenant pouvoir en effacer un et je ne pense pas pouvoir me servir de fwrite pour cela ou du moins je ne vois pas comment ... si vous pouviez m'indiquer la fonction adéquat

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nin47
    Bon j'arrive maintenant à lire et écrire mes struct dans le fichier mais je souhaiterai maintenant pouvoir en effacer un et je ne pense pas pouvoir me servir de fwrite pour cela ou du moins je ne vois pas comment ... si vous pouviez m'indiquer la fonction adéquat
    On ne peut pas "effacer". On peut soit 'marquer' l'enegistrement 'effacé' en jouant avec les modes "r+" ou "w+" et fseek(), soit recopier les données dans un autre fichier en utilisant un filtre, soit gérer un fichier d'index...

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    euh je sais que ça n'a pas grand chose à voir avec le theme de debut mais tant que j'y suis ... je voulais savoir s'il existait une bibliotheque ou une fonction qui permettais de lancer des impressions (des des vrais impressions, pas à l'ecran)
    merci d'avance

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nin47
    euh je sais que ça n'a pas grand chose à voir avec le theme de debut mais tant que j'y suis ... je voulais savoir s'il existait une bibliotheque ou une fonction qui permettais de lancer des impressions (des des vrais impressions, pas à l'ecran)
    L'impression est gérée par le système. Chaque système fourni ses API 'impression'.

    A voir dans le forum concerné.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    je reviens à mon histoire de struct stocké dans un fichier
    je voulais savoir, d'après vous, quelle était la meilleur manière pour trier les enregitrement selon un champ (trier mes struct par ordre alphabétique en quelques sorte) voilà donc je voulais savoir ce que vous me conseillieriez merci d'avance
    Que se soit au niveau du type de tri (insertion etc) et de la maniere dont trier (paser par un fichier temporaire etc) merci beaucoup de votre aide

  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nin47
    je reviens à mon histoire de struct stocké dans un fichier
    je voulais savoir, d'après vous, quelle était la meilleur manière pour trier les enregitrement selon un champ (trier mes struct par ordre alphabétique en quelques sorte) voilà donc je voulais savoir ce que vous me conseillieriez merci d'avance
    Que se soit au niveau du type de tri (insertion etc) et de la maniere dont trier (paser par un fichier temporaire etc) merci beaucoup de votre aide
    Il y a plusieurs façons de faire. La meilleure est celle qui te donne les meilleurs résultats selon tes critères. Le mieux est que tu proposes ta ou tes solutions et qu'on en discute. Ensuite, il faudra faire des essais dans des conditions reproductibles pour déterminer les performances (si elles ont vraiment une importance). On ne dépense pas autant d'energie à coder un tri pour 100 ou 1000 élements que pour 10 millions.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    mon fichier doit pouvoir contenir un nombre très grand de struct +- 200 000 je pense.mon problème concernant ce tri est que l'on ne peut pas "supprimer" un struct du fichier.
    J'ai bien réaliser une procédure qui stocke tout les struct exepté celui a supprimer dans un fichier temporaire qui supprime l'ancien et renomme le nouvo (en gros recopie quasi complete du fichier).

    Ce qui m'inquiete cest que si a chaque suppression dun mot je doit réécrire le fichier entierement :s
    de plus je ne possede une procèdure que pour ecrire en fin de fichier et je dois avouer que je ne sais vraiment pas par quel bout my prendre ni quel algorithme de tri utiliser je suis ouvert à toute suggestion.

    Sinon mon critere de qualité serait la rapidité car jai bien peur que ce tri soit tres long
    Merci beaucoup de votre aide

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nin47
    mon fichier doit pouvoir contenir un nombre très grand de struct +- 200 000 je pense.mon problème concernant ce tri est que l'on ne peut pas "supprimer" un struct du fichier.
    J'ai bien réaliser une procédure qui stocke tout les struct exepté celui a supprimer dans un fichier temporaire qui supprime l'ancien et renomme le nouvo (en gros recopie quasi complete du fichier).

    Ce qui m'inquiete cest que si a chaque suppression dun mot je doit réécrire le fichier entierement :s
    de plus je ne possede une procèdure que pour ecrire en fin de fichier et je dois avouer que je ne sais vraiment pas par quel bout my prendre ni quel algorithme de tri utiliser je suis ouvert à toute suggestion.
    Enregistrements de taille fixe, fichier indexé. Les données sont inchangées (à part un marqueur 'actif/efface), et le tri se fait selon un fichier d'index qui se contente de trier des index selon les critères choisis. (lecture sequencielle du fichier avec tri/insertion des index). fseek() etc. Les ajouts se font en queue (append) et le/les fichiers d'index sont mis à jou à chaque modification.

    Je ne suis pas sûr que le C 'de base' soit adapté à la situation. Dans ton cas, on utilise plutôt des outils spécialisés comme des bases de données relationelles... (MySQL, PostGreSQL etc.)

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    j'aurais bien voulu utiliser autre chose que du C "de base" mais on m'oblige à utiliser ça donc bon je dois faire avec.

    Croyez vous que le stockage de mes struct dans des vecteurs pourrait resoudre mon probleme est ce que c'est génant de procèder de la sorte si l'on considere le nombre de struct que j'ai donné plus haut (environ 200 000) ?

Discussions similaires

  1. Convertir tableau d'entiers en chaine de caracteres
    Par marion5515 dans le forum Débuter
    Réponses: 8
    Dernier message: 22/05/2009, 18h20
  2. convertir String en tableau d'entier
    Par alouha dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 18/06/2008, 21h43
  3. Réponses: 7
    Dernier message: 06/12/2007, 13h51
  4. Réponses: 1
    Dernier message: 22/06/2007, 13h48
  5. Convertir le champs d'un textField en tableau d'entier
    Par madislak dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 20/02/2007, 08h46

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