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

Turbo Pascal Discussion :

Compter les caractères d'un fichier texte


Sujet :

Turbo Pascal

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut Compter les caractères d'un fichier texte
    Bonjour j'ai un petit soucis avec mon programme...
    Après avoir ouvert un fichier-texte j'aimerai pouvoir calculer le nombre de caractère que contient le texte afin de pouvoir calculer le nombre de lignes qu'il contient...
    quelqu'un sait m'aider?

  2. #2
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    Par défaut
    Ta question n'est pas claire : un type fichier texte en Pascal est un type fichier 'File of char' qui possède un caractère CR/LF à la fin de chaque ligne.

    DONC le fichier texte est déjà structuré sous forme de lignes, inutile par conséquent de compter les caractères pour avoir le nombre de lignes. Le code suivant permet d'obtenir ce nombre de lignes :

    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
     
     
         Function Nb_Lignes : integer;
     
         Var 
           Nom_Fichier : String;
           Fichier_Source : Text;
           i: integer;
     
         Begin
     
           Writeln(' Nom du fichier à ouvrir ? ');
           Readln(Nom_Fichier);
           Assign(Fichier_Source,Nom_Fichier); 
           {$i-}
            reset(Fichier_Source);
           {$i+}
            If IOresult<>0 then
              Begin
               writeln('Le fichier ', Nom_Fichier, '  n''a pas été trouvé ');
               readln;
               Halt;
              end;
         i:=1;
        While not eof(Fichier_Source) do
          Begin
            Readln(Fichier_Source);
            i:=i+1;
          End; (* lecture fichier *)
        close(Fichier_Source); {fermeture fichier source}
        Nb_Lignes := i;
     
       End; (* Nb_Lignes *)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut merci
    Citation Envoyé par richard Voir le message
    Ta question n'est pas claire : un type fichier texte en Pascal est un type fichier 'File of char' qui possède un caractère CR/LF à la fin de chaque ligne.

    DONC le fichier texte est déjà structuré sous forme de lignes, inutile par conséquent de compter les caractères pour avoir le nombre de lignes. Le code suivant permet d'obtenir ce nombre de lignes :

    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
     
     
         Function Nb_Lignes : integer;
     
         Var 
           Nom_Fichier : String;
           Fichier_Source : Text;
           i: integer;
     
         Begin
     
           Writeln(' Nom du fichier à ouvrir ? ');
           Readln(Nom_Fichier);
           Assign(Fichier_Source,Nom_Fichier); 
           {$i-}
            reset(Fichier_Source);
           {$i+}
            If IOresult<>0 then
              Begin
               writeln('Le fichier ', Nom_Fichier, '  n''a pas été trouvé ');
               readln;
               Halt;
              end;
         i:=1;
        While not eof(Fichier_Source) do
          Begin
            Readln(Fichier_Source);
            i:=i+1;
          End; (* lecture fichier *)
        close(Fichier_Source); {fermeture fichier source}
        Nb_Lignes := i;
     
       End; (* Nb_Lignes *)
    merci je vais essayer!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut autre question
    Citation Envoyé par ProgramPascal Voir le message
    merci je vais essayer!
    malgrès ça j'ai aussi besoin de connaitre le nombre de caractère d'une ligne...
    JE suppose qu'il faut faire la meme chose avec a à la place de I par exemple mais commentl'ordinateur va savoir s'il doit calaculer les lignes ou les caractères

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 970
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 970
    Par défaut
    Coa,
    Citation Envoyé par ProgramPascal Voir le message
    malgrès ça j'ai aussi besoin de connaitre le nombre de caractère d'une ligne...
    JE suppose qu'il faut faire la meme chose avec a à la place de I par exemple mais commentl'ordinateur va savoir s'il doit calaculer les lignes ou les caractères
    À ton avis ?

  6. #6
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    Par défaut
    Une deuxième fonction ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut je crois
    Citation Envoyé par richard Voir le message
    Une deuxième fonction ?
    grace au eoln ou eof?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut
    Citation Envoyé par ProgramPascal Voir le message
    grace au eoln ou eof?
    pourquoi une autre procédure? je pensais tout mettre dans une meme procedure
    Une seule pocédure qui compte le nombre de ligne ensuite dans chaque ligne compte le nombre de caractère afin d'apporter certaines modifications

  9. #9
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    Par défaut
    Le principe est d'utiliser eoln en effet et de compter les caractères. L'algo est simple.

    Si c'est une fonction, deux c'est mieux, pour pouvoir les utiliser séparément.

    Si tu utilises une procédure, il faut faire attention aux résultats : variables locales ? Comment les utiliser dans le programme. Si tu modifier l'état de ton fichier, c'est en effet une procédure qu'il te faut.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut
    Citation Envoyé par richard Voir le message
    Le principe est d'utiliser eol en effet et de compter les caractères. L'algo est simple.

    Si c'est une fonction, deux c'est mieux, pour pouvoir les utiliser séparément.

    Si tu utilises une procédure, il faut faire attention aux résultats : variables locales ? Comment les utiliser dans le programme. Si tu modifier l'état de ton fichier, c'est en effet une procédure qu'il te faut.
    Merci beaucoup j'essairai de vous tenir au courant

  11. #11
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    Par défaut
    Bonsoir ,

    Je viens de m'apercevoir qu'il y a une erreur dans la fonction que je t'ai donnée : il faut initialiser la variable i à 0 et non pas à 1 comme je l'ai fait (j'avais dû modifier ça pour les besoins d'un programme particulier et je t'ai envoyé la mauvaise version.)

    Pour compter les caractères, utilise la fonction Length de TP.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut
    Citation Envoyé par richard Voir le message
    Bonsoir ,

    Je viens de m'apercevoir qu'il y a une erreur dans la fonction que je t'ai donnée : il faut initialiser la variable i à 0 et non pas à 1 comme je l'ai fait (j'avais dû modifier ça pour les besoins d'un programme particulier et je t'ai envoyé la mauvaise version.)

    Pour compter les caractères, utilise la fonction Length de TP.
    Donc l'unité de mesure de length sont les caractères?

  13. #13
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Citation Envoyé par ProgramPascal Voir le message
    Donc l'unité de mesure de length sont les caractères?
    Oui

  14. #14
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    Par défaut
    L'algo est quasiment le même que pour le comptage des lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      1) Ouvrir le fichier
      2) Tant Que la fin du fichier n''est pas atteinte Faire :
              a) Lire une ligne du fichier
              b) Affecter la longueur de la ligne (length) à une variable 
                 ('NbCaracteres' par exemple)
       3) fermer le fichier.
    Poste ta solution et je regarderai si ça fonctionne. J'ai aussi une fonction pour ce genre de choses.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut
    Citation Envoyé par richard Voir le message
    L'algo est quasiment le même que pour le comptage des lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      1) Ouvrir le fichier
      2) Tant Que la fin du fichier n''est pas atteinte Faire :
              a) Lire une ligne du fichier
              b) Affecter la longueur de la ligne (length) à une variable 
                 ('NbCaracteres' par exemple)
       3) fermer le fichier.
    Poste ta solution et je regarderai si ça fonctionne. J'ai aussi une fonction pour ce genre de choses.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while not eoln(fichier_source) do
    	Begin
    	readln(fichier_source);
    	A:=A+1;
    	end;
     
    nb_car := A;
    normalement je sais que ln est prédéfini donc je pensais faire read(ln) mais ça fonctionne pas...

  16. #16
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    Par défaut
    relis mon post : je t'ai dit d'utiliser la fonction Length. L'as-tu utilisée ?

  17. #17
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    Par défaut
    d'autre part, il faut faire un Readln sur le fihier texte mais affecter chaque ligne à une variable ('Ligne' ar exemple, c'est original) pour pouvoir lui appliquer la fonction Length.

    Ponds un code et je te dirai ce qu'il faut faire faire pour l'améliorer. Je t'ai donné pas mal de pistes, là. Avec l'algo ça devrait normalement t'aider.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut
    Citation Envoyé par richard Voir le message
    d'autre part, il faut faire un Readln sur le fihier texte mais affecter chaque ligne à une variable ('Ligne' ar exemple, c'est original) pour pouvoir lui appliquer la fonction Length.

    Ponds un code et je te dirai ce qu'il faut faire faire pour l'améliorer. Je t'ai donné pas mal de pistes, là. Avec l'algo ça devrait normalement t'aider.
    En gros je déclare var ligne1,ligne2,ligne3: string
    Ensuite pour calculer le nombre de caractère de la ligne je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    readln(fichier_source)
    length(ligne1)
    readln(fichier_source)
    length(ligne2)
    etc
    ? c'est ce que j'ai compris mais ça m'a l'air faux donc je suppose que j'ai mal compris

  19. #19
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 476
    Par défaut
    La déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Nom_Fichier, ligne : String;
    Une boucle pour lire toutes les lignes une par une et calculer leur nombre de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     While not eof(Fichier_Source) do
              begin
              end;
    lecture et affectation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    readln(Fichier_Source, Ligne);
    puis dénombrement du nombre de caractères avec length pour chaque ligne. Si c'est un exercice tu aurais dû normalement avoir des cours t'expliquant au moins la lecture d'un fichier, théoriquement.

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut
    Citation Envoyé par richard Voir le message
    La déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Nom_Fichier, ligne : String;
    Une boucle pour lire toutes les lignes une par une et calculer leur nombre de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     While not eof(Fichier_Source) do
              begin
              end;
    lecture et affectation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    readln(Fichier_Source, Ligne);
    puis dénombrement du nombre de caractères avec length pour chaque ligne. Si c'est un exercice tu aurais dû normalement avoir des cours t'expliquant au moins la lecture d'un fichier, théoriquement.
    Dans cette partie
    Une boucle pour lire toutes les lignes une par une et calculer leur nombre de caractères :

    [CODE] While not eof(Fichier_Source) do
    begin
    end;
    Je suppose que je dois mettre quelque chose entre le begin et le end sinon c'est que je comprends pas comment cette boucle lit et calcul

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/11/2012, 19h18
  2. Compter les lignes dans un fichier texte.
    Par morora69 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 30/06/2010, 16h20
  3. Programme pour compter les lignes d'un fichier texte?
    Par codon21 dans le forum Windows
    Réponses: 1
    Dernier message: 19/03/2009, 07h36
  4. [68k] Compter les caractères
    Par djedie dans le forum Autres architectures
    Réponses: 3
    Dernier message: 02/02/2005, 08h40
  5. Réponses: 5
    Dernier message: 25/01/2005, 14h26

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