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 de type


Sujet :

Langage Delphi

  1. #1
    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
    Points : 1 113
    Points
    1 113
    Par défaut Conversion de type
    Bonjour à tous,

    J'ai un petit souci de conversion que je n'arrive pas à comprendre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Car := Pied.CaractereDuChampLibre1[1];
        xStr := StringofChar(Car,Pied.TailleDuChampLibre1);
        StrPlCopy(FinEcr.__ChampLibre1,xStr,Length(xStr));
    Avec cette ligne je me colle une belle erreur si je remplace par cela, ça fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //    Car := Pied.CaractereDuChampLibre1[1];
        xStr := StringofChar('x',Pied.TailleDuChampLibre1);
        StrPlCopy(FinEcr.__ChampLibre1,xStr,Length(xStr));
    Concretement je pars d'une structure

    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
    type
      PFileStrucFactorPIED = ^TFileStrucFactorPIED;
      TFileStrucFactorPIED = packed record
          private __CodeEnregistrement  : array[0..2]   of AnsiChar; // 3
          private __CodeVendeur         : array[0..5]   of AnsiChar; // 6
          private __NomDuVendeur        : array[0..39]  of AnsiChar; // 40
          private __DateCreationfichier : array[0..7]   of AnsiChar; // 8
          private __NbreDeFacture       : array[0..3]   of AnsiChar; // 4
          private __MtTotalFactures     : array[0..14]  of AnsiChar; // 15
          private __NbreAvoir           : array[0..3]   of AnsiChar; // 4
          private __MtTotalAvoir        : array[0..14]  of AnsiChar; // 15
          private __ChampLibre1         : array[0..37]  of AnsiChar; // 38
          private __NbrGarantie         : array[0..3]   of AnsiChar; // 4
          private __MtTotalGaranties    : array[0..14]  of AnsiChar; // 15
          private __NbrLCR_PRE          : array[0..3]   of AnsiChar; // 4
          private __MtTotalLCR_PRE      : array[0..14]  of AnsiChar; // 15
          private __ChampLibre2         : array[0..179] of AnsiChar; // 180
          private __Devise              : array[0..2]   of AnsiChar; // 3
          private __VersionRIV          : array[0..5]   of AnsiChar; // 6
          private __FinLigne            : array[0..1]   of AnsiChar; // 2
      end;
     
    Const
      SizeOfFileStrucFactorPIED = SizeOf(TFileStrucFactorPIED);
    Et de ce record :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Type
      TPied = Packed record
        CodeEnregistrement    : String;
        CaractereDuChampLibre1: String;
        TailleDuChampLibre1   : Integer;
        CaractereDuChampLibre2: String;
        TailleDuChampLibre2   : Integer;
      end;
    Taille du champ 1 ou 2 sont donnée
    Caractères champs 1 et 2 sont récupérer par lecture INI

    Précision Car est de type Char

    Où est mon erreur ?.je comprends pas...

    Merci.

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Bonjour,
    Citation Envoyé par BuzzLeclaire Voir le message
    ... je me colle une belle erreur...
    Plus précisément, quelle erreur ?
    --
    Philippe.

  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
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Bonjour,Plus précisément, quelle erreur ?
    --
    Philippe.
    Je l'ai pas mis car elle n'aide pas vraiment :

    Le projet.... d'exception EAccessViolation .... "violation d'accès à l'adresse 00' blabla blabla

    Surement une erreur de pointeur.

    J'ai tenté d'inverser mettre dans mon TPied un tableau d'Ansichar mais toujours pareil.

    même symptôme.

    Merci.

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Tu as au vu du record une version de Delphi plus récente que les miennes...
    Je pense à un problème de conversion unicode...
    As tu essayé une ruse comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xStr := StringOfChar(Chr(Ord(Car)), Pied.TailleDuChampLibre1);
    --
    Philippe.

  5. #5
    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
    et si tu fais ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      if Length(Pied.CaractereDuChampLibre1) = 0 then
        raise Exception.Create('CaractereDuChampLibre1 est vide');
      Car := Pied.CaractereDuChampLibre1[1];

  6. #6
    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
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    et si tu fais ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      if Length(Pied.CaractereDuChampLibre1) = 0 then
        raise Exception.Create('CaractereDuChampLibre1 est vide');
      Car := Pied.CaractereDuChampLibre1[1];
    Purée, ma chaine est vide... mdr merci Paul.

    Ayant mis dans ma valeur un espace après mon = dans mon fichier ini je pensais qu'il prenais cette valeur ? que néni...

    extrait Lecture INI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Pied.CaractereDuChampLibre1     := Fini.ReadString('PIED','CaractereduChamplibre1',' ');
    Donc j'ai plus qu'a tester si elle est vide..

    Thx

    Ph. B.

    ton astuce n'a pas fonctionner non plus (normale le char était vide)

    Merci

  7. #7
    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
    Points : 1 113
    Points
    1 113
    Par défaut
    Voilà ce que j'ai modifié suite à ton info Paul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        if Length(Pied.CaractereDuChampLibre1) = 0
        then
          xStr := StringofChar(' ',Pied.TailleDuChampLibre1)
        else
        begin
          Car := AnsiChar(Pied.CaractereDuChampLibre1[1]);
          xStr := StringofChar(Car,Pied.TailleDuChampLibre1)
        end;
        StrPlCopy(FinEcr.__ChampLibre1,xStr,Length(xStr));
    J'ai juste changer ma variable Car en AnsiChar d'où le AnsiChar()...
    Résolu

    Merci.

  8. #8
    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
    violation d'accès à l'adresse 0
    c'est généralement l'usage d'un pointeur nil...dans ton cas une chaîne vide

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

Discussions similaires

  1. [DATE][CONVERSION] du type numerique au type date
    Par hamed dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/04/2005, 16h16
  2. Conversion de type
    Par sovitec dans le forum Langage
    Réponses: 5
    Dernier message: 15/12/2004, 14h29
  3. Conversion de type
    Par poirier dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 10h30
  4. [MYSQL] conversion de type sur import de script
    Par sebos63 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/08/2003, 10h00
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

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