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

Delphi Discussion :

Lire des JSON


Sujet :

Delphi

  1. #41
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par Sylvain255 Voir le message
    TJSonNumber est dans System donc je crois pas que la source soit disponible
    C'est dans System.JSON et la version Pro fourni le code, vous n'avez pas vu que j'ai fourni le code dans ma première réponse ?

    Citation Envoyé par Sylvain255 Voir le message
    OK mais je le trouve où le source de TJSONNumber ? dans quel fichier ?
    Euh, c'est un peu grave comme question ! c'est quand même dans le nom complet de la classe System.JSON.TJSONNumber
    C'est quand même le uses et LISEZ la documentation !!!
    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

  2. #42
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2017
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 337
    Points : 61
    Points
    61
    Par défaut
    j'ai la version pro mais je ne trouve pas le fichier et je n'ai vu qu'un code avec inherited

  3. #43
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Faut chercher BEAUCOUP plus !


    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
     
    type
      TJSONFloat= class sealed(TJSONString)
      protected
        /// <summary> Utility constructor with numerical argument represented as string </summary>
        /// <param name="value">- string equivalent of a number</param>
        constructor Create(const Value: string); overload;
     
        /// <summary> Returns the double representation of the number </summary>
        /// <returns>double</returns>
        function GetAsDouble: Double;
     
      public
        constructor Create; overload;
     
        /// <summary> Constructor for a double number </summary>
        /// <param name="value">double to be represented as JSONNumber</param>
        constructor Create(const Value: Double); overload;
     
        /// <seealso cref="TJSONString.estimatedByteSize()"/>
        function EstimatedByteSize: Integer; override;
     
        /// <summary> see com.borland.dbx.transport.JSONString#toBytes(byte[], int) </summary>
        function ToBytes(const Data: TArray<Byte>; const Idx: Integer): Integer; override;
     
        /// <summary> Returns the non-localized string representation </summary>
        function ToString: string; override;
     
        /// <summary> Returns the localized representation </summary>
        function Value: string; override;
        function Clone: TJSONAncestor; override;
     
        /// <summary> Returns the double representation of the number </summary>
        /// <returns>double</returns>
        property AsDouble: Double read GetAsDouble;
     
      end;
    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
     
    { TJSONFloat}
     
    constructor TJSONFloat.Create;
    begin
      inherited Create('');
    end;
     
    constructor TJSONFloat.Create(const Value: Double);
    begin
      inherited Create(FormatFloat('#.0', Value, System.JSON.GetJSONFormat())); 
    end;
     
    function TJSONFloat.EstimatedByteSize: Integer;
    begin
      Result := FStrBuffer.Length;
    end;
     
    function TJSONFloat.ToBytes(const Data: TArray<Byte>; const Idx: Integer): Integer;
    var
      Offset: Integer;
      Index: Integer;
      Count: Integer;
      CurrentChar: WideChar;
    begin
      Offset := Idx;
      Index := 0;
      Count := FStrBuffer.Length;
      while Index < Count do
      begin
        CurrentChar := FStrBuffer.Chars[IncrAfter(Index)];
        Data[IncrAfter(Offset)] := Ord(CurrentChar);
      end;
      Result := Offset;
    end;
     
    function TJSONFloat.ToString: string;
    begin
      Result := FStrBuffer.ToString;
    end;
     
    function TJSONFloat.Value: string;
    var
      BuffStr: string;
    begin
      BuffStr := FStrBuffer.ToString;
      Result := FloatToStr(JsonToFloat(BuffStr));
    end;
     
    function TJSONFloat.Clone: TJSONAncestor;
    begin
      Result := TJSONFloat.Create(ToString);
    end;
     
    function TJSONFloat.GetAsDouble: Double;
    begin
      Result := JsonToFloat(FStrBuffer.ToString);
    end;
    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

  4. #44
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2017
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 337
    Points : 61
    Points
    61
    Par défaut
    j'ai réussi à recopier le codes mais j'ai des souligné rouge sur :
    - tout ce qui est après TJSONNumber
    - FStrBuffer
    - IncrAfter
    - ToString

  5. #45
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Recopier le code à nouveau, il y a avait un tas de copier-merder ... mais vous auriez du les corriger avec facilité
    On vous fourni un code qui doit vous servir d'inspiration, faut donc faire l'effort de le comprendre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function IncrAfter(var Arg: Integer): Integer;
    begin
      Result := Arg;
      Inc(Arg);
    end;
    FStrBuffer est protected donc l'accès est possible une unité autre via l'héritage
    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

  6. #46
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2017
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 337
    Points : 61
    Points
    61
    Par défaut
    FStrBuffer n'est toujours pas déclaré

  7. #47
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Delphi Seattle, cela compile dans une nouvelle unité crée à l'arrache

    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    unit Sylvain255.JSON;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
     
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    uses
      System.JSON;
     
     
    {$R *.dfm}
     
    type
      TJSONFloat = class sealed(TJSONString)
      protected
        /// <summary> Utility constructor with numerical argument represented as string </summary>
        /// <param name="value">- string equivalent of a number</param>
        constructor Create(const Value: string); overload;
     
        /// <summary> Returns the double representation of the number </summary>
        /// <returns>double</returns>
        function GetAsDouble: Double;
     
      public
        constructor Create; overload;
     
        /// <summary> Constructor for a double number </summary>
        /// <param name="value">double to be represented as JSONNumber</param>
        constructor Create(const Value: Double); overload;
     
        /// <seealso cref="TJSONString.estimatedByteSize()"/>
        function EstimatedByteSize: Integer; override;
     
        /// <summary> see com.borland.dbx.transport.JSONString#toBytes(byte[], int) </summary>
        function ToBytes(const Data: TArray<Byte>; const Idx: Integer): Integer; override;
     
        /// <summary> Returns the non-localized string representation </summary>
        function ToString: string; override;
     
        /// <summary> Returns the localized representation </summary>
        function Value: string; override;
        function Clone: TJSONAncestor; override;
     
        /// <summary> Returns the double representation of the number </summary>
        /// <returns>double</returns>
        property AsDouble: Double read GetAsDouble;
     
      end;
     
     
     
     
     
    { TJSONFloat}
     
    constructor TJSONFloat.Create;
    begin
      inherited Create('');
    end;
     
    constructor TJSONFloat.Create(const Value: Double);
    begin
      inherited Create(FormatFloat('#.0##############', Value, System.JSON.GetJSONFormat()));
    end;
     
    constructor TJSONFloat.Create(const Value: string);
    begin
      inherited Create(Value);
    end;
     
    function TJSONFloat.EstimatedByteSize: Integer;
    begin
      Result := FStrBuffer.Length;
    end;
     
    function TJSONFloat.ToBytes(const Data: TArray<Byte>; const Idx: Integer): Integer;
     
      function IncrAfter(var Arg: Integer): Integer; inline;
      begin
        Result := Arg;
        Inc(Arg);
      end;
     
    var
      Offset: Integer;
      Index: Integer;
      Count: Integer;
      CurrentChar: WideChar;
    begin
      Offset := Idx;
      Index := 0;
      Count := FStrBuffer.Length;
      while Index < Count do
      begin
        CurrentChar := FStrBuffer.Chars[IncrAfter(Index)];
        Data[IncrAfter(Offset)] := Ord(CurrentChar);
      end;
      Result := Offset;
    end;
     
    function TJSONFloat.ToString: string;
    begin
      Result := FStrBuffer.ToString;
    end;
     
    function TJSONFloat.Value: string;
    var
      BuffStr: string;
    begin
      BuffStr := FStrBuffer.ToString;
      Result := FloatToStr(JsonToFloat(BuffStr));
    end;
     
    function TJSONFloat.Clone: TJSONAncestor;
    begin
      Result := TJSONFloat.Create(ToString);
    end;
     
    function TJSONFloat.GetAsDouble: Double;
    begin
      Result := JsonToFloat(FStrBuffer.ToString);
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowMessage(TJSONFloat.Create(1.0).ToString() + ' != ' + TJSONFloat.Create(1.0).Value());
      ShowMessage(TJSONFloat.Create(1.01).ToString() + ' != ' + TJSONFloat.Create(1.01).Value());
    end;
     
    end.
    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

  8. #48
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2017
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 337
    Points : 61
    Points
    61
    Par défaut
    oui mais ça me crée des "882.0","407.0" moi je veux pas de guillemets !

  9. #49
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Euh, vous avez du comettre une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowMessage(TJSONFloat.Create(1.0).ToString() + ' != ' + TJSONFloat.Create(1.0).Value());
      ShowMessage(TJSONFloat.Create(1.01).ToString() + ' != ' + TJSONFloat.Create(1.01).Value());
     
      ShowMessage(TJSONObject.Create().AddPair('toto', TJSONFloat.Create(1.0)).ToString);
      ShowMessage(TJSONObject.Create().AddPair('toto', TJSONFloat.Create(1.01)).ToString);
    end;
    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

  10. #50
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    Par défaut
    Quel est l'intérêt d'augmenter la taille du fichier en insérant des zéros non significatifs

  11. #51
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2017
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 337
    Points : 61
    Points
    61
    Par défaut
    les 0 non significatifs sont traités en Python pour découvrir le type
    euh j'ai écrit votre code mais j'ai toujours "FStrBuffer non déclaré"

    et j'ai
    [dcc32 Erreur] Unit1.pas(123): E2037 La déclaration de 'ToBytes' diffère de la déclaration précédente
    je précise que ma version de delphi est la 10.3

  12. #52
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Trouvez le code, vérifier si private, proctected ... en Delphi 10 Seattle, comme cela fonctionne, je ne peux pas plus vous aider.
    Peut-être faudra-t-il faire un hack de champ
    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

  13. #53
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2017
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 337
    Points : 61
    Points
    61
    Par défaut
    je n'ai pas de membre fstrbuffer dans tjsonstring

  14. #54
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par Sylvain255 Voir le message
    je n'ai pas de membre fstrbuffer dans tjsonstring
    Voilà, vous n'avez donc qu'à reprendre le code du TJSONNumber pour créer votre TJSONFloat avec votre version de Delphi.
    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

  15. #55
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2017
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 337
    Points : 61
    Points
    61
    Par défaut
    j'ai mis le code :

    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
        type
      TJSONFloat = class sealed(TJSONString)
      protected
        /// <summary> Utility constructor with numerical argument represented as string </summary>
        /// <param name="value">- string equivalent of a number</param>
        constructor Create(const Value: string); overload;
        constructor Create(const Value: Double); overload;
     
     
     
      end;
     
     
     
     
     
    { TJSONFloat}
     
     
     
    constructor TJSONFloat.Create(const Value: Double);
    begin
      inherited Create(FormatFloat('#.0', Value, System.JSON.GetJSONFormat()));
    end;
     
    constructor TJSONFloat.Create(const Value: string);
    begin
      inherited Create(FormatFloat('#.0', strtofloat(Value), System.JSON.GetJSONFormat()));
    end;
    mais il y a des guillemets autour

  16. #56
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    J'avais pourtant bien expliqué l'astuce du ToString ...

    Citation Envoyé par ShaiLeTroll Voir le message
    Notez que la redéfinition de ToString de TJSONNumber est l'astuce qui évite l'ajoute des " du TJSONString dont il hérite .
    Trouvez le remplaçant de FStrBuffer est donc indispensalbe


    ah pensez à mettre un format plus souple genre '######.0##' selon vos besoins

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    constructor TJSONFloat.Create(const Value: Double); // public pour rendre accessible
    begin
      inherited Create(FormatFloat('######.0##', Value, System.JSON.GetJSONFormat()));
    end;
     
    constructor TJSONFloat.Create(const Value: string); // protected pour le masquer
    begin
      inherited Create(Value); // laissez ce constructeur comme ça !!!
    end;
     
    function TJSONFloat.ToString: string; // override
    begin
      Result := FStrBuffer.ToString; // ça qui évite le " " qui sont émises par le TJSONString.ToString
    end;
    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

  17. #57
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2017
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 337
    Points : 61
    Points
    61
    Par défaut
    rebonjour,
    c'est trop compliqué et trop dépendant de la version de Delphi, si je passe à une version postérieure, il me faudra tout recoder, j'ai trouvé une astuce :
    j'ai fabriqué une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function virgule0(d:double):tjsonvalue;
    var s:string;
    begin
      s:=floattostr(d);
      s:=ansireplacestr(s,',','.');
      if pos('.',s)<>0 then
          result:=tjsonnumber.create(d)
      else
        result:=tjsonstring.create('££$'+s+'$$£');
    end;
    end;
    qui me sert à insérer des valeurs avec .0
    après je remplace les valeurs dans le JSON écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    jsonfile.Clear;
    jsonfile.Add(ansireplacestr(ansireplacestr(json.tojson,'$$\u00A3"','.0'),'"\u00A3\u00A3$',''));
    jsonfile.SaveToFile(savedialog1.filename);

  18. #58
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    Vous avez oublié les classhelper ... cela permet de palier a des oublie éventuel
    un site qui je pense va te plaire voir ICI
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  19. #59
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Ah, si tu voulais du code moche, tu pouvais faire cela différemment
    Cela n'utilise pas les ancêtres et ça redéfini le strict minimum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    type
      TJSONFloatEx = class sealed(TJSONString)
      public
        constructor Create(const Value: Double); overload;
        function ToString: string; override;
      end;
    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
     
    { TJSONFloatEx }
     
    constructor TJSONFloatEx.Create(const Value: Double);
    begin
      inherited Create(FloatToJson(Value));
    end;
     
    function TJSONFloatEx.ToString: string; // override
    begin
      Result := inherited ToString();
     
      Result := StringReplace(Result , '\"', '', [rfReplaceAll]);
      Result := StringReplace(Result , '"', '', [rfReplaceAll]);
     
      Result := FormatFloat('######.0##', JsonToFloat(Result), System.JSON.GetJSONFormat());
    end;
    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

  20. #60
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par anapurna Voir le message
    Vous avez oublié les classhelper ... cela permet de palier a des oublie éventuel
    LE problème du class Helper, c'est la portée, si l'on ajoute un ToString dans le helper, sa prise en compte sera locale à l'unité qui mentionne le helper, mais dans l'unite System.JSON, cela conservera le ToString initial, ce qui n'aura donc aucun impact dans le cas actuel.
    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.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Ecrire & Lire des énumérés dans un fichier Texte
    Par WebPac dans le forum Langage
    Réponses: 8
    Dernier message: 18/06/2008, 10h04
  2. Lire des fichiers .mpc
    Par Thrystan dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 11/12/2004, 13h15
  3. [SAX] Lire des objets
    Par sylvain_2020 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 01/12/2004, 16h10
  4. CFile : comment lire des données
    Par romeo9423 dans le forum MFC
    Réponses: 3
    Dernier message: 25/10/2004, 19h10
  5. [ZIP]besoin de lire des fichiers avec l'extension tar.gz
    Par mathieublanc13 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/05/2004, 13h35

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