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

Composants VCL Delphi Discussion :

méthode de lecture d'un fichier dans un buffer


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai

    Inscrit en
    Mai 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 25
    Points : 23
    Points
    23
    Par défaut méthode de lecture d'un fichier dans un buffer
    Bonjour,

    Je députe depuis peut en delphi, Maintenant que j'ai quelques base j'éssaye de nouvelle chose plus complexe...

    Par contre je bloque sur un point ...

    J'ouvre un fichier, que je mets en mémoire, j'aimerais lire les 4 premier bytes du fichier et les convertire en type Long, je n'y arrive pas...

    Quelqu'un peut m'indiqué un tuto concernant la conversion des données svp


    Merci d'avance

  2. #2
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Cela manque de précisions...

    Quelle version de Delphi ?
    Quelle méthode de lecture du fichier ? (TFileStream, TMemoryStreem, File, ... ?)
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  3. #3
    Membre à l'essai

    Inscrit en
    Mai 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Désolé...

    Delphi 7, type de fichier File :

    Voici mon code :

    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
    Procedure TForm1.Button2Click(Sender: TObject);
    Var NombrePnj : LongInt;
        Fichier : File;
        NomFichier : String;
        TailleDonnees : LongInt;
        Donnes : Pbyte;
        Emplacement : Pbyte;
    Begin
      NomFichier := 'test.dat';
      AssignFile(Fichier,NomFichier);
      Reset(Fichier,1);
      TailleDonnees := FileSize(Fichier);
      GetMem(Donnees,TailleDonnees);
      BlockRead(Fichier,Donnees^,TailleDonnees);
      Emplacement := Donnees;
      // lecture du premier long.
      ShowMessage(InttoStr(Lecture_Long));
      FreeMem(Donnees);
      CloseFile(Fichier);
    End;
     
    Function TForm1.Lecture_Long : LongInt;
      Var Valeur : LongInt;
    Begin
      Lecture_Long := Pulong(LongInt(Emplacement))^;
      Emplacement := Pointer(LongInt(Emplacement) + 4);
    End;
    Voila ce que je viens de trouvé, ont dirait que cela fonctionne maintenant... Mais je fait appel a vous pour savoir si cette méthode et bonne.

  4. #4
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    C'est une méthode... la bonne ? je ne suis pas juge, mais je préfère la méthode plutot orienté objet qui consiste à utiliser un 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
    procedure TForm1.btn2Click(Sender: TObject);
    var
      vFlux: TStream; // Un flux quelconque
      vLong: Integer; // LongInt c'est pareil
    begin
      // Un flux spécialisé pour un fichier
      vFlux := TFileStream.Create('test.dat', fmOpenRead);
      try
        // Lecture dans le flux et ecriture dans le buffer
        vFlux.Read(vLong, SizeOf(vLong));
     
         // ... on peut lire les autres données ici
     
      finally
        // Quoi qu'il arrive, on libère le flux (et donc le fichier)
        vFlux.Free;
      end;
     
      ShowMessage('Valeur lue : '+IntToStr(vLong));
    end;
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  5. #5
    Membre à l'essai

    Inscrit en
    Mai 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Ta méthode et très clair et beaucoup plus compréhensible !

    Merci de me l'avoir posté, je vais m'entraîner dessus elle me semble pratique

    Mais j'ai une autre question concernant cette méthode, Admettons que :

    Dans le fichier ce trouve au départ un Long, Puis ensuite 2 bytes et de nouveau Un long.

    Comment faire pour faire pointé la lecture a un endroit X du fichier ?

  6. #6
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Avec un descendant de TStream, lorsque tu fais un Read(Buffer, Size) la position dans le flux avance de la taille qu'il a pu lire (au maximum de celle donnée Size). Pour connaitre ce que le flux a réellement lu, il suffit de récupérer le retour de la fonction Read(Buffer, Size).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vNbreOctetsLus = vFlux.Read(vBuffer, SizeOf(vBuffer));
    Ensuite, pour connaitre la position dans le flux il suffit simplement de lire la propritété Position :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vPositionActuelle := vFlux.Position;
    Pour ta demande ca donnerait ceci :
    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
    procedure TForm1.btn2Click(Sender: TObject);
    var
      vFlux: TStream; // Un flux quelconque
      vLong: Integer; // LongInt c'est pareil
      vByte: Byte;
    begin
      // Un flux spécialisé pour un fichier
      vFlux := TFileStream.Create('test.dat', fmOpenRead);
      try
        vFlux.Read(vLong, SizeOf(vLong));
        ShowMessage('Valeur lue : '+IntToStr(vLong));
     
        vFlux.Read(vByte, SizeOf(vByte));
        ShowMessage('Valeur lue : '+IntToStr(vByte));
     
        vFlux.Read(vByte, SizeOf(vByte));
        ShowMessage('Valeur lue : '+IntToStr(vByte));
     
        vFlux.Read(vLong, SizeOf(vLong));
        ShowMessage('Valeur lue : '+IntToStr(vLong));
      finally
        // Quoi qu'il arrive, on libère le flux (et donc le fichier)
        vFlux.Free;
      end;
    end;
    N'oublie pas l'aide de Delphi :
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  7. #7
    Membre à l'essai

    Inscrit en
    Mai 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Tres grand merci !

Discussions similaires

  1. Lecture/Ecriture sur fichier dans Netbeans
    Par NizarK dans le forum NetBeans
    Réponses: 15
    Dernier message: 12/12/2008, 10h33
  2. Méthodes de lecture d'un fichier xml
    Par habibdu70 dans le forum C#
    Réponses: 1
    Dernier message: 01/02/2007, 13h25
  3. Lecture d'un fichier dans un archive '.zip'
    Par Ja_buzz dans le forum Langage
    Réponses: 2
    Dernier message: 04/11/2006, 16h14
  4. [C#] [WinForms] Lecture d'un fichier dans une archive ZIP
    Par aegypius dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/12/2004, 17h15

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