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 :

Ecrire un variant dans du XML (texte) et le relire


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Responsable R&D
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 43
    Points
    43
    Par défaut Ecrire un variant dans du XML (texte) et le relire
    Bonjour,

    J'aimerai pouvoir stocker un champ Variant dans une structure XML (dans du texte donc) et pouvoir le récupérer sans perdre le type du variant.

    Il y a des fonctions qui permettent ce genre de chose ?
    Merci

    Armindo

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 152
    Points
    3 152
    Par défaut
    Bonjour,

    dans l'unité Variants, la fonction VarToStr permet de convertir un variant en String.

    A+
    Charly

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 152
    Points
    3 152
    Par défaut
    et pour le relire, tu fais directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v := s ;  // v Variant et s String
    A+
    Charly

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    j'aurais tendance à dire que ce n'est pas possible, ou en tout cas pas automatique.

    Prenons un Variant contenant une date, cela va se traduire par une date au format texte, mais en relecture on aura ... un chaîne de caractère contenant une date.

    ça pourrait se généraliser à tous les types d'ailleurs, en entier 1 devient la chaîne '1' car rien dans XML ne précise le type de la donnée. <data>1</data>...sauf à ce que le XML possède un XDS qui fixe les choses...ou que le XML précise le type de données <data type="date-iso">2019-10-17 10:32</data> mais il reste à écrire le code qui va produire et relire le XML en tenant compte de ces informations.

    dans DataSnap on a sans doute ce genre de choses cependant vu que si mon souvenir est bon il est possible de passer par SOAP qui est du XML

  5. #5
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 504
    Points : 2 776
    Points
    2 776
    Billets dans le blog
    10
    Par défaut
    Je pense que tu dois ajouter le type de données sous forme d'un attribut spécifique comme dans cet exemple avec "fieldType". Tu peux connaître le type de ta donnée avec les fonctions VarIsFloat, VarIsStr... ou TVarType ou comme dans l'exemple de Paul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <DATAPACKET Version="2.0">
    <METADATA><FIELDS>
    <FIELD attrname="TypeArbre" fieldtype="string" width="20" />
    <FIELD attrname="Age" fieldtype="i4" />
    </FIELDS></METADATA>
    <ROWDATA>
    <ROW TypeArbre="Chêne" Age="5" />
    <ROW TypeArbre="Saule" Age="7" />
    <ROW TypeArbre="Bouleau" Age="4" />
    </ROWDATA>
    </DATAPACKET>

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 152
    Points
    3 152
    Par défaut
    Bonjour,

    Si il l'écrit, il connait son type et son nom dans le fichier XML. Il peut donc refaire la conversion a la relecture ?

    A+
    Charly

  7. #7
    Membre du Club
    Homme Profil pro
    Responsable R&D
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 43
    Points
    43
    Par défaut
    Merci à tous pour vos réponses effectivement il vaudra mieux que je sauve le type dans la XML et qu'à la relecture je fasse ce qu'il faut en fonction du type.
    -> Paul tu avais bien compris le fond du problème...

  8. #8
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 107
    Points : 237
    Points
    237
    Par défaut
    Salut,
    Ce devrait être qq'chose comme çà:
    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
    unit Unit2;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TForm2 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form2: TForm2;
     
    implementation
     
    {$R *.dfm}
     
    function PutVariant (aVariant:variant): string;
    var Typ : tVarType;
    begin
      Typ := VarType(aVariant);
      result := format('%6.6d %s', [Typ, aVariant]);
    end;
     
    function GetVariant (aString:string) : variant;
    var Typ : tVarType;
    begin
      Typ := StrToInt(Copy(aString, 1, 6));
      delete(aString, 1, 7);
      case typ of
        varDate     : result := VarAsType(aString, varDate);
        varInteger  : result := VarAsType(aString, varInteger);
        varString   : result := VarAsType(aString, varString);
        varDouble   : result := VarAsType(aString, varDouble);
        else ShowMessage('Si tu veux d''autres types '#10'tu te les tapes toi-même.');
      end;
    end;
     
    procedure TForm2.Button1Click(Sender: TObject);
    var Ligne : string;
        d : tDate;
        i : Integer;
        s : String;
        r : double;
        v : variant;
    begin
      d := Date;
      i := random(MaxInt);
      s := 'Bonjour';
      r := pi;
      Memo1.Lines.Clear;
     
      v := VarAsType(d, varDate);
      Memo1.Lines.Add(PutVariant(v));
     
      v := VarAsType(i, varInteger);
      Memo1.Lines.Add(PutVariant(v));
     
      v := VarAsType(s, varString);
      Memo1.Lines.Add(PutVariant(v));
     
      v := VarAsType(r, varDouble);
      Memo1.Lines.Add(PutVariant(v));
     
      Memo1.Lines.Add('');
      for i := 0 to 3 do
      begin
        Ligne := Memo1.Lines[i];
        v := GetVariant(Ligne);
        Memo1.Lines.Add(Format('%6.6d %s', [VarType(v), v]));
      end;
    end;
     
    end.
    solilog

Discussions similaires

  1. Ecrire un mot dans un fichier texte existant
    Par Mickey.jet dans le forum Delphi
    Réponses: 10
    Dernier message: 26/02/2007, 23h23
  2. Lire et ecrire des variables dans un fichier texte
    Par Lynecoln dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/02/2007, 14h16
  3. [VB.NET]Comment autoriser a ecrire le caractère ":" dans un XML?
    Par mustang-f27 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/11/2006, 20h39
  4. Ecrire 4 lignes dans un fichier texte
    Par kikica dans le forum Langage
    Réponses: 2
    Dernier message: 17/03/2006, 16h04
  5. Ecrire et lire dans un fichier texte
    Par podz dans le forum C
    Réponses: 3
    Dernier message: 25/10/2005, 16h57

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