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

Lazarus Pascal Discussion :

Ajouter un enregistrement à un fichier


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Ajouter un enregistrement à un fichier
    Bonsoir à toutes et à tous,

    Avec la procédure Append, il est possible d'ajouter du texte à la fin d'un fichier ... Texte.

    Cette procédure ne fonctionne pas pour les autres types de fichiers. Or j'ai un fichier composé d'enregistrements (record) et je voudrais y ajouter toutes les X minutes un nouvel enregistrement sans avoir à ré-enregistrer tout le fichier et que cela fonctionne sous Windows et sous Linux.

    Je n'ai pas trouvé de méthodes pour cela (peut-être mal cherché). En existe-t-il ?

    J'ai essayé un transtypage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    type
      TVals = record
        A, B: Integer;
      end;
     
    var
      Vals: TVals
      F: Text;
    ...
    AssignFile(F, MonFichier);
    Append(F);
    Write (F, string(Vals.A)+string(Vals.B)); {Plantage}
    ...
    ça compile, mais ça plante à l'exécution. Il faut peut-être que je passe par un buffer ?

    Merci de votre aide.

    Pierre

  2. #2
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    TFileStream!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // creation
    with TFileStream.Create(fileName, fmOpenReadWrite) do
    try
      // on vas a la fin
      Position := Size;
      // on ecrit
      Write(Value, SizeOf(TValue));
    finally
      // on libère
      Free;
    end;
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Par défaut
    Methode 1 : Lire tous les enregistrement du fichiers puis ajouter.

    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
    program FileTest;
     
    uses SysUtils;
     
    type 
      TVals=record
        A, B : Integer;
      end;
     
    var
      Vals : TVals;
      F : file of TVals;
      I : Integer = 0;
    begin
      Assign(F,'vals.bin');
      FileMode:=fmOpenReadWrite;
      Reset(F);  
      while not Eof(F) do
      begin
        Read(F, Vals);
        WriteLn(I, ': A=', Vals.A, ' B=', Vals.B);
        I := I + 1;
      end;
     
      Write('A='); ReadLn(Vals.A);
      Write('B='); ReadLn(Vals.B);
      Write(F,Vals);
    end.
    Methode 2 : Fonctions 'File*'
    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
    program FileAppend;
     
    uses SysUtils;
     
    type 
      TVals=record
        A, B : Integer;
      end;
     
    var
      Vals : TVals;
      F : LongInt;
    begin
      F := FileOpen('vals.bin', fmOpenReadWrite);
      FileSeek(F, 0, fsFromEnd);  
     
      Write('A='); ReadLn(Vals.A);
      Write('B='); ReadLn(Vals.B);
     
      FileWrite(F,Vals, SizeOf(TVals));
     
      FileClose(F);
    end.

  4. #4
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci pour les solutions que vous m'apportez.

    Pour le moment, j'ai choisi d'utiliser "TFileStream".

    Par contre, il ne faut pas faire : mais : Cordialement.

    Pierre

  5. #5
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    exact
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  6. #6
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    et cerise sur le gateau avec TFileStream :


    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
      TVal = packed record
        A, B: integer;
      end;
      PVals = ^TVals;
      TVals = array of TVal;
     
    procedure ValsSave(FileName: string; lpVals: PVals);
    var
      vCount : integer;
      vSize : integer;
    begin
      with TFileStream.Create(FileName, fmCreate) do
      try
        vCount := Length(lpVals^);
        vSize := vCount * SizeOf(TVal);
        Write(vCount, 4);
        Write(vSize, 4);
        Write(lpVals^, vSize); 
      finally
        Free;
      end;
    end;
     
    procedure ValsLoad(FileName: string; lpVals: PVals);
    var vCount, vSize: integer;
    begin
      with TFileStream.Create(FileName, fmOpenRead) do
      try
        read(vCount, 4);
        read(vSize, 4);
     
        assert(vSize <> (vCount*SizeOf(TVal)), 'Size not match');
     
        SetLength(lpVals^, vCount);
        read(lpVals^, vSize);
      finally
        Free;
      end;
    end;
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

Discussions similaires

  1. [WB19] Ajout d'un enregistrement à un fichier de données
    Par Tito47 dans le forum WebDev
    Réponses: 6
    Dernier message: 16/04/2014, 17h25
  2. [AC-2010] Ajout d'enregistrement lors d une exportation ver un fichier texte
    Par baloo42400 dans le forum Access
    Réponses: 4
    Dernier message: 10/04/2014, 15h51
  3. Ajout d'enregistrements dans un fichier (vba)
    Par Darkrems dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/09/2013, 12h37
  4. [WD12] Ajout d'enregistrements dans un fichier Hyperfile
    Par Falcon074 dans le forum WinDev
    Réponses: 2
    Dernier message: 04/11/2009, 14h18
  5. ajout espace vide(253) en fin d'enregistrement dans fichier
    Par carmella dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/06/2008, 19h34

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