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 :

Fichier typé et string


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2002
    Messages : 109
    Points : 71
    Points
    71
    Par défaut Fichier typé et string
    Bonjour,

    J'aimerais utiliser un fichier typé (à partir d'une structure record). J'ai un champ strDescription déclaré string[255] mais j'aimerais pouvoir y stocker plus de caractères (4 à 5 fois plus).

    Évidemment, AnsiString, WideString, rien ne fonctionne. Quelqu'un saurait m'aider? Quel autre type de données pourrais-je utiliser?

    Merci d'avance!

  2. #2
    Membre habitué Avatar de Guile
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 130
    Points : 144
    Points
    144
    Par défaut
    Salut ;-)
    Pourquoi ne pas essayer TStringList ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2002
    Messages : 109
    Points : 71
    Points
    71
    Par défaut
    Je peux stocker un TStringList dans le fichier? Dans un record, ça ne sera pas aimé non?

  4. #4
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    qui dit fichier typé, dit taille figée.

    le plus simple, utiliser 4 ou 5 champs strdescription par record.


    sinon, utiliser un champ string mais il faudra oublier le fichier typé et gérer soi même l'écriture et la lecture du fichier en mémorisant à chaque fois la longueur du string à l'écriture et en la lisant avant lecture pour connaitre le nombre de caractères à lire.
    par contre çà permet d'utiliser les streams pour la lecture et l'écriture.

    exemple

    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
    Type 
      TMyRecord = record 
        n : Integer;
        s : String;
        end;
     
      TMyRecordArray = Array of TMyRecord;
     
     
    Procedure WriteRecords;
    Var
      AFileStream : TfileStream;
      Index : Integer;
    Begin
    AFilestream := TFileStream.Create( NomFichier, FmCreate or FmOpenWrite);
    AfileStream.Write( Length( MyRecordArray, 4)); // écrit le nombre d'items
    For Index := 0 to high(MyRecordArray) do
      Begin
      AfileStream.Write( MyRecordArray.n, 4); // écrit la valeur de n
      AfileStream.Write( length(MyRecordArray.s), 4); // écrit la taille du texte
      AfileStream.Write( MyRecordArray.s[1], length(MyRecordArray.s)); // écrit le texte
      End;
    AFileStream.free;
    End;
     
    Procedure ReadsRecords;
    Var
      AFileStream : TfileStream;
      Index, ItemsCount, StringSize : Integer;
    Begin
    AFilestream := TFileStream.Create( NomFichier, FmCreate OpenRead);
    AfileStream.read( ItemsCOunt, 4); // lit le nombre d'items à lire
    SetLength(MyRecordArray, ItemsCount); // met à longueur le tableau de records
    For Index := 0 to ItemsCount - 1 do
      Begin
      AfileStream.Read( MyRecordArray.n, 4); // lit l'integer
      AfileStream.Read( StringSize, 4); // lit la taille du texte
      AfileStream.Read( MyRecordArray.s[1], StringSize); // lit le texte
      End;
    AFileStream.free;
    End;

    fait en live, je ne promets pas que çà soit sans bug.. mais c'est le principe.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2002
    Messages : 109
    Points : 71
    Points
    71
    Par défaut
    Je vais donc utiliser plusieurs champs.

    Merci!

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 06/07/2006, 18h40
  2. Ouverture de fichier avec un string
    Par slate dans le forum C++
    Réponses: 4
    Dernier message: 17/02/2006, 16h16
  3. transformer un buffer non typé en string
    Par bjl dans le forum Langage
    Réponses: 6
    Dernier message: 07/01/2006, 12h14
  4. [VB6]écriture dans un fichier: mélange binaire string.
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 28/12/2005, 12h29
  5. Réponses: 2
    Dernier message: 06/12/2005, 12h01

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