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

Langage Delphi Discussion :

conversion implicite en delphi xe2


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Points : 157
    Points
    157
    Par défaut conversion implicite en delphi xe2
    voila j'ai une erreur dans cette ligne et je pense que je dois faire une conversion


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    code:=code+chartoint(mot[k]);
    code est de type string[25]
    chartoint(mot[k]) est une fonction qui me renvoie un char;
    si j'ai bien compris ici je veux mettre une valeur de type string dans une variable de type string[25].
    et dans mon programme je vais pas dépasser 25 caractère .
    alors c'est qoi la fonction pour faire une conversion de type, et qui me dérange c'est que ça marche bien en delphi6 et xe2 non.

    * existe-t-il des skin pour delphie xe2 parce que je crée des programme mais il sont pas trop magnifique .si non que dois je faire pour décorer mes fiche.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 548
    Points : 25 118
    Points
    25 118
    Par défaut
    Citation Envoyé par momedalhouma Voir le message
    chartoint(mot[k]) est une fonction qui me renvoie un char;
    Très logique, j'aurais dit que la fonction renvoyait un integer, car sinon il y a un erreur de nommage !

    Citation Envoyé par momedalhouma Voir le message
    et qui me dérange c'est que ça marche bien en delphi6 et xe2 non.
    Tu es au courant que Delphi 6 c'est ANSI et XE2 en UNICODE
    le type Char occupe 1 octet en D6, 2 en XE2, le type AnsiChar existe toujours mais par défaut c'est le type WideChar qui est utilisé !
    le type String a doublé de taille en XE2, AnsiString existe toujours mais n'est plus le type par défaut, remplacer par UnicodeString
    le type ShortString et string[] sont resté ANSI

    Je n'ai pas encore expérimenté la ShortString en XE2, j'ignore les mécanismes qui ont été mis en place pour la conversion !
    Comme cela reste un type particulier, souvent utiliser pour des manipulations mémoires simplifiées, pour des API Windows par exemple GetClassName ou GetWindowText

    As-tu obligation de conserver [25] ?
    Typique dans un record sérialisé en fichier !

    Faudrait peut-être voir le problème différemment, si cela se trouve, l'ensemble de ton code peut est revu !
    Il existe de nombreuses fonctions dans StrUtils pour travailler sur les chaines !
    Quel est le but originel ? Quelle Entrée ? Quelle Sortie ?

    Citation Envoyé par momedalhouma Voir le message
    * existe-t-il des skin pour delphie xe2 parce que je crée des programme mais il sont pas trop magnifique .si non que dois je faire pour décorer mes fiche.
    Bon, normalement, ça devrait être un autre sujet !
    Pour les skins en XE2, tu as un Editeur de Style
    Sinon, des outils de Skin, c'est une question récurrente sur le forum ... n'en n'ayant jamais utilisé, je te laisse cherche sur le forum, tu y trouveras plein de réponse !
    Mais XE2 respecte le theme Vista, et offre un design plus moderne pour les grilles en particulier !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Points : 157
    Points
    157
    Par défaut
    merci beaucoup pour ta réponse.
    pour le nommage de chartoint oui elle renvoie un string mais il est sous forme de chiffre.
    j'ai utilisé string[25] par ce les variables de ce type dans mon application ne vont pas dépasse 25 caractère.c'est question de diminuer les ressources mémoires.
    si je dois changer le type dans cette procédure je dois le faire dans tout le programme 10 endroits par exemple.
    merci encore une fois pour tes réponses et a la prochaine

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 162
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par momedalhouma Voir le message
    merci beaucoup pour ta réponse.
    pour le nommage de chartoint oui elle renvoie un string mais il est sous forme de chiffre.
    j'ai utilisé string[25] par ce les variables de ce type dans mon application ne vont pas dépasse 25 caractère.c'est question de diminuer les ressources mémoires.
    si je dois changer le type dans cette procédure je dois le faire dans tout le programme 10 endroits par exemple.
    merci encore une fois pour tes réponses et a la prochaine
    Non ! Comme l'a dit ShaiLeTroll, chartoint renvoi un integer !

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 548
    Points : 25 118
    Points
    25 118
    Par défaut
    Citation Envoyé par momedalhouma Voir le message
    j'ai utilisé string[25] par ce les variables de ce type dans mon application ne vont pas dépasse 25 caractère.c'est question de diminuer les ressources mémoires.
    C'est une économie de bout de chandelle !
    Ton programme consomme-t-il 2Go pour que tu t'en inquiète à ce point ?

    Avec les machines modernes et en Delphi XE2, le système d'allocation mémoire se fait par bloc, je ne suis pas convaincu du gain de mémoire (mais peut-être de processeur)

    C'est pas forcément exact, chaque chaine [25] va toujours occupé 26 octets que la chaine fasse 0 à 25 caractères !
    Avec une chaine AnsiString, c'est un pointeur, une chaine vide c'est le pointeur nulle, donc 0 octets, ensuite la chaine sera allouée en fonction du besoin !
    Effectivement, si l'on compte le pointeur et d'autres informations, on arrive à un peu plus de 40 octets pour une chaine de 25 caractères, et un peu moins de 20 pour une chaine de 1 caractères !
    Il y a un gain pour les chaines de 10 caractères ou plus, c'est vrai !

    Pour une chaine string (UnicodeString), c'est 20 pour 1 et presque 70 pour 25 !
    Peut-on comparer ? un gain pour 3 caractères ou plus mais une telle perte de fonctionnalité !

    La dessus, il faut ajouter le compteur de référence qui permet de ne pas réallouer une chaine lorsqu'on la copie dans une autre et toute une gestion d'un Copy-On-Write !
    Il est possible d'avoir la même chaine pointée par plusieurs variables, un ShortString fera autant de copie ! Selon ton algo, au final, tu pourrais consommer plus !

    Par contre, ce que tu gagnes à chaque concaténation, c'est que la string[25] n'est pas réalloué !
    En D7, on verrait la différence, en DXE2 ou D7 + FastMM, la réallocation de chaine étant 100 fois plus rapide ...

    Evidemment, si CharToInt utilise en interne IntToStr qui converti le code ANSI en Integer, cela alloue donc une chaine string (donc UnicodeString) et donc tout s'écroule car il doit effectuer une conversion du CharSet Unicode vers le charset ANSI (pour tous les caractères > 127) de la ShortString !
    Et cela pour chaque caractère affecté ! ouch !

    Résultat : performance réduite !
    Tu devrais comparer et chronométrer !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. conversion implicite etrange
    Par maxmarie dans le forum VB.NET
    Réponses: 4
    Dernier message: 22/06/2007, 10h48
  2. [9i]Conversion implicite ?
    Par lunab54 dans le forum SQL
    Réponses: 7
    Dernier message: 19/04/2007, 14h49
  3. [C#] Conversion implicite de type object vers int
    Par alexking2005 dans le forum C#
    Réponses: 5
    Dernier message: 02/01/2007, 10h02
  4. conversion de date (delphi/oracle)
    Par dolphins dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/09/2005, 16h15
  5. [jdbc][oracle] conversion implicite erronée
    Par Jack Huser dans le forum JDBC
    Réponses: 2
    Dernier message: 30/06/2005, 10h23

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