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 :

Taille d'un fichier texte


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Points : 63
    Points
    63
    Par défaut 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
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    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

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    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
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Points : 63
    Points
    63
    Par défaut 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 éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 939
    Points : 9 251
    Points
    9 251
    Par défaut
    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

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    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.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Points : 63
    Points
    63
    Par défaut 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
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    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

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/07/2015, 17h56
  2. Taille d'un fichier texte
    Par tupac25 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 26/10/2010, 11h51
  3. Réponses: 2
    Dernier message: 16/05/2008, 17h25
  4. Réponses: 13
    Dernier message: 22/01/2008, 16h25
  5. Réponses: 6
    Dernier message: 23/03/2007, 13h26

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