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 :

Erreur lors de l'ecriture dans un string


Sujet :

Delphi

  1. #1
    Membre confirmé
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut Erreur lors de l'ecriture dans un string
    Salut a tous
    J'essaie d'ecrire dans un string mais j'ai un chtite erreur:


    InSize, Tmp: String;
    RPoint: PChar;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
              Tmp := InSize[7] + InSize[8];
              RPoint[792] := chr(StrToInt(Tmp));      //Erreur
    InSize[7] = 0
    InSize[8] = 0
    Tmp = 00

    Est-ce du au fait que ce soit un nullbyte ou serait-ce une erreur de ma part ? Vu que c'est de l'hexa, faut sans doute placé un $ mais je sais pas ou le mettre

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Par défaut Type de InSize
    Est-ce que tu pourrais nous donner la déclaration du type du tableau InSize ?
    Est-ce bien une chaine ? Ou est-ce un tableau de char ?
    En fait la définition de toutes ces variables nous serait fort utile (InSize, Tmp et RPoint)

  3. #3
    Membre confirmé
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    Voila, dsl, j'avais oublié ce detail

    edit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RPoint[792] := chr(StrToInt('$' + Tmp));
    J'ai essayé ca, mm chose

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 207
    Par défaut
    Quand je lis:

    InSize[7] = 0
    InSize[8] = 0
    Tmp = 00

    Déjà, je pense qu'il faudrait lire
    InSize[7] := 0
    InSize[8] := 0
    Tmp := 00

    Ensuite, vu comme ça, je dirais qu'aucune de ces variables n'est de type string, ce qui fait que :

    RPoint[792] := chr(StrToInt(Tmp)); (le StrToInt)

    ne peut pas fonctionner!

    Je pense qu'il faudrait ça:

    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
     
    var
      InSize: string;
      RPoint: array [0..999] of integer; 
      Tmp: string;
    begin
      // Initialisation des variables
      Tmp := '';
      InSize := '1234567890'; // représentation sous forme de chaine d'un numérique
     
      // Construction de Tmp
      if (InSize[7] in ['0'..'9']) then Tmp := Tmp + InSize[7]; // Vérifie que InSize[7] représente un numérique
      if (InSize[8] in ['0'..'9']) then Tmp := Tmp + InSize[8]; // Vérifie que InSize[8] représente un numérique
     
      if (Tmp <> '') then  // On s'assure que Tmp n'est pas vide, sinon StrToInt va planter
      begin
        RPoint[792] := chr(StrToInt(Tmp));
      end;
     
      ... (Suite de ton code)

  5. #5
    Membre confirmé
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    Dsl mais j'ai rien compris,

    Tmp et InSize sont tous les deux des strings et RPoint, un PChar

    InSize contient enfait une taille en hexa et est long de 8
    Tmp ca servir a prendre 2 caracteres de InSize pour formé un code ascii en hexa (dans l'exemple ici c'est 00 mais, [5] et [6] par ex, c'est 4C mais en fonction du fichier, la taille varie, et donc, le code hexa aussi)

    Et le but est de replacer le caractere dans RPoint, par celui qui equivaut a l'hexa contenu dans TMP.

    Pour etre plus clair, une petite explication: RPoint contient un fichier, et le but est de modifier la taille de la section ressource avec la taille contenue dans InSize.



    Je suis aussi passé par un autre string (TEST := RPoint^;(avec et sans le ^)) et ensuite Delete(Test, etc) insert(etc) etc.
    Il n'y a pas d'erreur mais ca ne marche pas ... Y a un pb mais je sais pas lequelle

  6. #6
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Par défaut Allocation du PChar
    Un PChar ne définit qu'un pointeur et non pas la mémoire qui va avec...
    Quid du remplacement du PChar par un String ? Juste pour essayer...
    Ci ça passe, faudra faire une allocation de mémoire pour le PChar.
    M'est avis que le problème vient de là.

    Si l'allocation a été faite, elle est peut être trop faible : il faut peut être ajouter un élément supplémentaire : si l'allocation a été faite avec 792, est-ce qu'une allocation de 793 génère la même erreur ? Pour moi, une définition de 792 pour un PChar réserve de la mémoire entre 0 et 791, si on touche à la 792, on peut avoir dépassement...

  7. #7
    Membre confirmé
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    Il allait bien plus loin que 792

    De toute facon, c'est resolu maintenant, j'ai contourner le probleme
    Merci pour votre aide en tous cas

  8. #8
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Par défaut Résolution
    Peux tu nous dire comment tu as résolu ton problème ?

  9. #9
    Membre confirmé
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    Ca va etre compliqué pck il faudrai que j'explique tout le programme ...
    En gros, le prog load un 'loader' depuis ses ressouces, il le colle dans un fichier output, il prend le fichier input, il le crypte et il le colle dans le output apres le loader. Le truc, c que je voulais modifier le loader directement avant qu'il le colle dans l'output mais il y avait le problemes la. Donc j'ai laissé ca comme ca et apres le closehandle(output) j'ai reouvert l'output dans un stream, j'ai 'read' le stream dans un string, et j'ai utilisé delete et insert pour mettre ce que j'avais a mettre.

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

Discussions similaires

  1. Erreur lors de l'ecriture d'une erreur dans tomcat
    Par zaius dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 08/01/2010, 10h18
  2. Comment sauter une ligne lors de l'ecriture dans un fichier
    Par Harald dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 29/05/2009, 18h01
  3. Réponses: 5
    Dernier message: 26/03/2007, 13h28
  4. [MySQL] Erreur lors de l'insertion dans ma base de doneés
    Par ANISSS dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/11/2006, 12h47
  5. Réponses: 2
    Dernier message: 21/06/2004, 15h55

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