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 :

Variable string supérieur à 255 caractères !


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 25
    Points
    25
    Par défaut Variable string supérieur à 255 caractères !
    Bonjour à tous,

    Cette question a sans doute déjà été posée de nombreuse fois mais je n'ai pas trouvé en utilisant la fonction recherche une réelle réponse !

    Mon problème est simple, je veux stocker dans une variable de type String une chaîne de plus de 255 caractères, comment faire ?

    Peut être faut il ajouter tous les 255 caractères ceci : '+', mais comment faire pour que cela se fasse automatiquement ?

    Merci d'avance,
    Tom.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour le problème se situe-t-il au niveau de la compilation ou de l'exécution ?
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 25
    Points
    25
    Par défaut
    En fait je récupère le contenue d'un RichEdit pour le stocker dans un fichier.
    Le problème est que, le texte est couper au bout de 255 caractères car une variable de type string ne peux pas en supporter plus !

    Il y a donc les 255 premières caractères qui sont enregistrés

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hai,

    Avec Delphi, il y a bien longtemps que le type String n'est plus limité à 255 caractères, mais peut en contenir 2^31-1 (ou 2^32-1, je ne sais plus).

    Les chaînes limitées à 255 caractères sont des ShortString.
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Comme l'indique Droggo les String ne sont normalement plus limités à cette taille, sauf si vous utilisez une version ancienne de Delphi. Pour régler votre problème essayez de définir votre variable de type AnsiString si possible ou alors passez par un tableau de caractère en dernier recours.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 25
    Points
    25
    Par défaut
    Effectivement j'utilise D4 alors c'est plus tout jeune

    Je ne peux pas utiliser AnsiString car l'enregistrement ne se fait pas.

    Il n'y a pas une autre solution à part un tableau de caractères ?

    Il faudrai pouvoir décomposer la chaîne en 'Première partie'+'Deuxième partie'+'...' ...

    Merci de vos réponses.

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Alors j'espère qu'il y a les tableaux dynamiques en D4

    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
     cars: array of Char;
     CurNumLigne: Integer;
     CurIndex: Integer;
     Cpt: Integer;
    begin
      CurIndex := 0;
      for CurNumLigne := 0 to RichEdit.Lines.Count - 1 do
      begin
        // agrandir le tableau du nombre de caractères de la ligne
        SetLength( cars, Length( cars ) + Length( RichEdit.Lines[CurNumLigne] ) );
        for Cpt := 1 to Length( RichEdit.Lines[CurNumLigne] ) do
        begin
          cars[CurIndex] = RichEdit.Lines[CurNumLigne][Cpt];
          Inc( CurIndex );
        end;
     
      end;
     
    end;
    Voila c'est l'idée pour concaténer le tout.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 25
    Points
    25
    Par défaut
    Ok merci beaucoup !

    Ca marche impeccable

    J'ai fait une petite boucle pour mettre tout ça dans une chaîne de type String et c'est bon

  9. #9
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Citation Envoyé par AgriFlash Voir le message
    Effectivement j'utilise D4 alors c'est plus tout jeune
    Le type String non limité date de Delphi 2 ! (passage en Win32 alors que Delphi 1 était Win16)

    Par contre regarde dans test options de compilation si tu n'as pas coché l'option de "Chaine courte" ou un truc dans le genre.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par Nono40 Voir le message
    Par contre regarde dans test options de compilation si tu n'as pas coché l'option de "Chaine courte" ou un truc dans le genre.
    Effectivement, il faut cocher "Chaînes vastes" mais cela ne change rien !

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

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Euh, et Lines.SaveToFile en jouant avec PlainText devrait permettre de sauvegarder dans une fichier, ... sinon en passant via une TStringList temporaire et la propriété Text ...

    et je confirme, j'ai toujours connu les string larges, j'ai travaillé de D3 à D7 ...
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 25
    Points
    25
    Par défaut
    Le problème doit venir de l'enregistrement dans le fichier car j'ai fait des test et AnsiString marche bien.

    Je vais donc regarder ceci.

    Merci de vos réponses

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 25
    Points
    25
    Par défaut
    Bon maintenant que je sais d'où viens exactement le problème je vais pouvoir vous demander de l'aide en étant plus précis.

    Je dois donc enregistrer un chaine de plus de 255 caractères dans un fichier. Mais cela est impossible, voici un extrait que j'ai tirer sur un site pour mieux comprendre :

    Citation Envoyé par http://pagesperso-orange.fr/bardou/michel/erreurs.html
    Les string de Delphi 32 sont de 2 types: les chaines longues et les chaines... courtes. La taille des chaines courtes est définie par l'utilisateur dans le source le programme, mais si cette taille est indéfinie, le string devient une chaine longue. Le fait de ne pas définir la taille de ce string provoque une erreur lors de sa sauvegarde dans un fichier de type "file of string" (ou, comme dans notre exemple, "file of record" si le record en question contient une chaine longue), car le programme ne sait pas où se termine la chaine (et peut déborder sur la mémoire). Pour l'ouverture d'un fichier, c'est encore pire: on déborde du fichier (théoriquement; mais Delphi empêche ce débordement). Delphi génère un message d'erreur à la compilation pour empêcher ce genre de problème.

    Le fait de définir la taille du string pour le transformer en chaine courte crée une finalisation au string (ou au record si le string est contenu dans un enregistrement), d'où le texte du message d'erreur, qui indique une absence de cette finalisation.
    Or moi je ne peux pas définir une taille du string étant donner que je ne peux pas mettre plus de 255, ce qui correspond à une chaine courte !

    Quelqu'un a t'il une solution ?

    Merci d'avance,
    Tom.

  14. #14
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Et pourquoi tout simplement ne pas utiliser la solution de ShaiLeTroll ? A savoir utiliser la méthode SaveToFile de la propriété Lines de votre RichEdit ?

    Sinon je penses qu'utiliser une variable de type TextFile avec les routines appropriées (AssignFile, ReSet, WriteLn, etc...) devrait faire l'affaire.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 25
    Points
    25
    Par défaut
    Effectivement ça va tout simplifier, je vais utiliser "SaveToFile".

    Merci à vous !

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

Discussions similaires

  1. [AC-2007] Variable String limitée à 255 caractères !?
    Par HaHaa dans le forum VBA Access
    Réponses: 5
    Dernier message: 07/07/2010, 18h31
  2. [AC-2003] Champs text supérieur à 255 caractères
    Par smutmutant2003 dans le forum Modélisation
    Réponses: 2
    Dernier message: 22/01/2010, 15h14
  3. sql et variable string limité à 250 caractères
    Par philoeil dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 01/10/2007, 23h10
  4. variable supporte + que 255 caractères
    Par zidenne dans le forum Delphi
    Réponses: 4
    Dernier message: 01/09/2006, 17h22
  5. Variables string limité à 255 caractères?
    Par krfa1 dans le forum Access
    Réponses: 7
    Dernier message: 27/01/2006, 15h29

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