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 :

JSON .. mes premiers pas


Sujet :

Langage Delphi

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    mai 2008
    Messages
    2 356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 356
    Points : 2 305
    Points
    2 305
    Par défaut JSON .. mes premiers pas
    Bonjour

    comme je ne suis pas très familier avec la notion JSON je me retourne vers vous.
    En fait, après avoir récupérer des données sur un serveur j'ai du mal à parser la chaine retournée dont voici l

    Code json : 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
    {
        "coord": {
            "lon": 1.3345,
            "lat": 36.1652
        },
        "weather": [
            {
                "id": 803,
                "main": "Clouds",
                "description": "غيوم متناثرة",
                "icon": "04d"
            }
        ],
        "base": "stations",
        "main": {
            "temp": 29.95,
            "feels_like": 28.57,
            "temp_min": 29.95,
            "temp_max": 29.95,
            "pressure": 1018,
            "humidity": 28,
            "sea_level": 1018,
            "grnd_level": 1005
        },
        "visibility": 10000,
        "wind": {
            "speed": 1.2,
            "deg": 63,
            "gust": 1.59
        },
        "clouds": {
            "all": 57
        },
        "dt": 1630915239,
        "sys": {
            "country": "DZ",
            "sunrise": 1630906220,
            "sunset": 1630952165
        },
        "timezone": 3600,
        "id": 2498611,
        "name": "الشلف",
        "cod": 200
    }

    Déjà je me retrouve pas avec les objets contenus dans cette arborescence !
    il y'a un objet de type TJSONArray et les autres sont tous des TJSONObject.

    Qulequ'un peut-il me guider afin de tirer p.e la valeur de description qui est dans weather et la valeur de temp qui est dans main.

    Merci par avance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

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

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 214
    Points : 26 601
    Points
    26 601
    Par défaut
    JSON c'est très (trop ?) simple.

    tu as des listes []
    et des objets {}

    les éléments des listes sont séparés par des ,

    les membres d'un objet (aussi séparés par des ,) comprennent un nom et d'une valeur séparés par :

    la valeur d'un membre peut être un nombre, une chaîne, un booléen, une liste ou un objet

    ensuite tu as deux façon de gérer JSON dans Delphi, soit tu ne connais pas la structure à lire et tu dois passer par un Parser, soit tu connais la structure et tu peux passer par un lecteur

    personnellement, et à chaque fois que c'est possible, je passe par mon unité Execute.JSON qui exploite mon unité Execute.RTTI

    tu as donc juste à déclare la structure en Pascal et utiliser JSON.fromJSON pour passer de JSON au Record ou JSON.toJSON pour l'inverse

    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
     
    type
      TCoord = record
        lon, lat: Single;
      end;
      TWeahter = record
        id: Integer;
        main: string;
        description: string;
        icon: string;
      end;
      TMain = record
        temp: Single;
        feels_like: Single;
        temp_min: Single;
        temp_max: Single;
        pressur: Single;
        humidity: Single;
        sea_level: single;
        grnd_level: Single;
      end:
      TRecord = record
        coord: TCoord;
        weather: TArray<TWeather>;
        base: string;
        main: TMain;
        visibility: Integer;
    (***
     
     etc...
        "wind": {
            "speed": 1.2,
            "deg": 63,
            "gust": 1.59
        },
        "clouds": {
            "all": 57
        },
        "dt": 1630915239,
        "sys": {
            "country": "DZ",
            "sunrise": 1630906220,
            "sunset": 1630952165
        },
        "timezone": 3600,
        "id": 2498611,
        "name": "&#1575;&#1604;&#1588;&#1604;&#1601;",
        "cod": 200
    }
    ****)
     
     end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    mai 2008
    Messages
    2 356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 356
    Points : 2 305
    Points
    2 305
    Par défaut
    merci pour la réponse mais mon problème c'est que la structure change selon la requête donc à priori je ne connais pas le résultat c'est pourquoi j'évide le passage en pascal.

    par contre je voudrais parser le résultats par le biais de TJSONObject, TJSONArray, TJSONValue etc afin de faire ça correctement avec n'importe quelle structure résultante.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    mai 2008
    Messages
    2 356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 356
    Points : 2 305
    Points
    2 305
    Par défaut
    Après quelques lectures voici un essai mais qui n'aboutit pas ?!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var
      openweathermap, mainJSON : TJSONObject;
      temperature: string;
    begin
      RESTRequest1.Params.Items[0].Value := ComboBox1.Text;
      try
        RESTRequest1.Execute;
        openweathermap := TJSONObject.ParseJSONValue(RESTResponse1.Content) as TJSONObject;
        mainJSON := JSONObject.GetValue('main') as TJSONObject;
        temperature := mainJSON.GetValue<string>('temp');
      finally
        openweathermap .Free;
      end;
    Il ne reconnait pas JSONObject bien que j'ai déclaré l'unité System.JSON dans mes uses ?

    et j'aimerais avoir votre avis sur la démarche est ce la bonne manière de faire ?
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 180
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 180
    Points : 11 445
    Points
    11 445
    Par défaut
    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    openweathermap := TJSONObject.ParseJSONValue(RESTResponse1.Content);
    mainJSON       := openweathermap.GetValue<TJSONObject>('main');
    temperature    := mainJSON.GetValue<string>('temp');
    Weathers       := openweathermap.GetValue<TJSonArray>('weather');
     
    for var Weather in Weathers do
      ... := Weather.GetValue<string>('description');

  6. #6
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    mai 2008
    Messages
    2 356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 356
    Points : 2 305
    Points
    2 305
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    openweathermap := TJSONObject.ParseJSONValue(RESTResponse1.Content);
    mainJSON       := openweathermap.GetValue<TJSONObject>('main');
    temperature    := mainJSON.GetValue<string>('temp');
    Weathers       := openweathermap.GetValue<TJSonArray>('weather');
     
    for var Weather in Weathers do
      ... := Weather.GetValue<string>('description');
    grand merci ça m'a été d'une grande utilité là je vois bien ma structure
    je vais essayer de garder le même raisonnement.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  7. #7
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    mai 2008
    Messages
    2 356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 356
    Points : 2 305
    Points
    2 305
    Par défaut
    Il me reste un petit pépin.
    Il y'a dans la structure résultante des objets et de tableaux mais quand est il des pairs tel que dt et visibility comment peut-on accèder à leure valeurs ?
    j'ai tenté ça mais ça na pas marché.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    openweathermap := TJSONObject.ParseJSONValue(RESTResponse1.Content) as TJSONObject;
        mainJSON       := openweathermap.GetValue<TJSONObject>('main');
        temperature    := mainJSON.GetValue<string>('temp');
        humidite       := mainJSON.GetValue<string>('humidity');
    
        mainJSON       := openweathermap.GetValue<TJSONObject>('dt');
        date_heure     := mainJSON.GetValue<string>('dt');
    
        JSONWeather    := openweathermap.GetValue<TJSonArray>('weather');
        for var weather in JSONWeather do
          description := Weather.GetValue<string>('description');
    car dt n'est pas un objet espérant que je ne dis pas de bétises. c'est une paire name/value.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

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

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 211
    Points : 21 538
    Points
    21 538
    Par défaut
    Finalement, tu as un peu écrit la réponse, dt n'est pas un tableau ni un ensemble de valeur mais une valeur simple donc date_heure := openweathermap.GetValue<string>('dt');
    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

  9. #9
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    mai 2008
    Messages
    2 356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 356
    Points : 2 305
    Points
    2 305
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Finalement, tu as un peu écrit la réponse, dt n'est pas un tableau ni un ensemble de valeur mais une valeur simple donc date_heure := openweathermap.GetValue<string>('dt');
    ce qui me semblait aussi ça mais avec cette ligne seulement j'avais comme erreur
    value 'dt' not found
    alors je l'ai précédé d'un appel à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mainJSON       := openweathermap.GetValue<TJSONObject>('');
    mais comme vous voyze sans argument donc vide et j'ai eu le bon résultat.

    maintenant l'autre problème c'est la valeur elle même. C'est écrit dans la doc que dt est de type DateTime mais quand je l'ai convertis ça n'a pas donné le bon résultats.

    exemple
    "dt": 1630936547
    je ne vois pas comment convertir ça en date heure ?!!!
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

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

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 214
    Points : 26 601
    Points
    26 601
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    merci pour la réponse mais mon problème c'est que la structure change selon la requête donc à priori je ne connais pas le résultat c'est pourquoi j'évide le passage en pascal.
    ben il suffit de déclarer une structure par requête ?!

    tu fais séquentiellement ce que Execute.JSON fait en automatique...mais après c'est comme tu le sens, car ton code ne teste jamais la présence d'un membre, il cherche à lire les données de façon explicite en supposant que le membre est bien là.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 211
    Points : 21 538
    Points
    21 538
    Par défaut
    C'est une TimeStamp Unix : System.DateUtils.UnixToDateTime

    Note que la valeur est un entier et non une chaine donc autant lire directement cela pour remplir le DateHeure: TDateTime;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateHeure := UnixToDateTime(openweathermap.GetValue<Integer>('dt'));
    J'utilise toujours TryGetValue au lieu de GetValue<> et déclare openweathermap en TJSONValue plutôt que TJSONObject
    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

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

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 214
    Points : 26 601
    Points
    26 601
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    C'est une TimeStamp Unix : System.DateUtils.UnixToDateTime

    Note que la valeur est un entier et non une chaine donc autant lire directement cela pour remplir le DateHeure: TDateTime;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateHeure := UnixToDateTime(openweathermap.GetValue<Integer>('dt'));
    J'utilise toujours TryGetValue au lieu de GetValue<> et déclare openweathermap en TJSONValue plutôt que TJSONObject
    ce que fait automatiquement mon code si la structure contient un TDateTime

    https://github.com/tothpaul/DelphiAC....JSON.pas#L828
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 180
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 180
    Points : 11 445
    Points
    11 445
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    ... déclare openweathermap en TJSONValue plutôt que TJSONObject
    Perso je ne m'en préoccupe plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var JSon := TJSOnObject.ParseJSONValue(...);
    Sinon il y a plusieurs façons de récupérer une donnée (ce qui ne facile pas la compréhension) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JSon.GetValue<integer>('dt');
    JSon.GetValue<TJSonNumber>('dt').AsInt;
    JSon.GetValue<TJSonValue>('dt').AsType<integer>;
    JSon.P['dt'].AsType<integer>;
    // etc.

  14. #14
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    mai 2008
    Messages
    2 356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 356
    Points : 2 305
    Points
    2 305
    Par défaut
    Merci tout le monde ...
    je vais devoir relire tout ça à tête reposée car comme dit plus haut je suis un très grand débutant JSON
    puis je vais retravailler mon code et retourner probablement vers vous.

    mais comme toujours, une petite question :
    en déclarant openweathermap comme TJSONValue au lieu de TJSONObject cela revient à dire que j'accède directement à la valeur chacun des memebres sans me soucier s'il est objet ou tableau ou juste un membre ? est ce cela ?
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  15. #15
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 180
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 180
    Points : 11 445
    Points
    11 445
    Par défaut
    TJSONValue est la classe de base dont dérive tous les types : TJSonObject, TJSonArray, TJSonNumber, etc. En déclarant la variable ainsi tu ne risques pas de te tromper
    Mais dans les faits TJSONValue est une classe abstraite et le type réel sera soit un TJSonObject, soit un TJSonArray (en fonction de la chaîne brute si elle est entre {} ou []).

    Dans ton premier code as TJSONObject est parfaitement inutile aux vues du fichier ({}) et générerait de toute façon une exception s'il contenait un tableau.

    En bref il ne fait pas sens de déclarer la variable en TJSONValue si le type est clairement défini. Tu devrais le faire si la chaîne brute est susceptible de contenir soit un élément unique, soit un tableau et c'est la suite du code qui devrait agir en conséquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if JSon is TJSonArray then
        ...
    else if JSon is TJSonObject then
        ...
    Avec un var inline on ne se pose plus la question de la déclaration

  16. #16
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    mai 2008
    Messages
    2 356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 356
    Points : 2 305
    Points
    2 305
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    TJSONValue est la classe de base dont dérive tous les types : TJSonObject, TJSonArray, TJSonNumber, etc. En déclarant la variable ainsi tu ne risques pas de te tromper
    Mais dans les faits TJSONValue est une classe abstraite et le type réel sera soit un TJSonObject, soit un TJSonArray (en fonction de la chaîne brute si elle est entre {} ou []).
    c'est très clair merci.

    Citation Envoyé par Andnotor Voir le message
    [I]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if JSon is TJSonArray then
        ...
    else if JSon is TJSonObject then
        ...
    oui belle astuce.

    Citation Envoyé par Andnotor Voir le message
    [I]
    Avec un var inline on ne se pose plus la question de la déclaration
    par contre ça je n'ai pas bien saisis.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  17. #17
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 180
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 180
    Points : 11 445
    Points
    11 445
    Par défaut
    Depuis la 10.3 il est possible de déclarer (et initialiser) une variable directement dans le code en laissant le compilateur se débrouiller pour en déterminer le type.

    Avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure BlaBla;
    var
      JSon :TJsonObject;
    begin
      JSon := TJSOnObject.ParseJSONValue(...);
    end;
    Maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure BlaBla;
    begin
      var JSon := TJSOnObject.ParseJSONValue(...);
    end;

  18. #18
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    mai 2008
    Messages
    2 356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 356
    Points : 2 305
    Points
    2 305
    Par défaut
    merci pour l'explication @Andnotor.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

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

Discussions similaires

  1. Mes premiers pas , avec un programme " y=ax+b"
    Par loyk75 dans le forum Général Java
    Réponses: 0
    Dernier message: 22/11/2009, 16h48
  2. Mes premiers pas
    Par camboui dans le forum Linux
    Réponses: 11
    Dernier message: 27/06/2008, 13h55
  3. Réponses: 5
    Dernier message: 02/03/2008, 12h20
  4. Réponses: 5
    Dernier message: 13/02/2008, 11h19
  5. mes premiers pas
    Par meddeb2001 dans le forum WinDev
    Réponses: 1
    Dernier message: 15/01/2007, 12h06

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