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 :

Resultat d'une fonction TStringList


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 678
    Billets dans le blog
    65
    Par défaut Resultat d'une fonction TStringList
    Bonjour

    Objectif : parser le résultat d'une requête WMI comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM WIN32_DISKDRIVE WHERE deviceID="\\\\.\\PHYSICALDRIVE0"
    Bien que ceci fonctionne , cela ne me plait pas car le résultat ne sera pas libéré . Ce n'est pas le "parsing" qui me chagrine mais bien la manière de passer le résultat , il y a là quelque chose qui m'échappe

    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
     
    function WMICollection(Chaine : String): THashedStringList;
    var d,f : word;
        start : Boolean;
        Ws : String;
    begin
        Chaine:=AnsiReplaceStr(Chaine,';','');
        Chaine:=AnsiReplaceStr(Chaine,' = ','=');
        Chaine:=AnsiReplaceStr(Chaine,#9,'');
        Result:=THashedStringList.Create;
        Ws:='';
        for f := Length(Chaine) downto 0 do
          if chaine[f]='}' then break;
        Start:=False;
        for d:= 0 to f-1 do
          begin
           if Start then ws:=ws+Chaine[d]
                    else Start:=Chaine[d]='{';
          end;
        Result.Text:=ws;
    end;
     
    // pour faire par exemple ceci
    function WMIPropriete(TS : THashedStringList; Name : String) : String;
    begin
     Result:=TS.ValueFromIndex[TS.IndexOfName(Name)];
    end;
    j'ai bien fait une tentative de
    function WMICollection(Chaine : String;const THS :TStringList): Integer;
    mais avec une erreur de compilation à la clé

    je doit avouer que un résultat TString,TStringlist etc... est une première pour moi , d'où cet appel

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 678
    Billets dans le blog
    65
    Par défaut
    Évidemment , il suffit d'appeler les médecins pour que l'on se porte mieux

    voilà , pour la postérité , ce que j'ai pondu . Critiquable a souhait bien sur
    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
     
    function WMICollection(Chaine : String;const THS :THashedStringList): Integer;
    var d,f : word;
        start : Boolean;
        Ws : String;
    begin
        Chaine:=AnsiReplaceStr(Chaine,';','');
        Chaine:=AnsiReplaceStr(Chaine,' = ','=');
        Chaine:=AnsiReplaceStr(Chaine,#9,'');
        Ws:='';
        for f := Length(Chaine) downto 0 do
          if chaine[f]='}' then break;
        Start:=False;
        for d:= 0 to f-1 do
          begin
           if Start then ws:=ws+Chaine[d]
                    else Start:=Chaine[d]='{';
          end;
        THS.Text:=ws;
        Result:=THS.Count;
    end;
     
    function WMIPropriete( WMIObject,Name : String) : String;
    var TS : THashedStringList;
    begin
     TS:=THashedStringList.Create;
     try
     WMICollection(WMIObject,TS);
     Result:=TS.ValueFromIndex[TS.IndexOfName(Name)];
     finally
       FreeAndNil(TS);
     end;
    end;
    Question subsidiaire : j'ai découvert auprès d'un gourou FreeAndNil plutôt que Free . Quel est le meilleur ? y a t'il une différence ou est-ce un simple effet de style ?

  3. #3
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Salut Serge,

    Moi pour répondre à cette question (qui ma hanté....lol) je me réfère à cella

    http://www.prestwood.com/ASPSuite/KB...asp?qid=101432

    Bye

  4. #4
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    function WMICollection(Chaine : String): THashedStringList;
    avec ce genre de code vaut mieux utiliser un nom explicite pour la de fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function Create_WMICollection(Chaine : String): THashedStringList;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function New_WMICollection(Chaine : String): THashedStringList;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function WMICollection(Chaine : String;out List:THashedStringList):boolean;

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 678
    Billets dans le blog
    65
    Par défaut
    je préfère la 3 par contre j'hésite toujours entre un résultat boolean ou integer ou .... pour l'instant

    out je n'y ai même pas pensé , il va falloir que je me remette aux basiques

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

Discussions similaires

  1. [PRO*C] affectation du resultat d'une fonction
    Par gadjou dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 06/12/2006, 07h50
  2. Réponses: 1
    Dernier message: 14/06/2006, 16h21
  3. Réponses: 1
    Dernier message: 19/04/2006, 14h29
  4. Réponses: 4
    Dernier message: 18/01/2006, 10h33
  5. garder en memoire un resultat d'une fonction
    Par khadidja dans le forum C++
    Réponses: 6
    Dernier message: 26/07/2004, 14h52

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