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 :

problème dans une chaîne de caractères


Sujet :

Delphi

  1. #1
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut problème dans une chaîne de caractères
    bonjour tout le monde
    je veux créer un fichier mais un champ de ce fichier je veux lui affecter une chaine de caractere mais qui contient 500 caractere mais le type string le max de caractere est 255
    est ce que vous pouvez m'aider à trouver une solution
    existe t il un type de string qui contient plus de 255 caracteres
    merci

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    As-tu essayé ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button1Click(Sender: TObject);
    Var
      Chaine : String;
      i : Integer;
    begin
      For i := 1 to 500 do
      Chaine := Chaine + IntToStr(i) + ' | ' ;
      ShowMessage (Chaine);
    end;
    Cela marche et il y a bien plus que 500 caractères.

  3. #3
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    ce que je veux c'est un champs dans un enregistrement qui contient 500 caractere qui va recuperer ce qui est ecrit dans un MEMO

  4. #4
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    La question n'est pas claire claire mais si je comprends bien, tu veux charger une chaîne de plus de 255 octets dans un enregistrement ET l'enregistrer dans un fichier non typé.

    Le problème est effectivement que pour l'enregistrement dans un fichier, le compil doit connaître la taille à donner à chacun des champs, ce qui oblige à déclarer tes String en String[..], ce qui est limité à 255 caractères.

    Le mécanisme enregistrements / fichier non typé est pratique par sa simplicité pour des très petits usages , mais il a ses limites assez étroites.

    Si tu connais une taille maxi au contenu de ton mémo, tu peux toujours le scinder en plusieurs String de 255 au niveau de ton enregistrement, et les concaténer lorsque tu veux les afficher. Sinon, je ne vois pas...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    Salut,

    Comme le dit rsc, précise un peu plus ta question.

    Au sujet des types string :
    Il y a deux types différents pour les chaines de caractères
    - le type string
    - et le type shortstring, ou string[14] (<- mettre n'importe quel chiffre <= 255 à la place du 14)

    Le premier type peut contenir des chaines arbitrairement longues. Delphi stocke un tableau de caractères, et un compteur qui garde en mémoire la taille de la chaine de carctères. Si "MaChaine" est une variable de type string, tu peux obtenir sa longueur en appelant "Length(MaChaine)".

    L'autre type est aussi un tableau de caractères, avec la convention suivante : le caractère 0 stocke la longueur de la chaine. Comme le caractère 0 est un caractère (sic...) la taille de ces chaines en peut pas dépasser 255. Quand tu déclares une variable de type "string[n]" , Delphi réserve en fait un tableau de n+1caractères, écrit #n dans la première case, et stocke les caractères que tu lui passes dans le reste du tableau. "shortstring" est la même chose que "string[255]".

    Ce deuxième type est encore présent pour des raisons de compatibilité ascendante : c'était le seul type chaine des premières versions de Pascal, il est encore là aujourd'hui pour pouvoir compiler les vieux programmes.

    Je n'ai pas très bien compris ce que tu voulais dire par "enregistrement" :
    * si tu voulais dire "type Record" : tu peux parfaitement mettre un champ "String" dans un record, et lui affecter des chaines aussi longues que tu veux. "TMemo.Text" renvoie directement un string contenant le contenu entier du Memo ;
    * si tu voulais dire "enregistrer dans un fichier" : réfléchis à ce que tu veux. Si tu veux pouvoir retrouver explicitement la fin de cette chaine de caractères précise, il faut soit que tu choisisses un moyen pour marquer la fin de la chaine : tu peux écrire la taille de la chaine juste avant d'écrire le contenu de la chaine proprement dite, tu peux écrire un #0 après la fin de la chaine... Si tu veux juste sauver le contenu d'un TMemo dans un fichier texte, regarde l'aide de "TMemo.Lines.SaveToFile"

    *LeGEC*

  6. #6
    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 448
    Points
    28 448
    Par défaut
    Citation Envoyé par sky88 Voir le message
    bonjour tout le monde
    je veux créer un fichier mais un champ de ce fichier je veux lui affecter une chaine de caractere mais qui contient 500 caractere mais le type string le max de caractere est 255
    est ce que vous pouvez m'aider à trouver une solution
    existe t il un type de string qui contient plus de 255 caracteres
    merci
    le type "statique", soit le ShortString est limité à 255 caractère. Mais tu peux déclarer un type spécifique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    type
      TString500=record
        Len : word;
        Chars: array[1..500] of char;
      end;
    le champ Len étant utile si tu veux éviter de traiter Chars comme un PChar (zéro terminal)

    la fonction "copy" de Delphi permet très facilement de passer de ce type à un type string (dynamique donc sans la limite des 255 caractères)
    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
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
     s500: TString500;
     str1: string;
     str2: string;
    begin
     str1 := 'hello';
    // string -> s500
     s500.Len := Length(str1);
     move(str1[1],s500.chars,s500.len);
    // s500 -> string
     str2:=copy(s500.chars,1,s500.len);
     ShowMessage(str2);
    end;

  7. #7
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    salut

    vous avez le type WideString que vous pouvez utiliser.

    a+

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    le Type string contient bien plus que 255 caractère c'est le shortstring qui ce limite a 255
    cet limitation n'est plus effective depuis la version 2 de delphi si je me souvient bien

    @+ Phil

  9. #9
    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 448
    Points
    28 448
    Par défaut
    Si je puis me permettre...j'ai extrapolé la question dans ce sens :

    rappel de la question :
    "je veux créer un fichier mais un champ de ce fichier je veux lui affecter une chaine de caractere mais qui contient 500 caractere"

    ma compréhension :
    je voudrais déclarer ceci mais ça ne passe pas à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    type
     TString500=string[500];
     
     TMonRecord=record
      Nombre: Integer;
      Chaine : TString500;
     end;
     
     TMonFichier = file of TMonRecord;
    d'où ma réponse

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/11/2006, 20h36
  2. Nombre d'occurences dans une chaîne de caractères
    Par Olivier14 dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 19h11
  3. Impossible d'utiliser & dans une chaîne de caractère
    Par gingman dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/03/2006, 20h35
  4. ?> dans une chaîne de caractéres
    Par nebule dans le forum Langage
    Réponses: 8
    Dernier message: 15/11/2005, 15h01
  5. Réponses: 4
    Dernier message: 23/06/2004, 09h51

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