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++Builder Discussion :

Calcul de la taille d'une variable


Sujet :

C++Builder

  1. #1
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut Calcul de la taille d'une variable
    Bonjour,
    J'aimerais savoir s'il est possible de calculer la taille d'une variable. Je m'explique: J'ai une TStringList qui est au final enregistré dans un fichier. Il est possible que ce fichier prenne un poids non négligeable, c'est pourquoi j'aimerais afficher à l'utilisateur la valeur que prendra le fichier s'il est sauvegardé.

    Aujourd'hui dans un Timer, je sauvegarde ma liste dans un fichier et j'utilise la méthode GetFileAttributesEx mais si le fichier est trop lourd, le timer relance l'interruption avant que le fichier soit totalement sauvegardé et cela génère une interruption.

    Je voudrais juste savoir s'il existe une méthode pour connaître la taille de cette liste en o, ko, Mo, ou Go direct ! et éviter ainsi de passer par une sauvegarde et détecter les exceptions au cas ou.

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 89
    Points
    89
    Par défaut
    Bah, moi, je ense que tu doit juste savoir la taille d'un caractère (4 ou 8 bit je croi) et apres, de calculer le nombre de caractère dans ton fichier, et tu saura aproximativement la taille de ton fichier

    (mais c'est juste une des nombreuses méthodes)

  3. #3
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Pas bête, 1 caractère = 1 octet (8 bits) mais il faut prendre en compte les '\n' qui font 1 caractères de plus.

    C'est une bonne idée, je creuse ca et j'annonce le résultat.
    Merci Galkir

  4. #4
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    et pourquoi ne pas convertir ta chaine en byte?


  5. #5
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    il y aussi une autre méthode en utilisant un outputstream en ecrivant dans le fichier à travers un buffer (de 1024 par exemple) et en utilisant une boucle pour ecrire dans le fichier tout en incrémentant une variable long "taille" de 1024 à chaque itération

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par chamamo
    et pourquoi ne pas convertir ta chaine en byte?


    Tu fais comment ensuite pour connaitre la taille de b ?

  7. #7
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Merci pour ces solutions. Je suis parti comme Galkir avait suggéré.
    J'obtiens 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
    23
    24
    25
    26
    27
    28
     
        int i,caracteres=0;
     
        for(i=0;i<Liste->Count;i++)
            caracteres = caracteres + Liste->Strings[i].Length()+2;
        //calculation in o, ko, Mo and Go
        if(caracteres < 1024)                         //
        {
            StatusBar1->Panels->Items[4]->Text = IntToStr(caracteres)+bytes;
        }
        else
        {
            if((caracteres/1024) < 1024)
            {
                StatusBar1->Panels->Items[4]->Text = FloatToStrF(caracteres/1024.0,ffFixed,5,2)+kilobytes;
            }
            else
            {
                if((caracteres/1024)/1024 < 1024)
                {
                    StatusBar1->Panels->Items[4]->Text = FloatToStrF(caracteres/1024.0/1024.0,ffFixed,5,2)+megabytes;
                }
                else
                {
                    StatusBar1->Panels->Items[4]->Text = FloatToStrF(caracteres/1024.0/1024.0/1024.0,ffFixed,5,2)+gigabytes;
                }
            }
        }
    Comme j'ai du texte, cela me permet de calculer la taille que prendra le fichier lorsqu'il sera sauvegardé. A chaque fin de chaîne j'ai 2 caractères supplémentaires pour l'organisation du fichier, l'un est '\n' mais je ne vois pas le second.
    En attendant, cette méthode fonctionne, Merci !

  8. #8
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    chaque line est une chaîne alors le second est "\0" caractère de fin de chaîne

    tu as déja essayer sizeof??

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    bah oui mais sizeof ne te renverra pas la taille (le nombre d'octets) de la chaine b... c'est pour ca que j'ai pose la question, ca m'intrigue...

    ex:
    char* c="TATAYOYO";
    byte* b=(byte*)c;

    que tu fasses:

    sizeof(b); ou sizeof(c); (ou sizeof n'importe quel pointeur d'ailleurs...)
    ca te renverra toujours 4 (sur une machine 32 bits), parce que l'adresse d'un pointeur est toujours codee sur 4 octets;
    le sizeof du langage C renvoie l'espace occupé par son argument en nombre de bytes...

    pour connaitre le nombre d'octets occupes par c moi je ferais plutot:

    sizeof(char)*strlen(c) // strlen tout seul suffit en fait...

    si t'as une autre solution avec ton cast et juste sizeof, ca m'interresserais, mais perso je vois pas l'interet de caster en byte ... vu que de toute maniere un char ou un byte ca fait 1 octet... (dites moi si je me trompe...)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de la taille d'une image
    Par 3issam84 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 07/03/2009, 16h31
  2. Obtenir la taille d'une variable
    Par devtroll dans le forum Langage
    Réponses: 6
    Dernier message: 04/08/2008, 16h55
  3. taille d'une variable de type char
    Par NeMo_O dans le forum C
    Réponses: 17
    Dernier message: 26/11/2006, 02h17
  4. Comment savoir la taille d'une variable
    Par killerjeff dans le forum C++
    Réponses: 30
    Dernier message: 09/12/2005, 17h07
  5. Calcul de la taille d'une future base de données
    Par Kuma25 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 17/08/2005, 10h54

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