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 :

Taille d'un fichier texte


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Taille d'un fichier texte
    Bonjour,
    ---
    je cherche à trouver la taille d'un fichier texte.
    ---
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.BtnTailleFichierClick(Sender: TObject);
      var
        F                        : textfile;                                        // fichier à décoder
        Taille                   : int64;                                           // taille du fichier
      begin
          AssignFile(F, 'c:\texte.txt');
          reset(F);                                                                 // positionne le fichier en lecture
          taille:=FileSize(F);                                                      // récupère la taille totale du fichier
          BtnTailleFichier.Caption:=IntToStr(taille);                               // affiche la taille
      end;

    ---
    la procédure fonctionne très bien en delphi 7
    sous Lazarus, j'obtiens le message d'erreur: Error: call by var for arg no.1 has to match exactly: Got "Text" expected "File"
    j'obtiens la même erreur en utilisant FilePos ...
    ---
    merci pour le temps que vous passez à essayer de comprendre ce que nous essayons de faire.
    bonne journée

  2. #2
    Membre expert
    Salut la réponse se trouve dans le message d'erreur. Voir FileSize

    Error: call by var for arg no.1 has to match exactly: Got "Text" expected "File"
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.BtnTailleFichierClick(Sender: TObject);
      var
        F                        : FILE;                                        // fichier à décoder
        Taille                   : int64;                                           // taille du fichier
      begin
          AssignFile(F, 'c:\texte.txt');
          reset(F);                                                                 // positionne le fichier en lecture
          taille:=FileSize(F);                                                      // récupère la taille totale du fichier
          BtnTailleFichier.Caption:=IntToStr(taille);                               // affiche la taille
      end;


    Sinon plus simple dans l'unté "FileUtil" tu as la fonction function FileSize(const Filename: string): int64; ou dans l'unité "LazFileUtils"function FileSizeUtf8(const Filename: string): int64;



    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Rédacteur/Modérateur

    Hello !

    Petite précision pour compléter la réponse de Jérôme. Pour avoir le résultat attendu (en octets), il faut écrire Reset(F, 1); ; ou alors déclarer le fichier comme file of byte.

    P.-S. Ou alors il faut multiplier le résultat par 128.

    Untyped files have a default record size of 128, if the second parameter to Reset isn't specified.
    https://www.freepascal.org/docs-html...m/filepos.html

  4. #4
    Membre du Club
    Longueur d'un fichier 'Texte'
    Bonjour,
    merci pour vos excellentes réponses.
    l'idée est bonne, mais ...
    ---
    j'essaye de traiter un fichier texte, ligne par ligne
    et si je le déclare en 'File', je ne peux plus me servir de 'ReadLn'

    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
     
    procedure TForm1.BtnTailleFichierClick(Sender: TObject);
      var
        F                        : textfile;                                        // fichier à décoder
        Taille                   : int64;                                           // taille du fichier
        tampon                   : string;                                       // lignes succesives chargées du fichier E3F
      begin
        AssignFile(F, 'c:\texte.txt');
        try
          reset(F);                                                                 // positionne le fichier en lecture
          taille:=FileSize(F);                                                     // récupère la taille totale du fichier
          BtnTailleFichier.Caption:=IntToStr(taille);                      // affiche la taille
          readln(F, tampon);                                                    // lis la 1ère ligne du fichier qui correspond au intitulé
          // traitement de la ligne
        Finally
          closeFile(F);                                                            // fermeture du fichier
        end;
     end;



    Bonne journée

  5. #5
    Expert confirmé
    hello,
    une autre façon de lire les lignes d'un fichier texte : le TStringList.

    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
    procedure TForm1.Button2Click(Sender: TObject);
    var textLines: TStringList;
         K: integer;
    begin
      memo2.Append('taille du fichier : ' +  
                             inttoStr(FileSize('unit1.Pas')) + ' octets');   // FileSize dans unité FileUtil
      textLines := TStringList.Create;
      try
        textLines.LoadFromFile('unit1.pas');
        for K:=0 to pred(textLines.Count) do 
             // lecture ligne par ligne
             begin
                Memo2.Append(textLines[K]);
             end;
      finally
      textLines.free;
      end;
    end;


    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  6. #6
    Rédacteur/Modérateur

    Citation Envoyé par neho88 Voir le message
    et si je le déclare en 'File', je ne peux plus me servir de 'ReadLn'
    Rien ne vous empêche de déclarer les deux. Il y a deux opérations distinctes : connaître la taille du fichier, et le lire ligne à ligne.

  7. #7
    Membre du Club
    Taille d'un fichier texte
    Bonjour,
    merci pour la réponse.
    ce serait une bonne solution si je n'avais pas besoin d'utiliser filepos(F) pour avertir la personne ou en est le décodage dans le fichier.
    bonne journée

  8. #8
    Membre expert
    Citation Envoyé par neho88 Voir le message
    Bonjour,
    merci pour la réponse.
    ce serait une bonne solution si je n'avais pas besoin d'utiliser filepos(F) pour avertir la personne ou en est le décodage dans le fichier.
    bonne journée
    Salut, je ne vois pas en quoi filepose(F) est obligatoire pour indiquer l'avancement de ton décodage. Si c'est octet par octet à la place de cette vieille méthode tu peux utiliser
    les Stream comme avec TFileStream Voir aussi ce tuto qui est pour Delphi mais applicable à Lazarus par exemple.

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

###raw>template_hook.ano_emploi###