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

C Discussion :

Déterminer le nombre de lignes d'un fichier texte


Sujet :

C

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 124
    Points : 53
    Points
    53
    Par défaut Déterminer le nombre de lignes d'un fichier texte
    Salut à tous,
    Un fichier texte est à ma disposition, et j'aimerais juste calculer le nombre de ligne qu'il possède, en supposant ne pas connaître ce nombre à l'avance.
    Le problème est que je ne vois pas comment faire.
    Si quelqu'un pouvait m'aider ...
    Merci

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Malheureusement, tu vas devoir le lire entièrement pour cela.
    Typiquement, le lire en mode texte en comptant le nombre de caractères de fin de ligne ('\n') que tu trouves.
    (et ajouter 1 si le dernier caractère lu n'est pas une fin de ligne, car ça arrive)

    Edit: Wow, double- cette fois-ci...

  3. #3
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Salut,
    Le plus simple est de parcourir le fichier caractère par caractère avec fgetc et de compter les caractères '\n'

  4. #4
    Membre habitué Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Points : 199
    Points
    199
    Par défaut
    Tu peux par exemple faire une boucle qui compte le nombre de "\n".

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 124
    Points : 53
    Points
    53
    Par défaut
    j'avais une idée avec quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(fgets(tab[i],50,stdin){
    i++;
    }
    mais après je vois comment lié ça au nombre de lignes.
    Ah oui j'ai omis une précision : le fichier texte comporte un mot par ligne, et tous les mots sont classés dans l'ordre alphabétique.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Je pense qu'ici, utiliser fgets() c'est se compliquer la tâche.
    Je conseillerais plutôt un truc de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FILE * fichier = ... ;
    int c;
    int nLignes = 0;
    while((c=fgetc(fichier)) != EOF)
    {
    	if(c=='\n')
    		nLignes++;
    }

  7. #7
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Citation Envoyé par Superne0 Voir le message
    j'avais une idée avec quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(fgets(tab[i],50,stdin){
    i++;
    }
    mais après je vois comment lié ça au nombre de lignes.
    Ah oui j'ai omis une précision : le fichier texte comporte un mot par ligne, et tous les mots sont classés dans l'ordre alphabétique.
    Si t'es sur que le fichier n'a pas de lignes de plus de 49 caractère saut de ligne compris, ça peut le faire, sinon trouve autre chose

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Et si on veut aussi compter une ligne si le dernier caractère n'est pas un \n :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FILE * fichier = ... ;
    int c;
    int nLignes = 0;
    int c2 = '\0';
    while((c=fgetc(fichier)) != EOF)
    {
    	if(c=='\n')
    		nLignes++;
    	c2 = c;
    }
    /* Ici, c2 est égal au caractère juste avant le EOF. */
    if(c2 != '\n')
    	nLignes++; /* Dernière ligne non finie */

  9. #9
    Membre habitué Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Points : 199
    Points
    199
    Par défaut
    Tu peux t'inspirer d'un code comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include<stdio.h>
    int main(void)
    {
    int car, NbLigne;
    NbLigne = 0;
    while (( car = getchar()) != EOF)
            if (c == '\n')
            ++NbLigne;
    printf("%d\n", NbLigne);
    return 0;
    }

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 124
    Points : 53
    Points
    53
    Par défaut
    Avec le premier code de Médinoc, j'ai une erreur de compilation à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FILE* fichier = test.c;
    .
    Je pars effectivement qu'une ligne ne contient pas plus de 50 caractères, et qu'il n'y qu'un seul mot par ligne.

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    En effet, un FILE* ne s'obtient pas comme ça.
    Il faut utiliser la fonction fopen().

    Typiquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FILE * fichier = fopen("test.c", "r");

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 124
    Points : 53
    Points
    53
    Par défaut
    Merci à tous pour votre interêt.
    Cela fonctionne parfaitement avec le code de Médinoc ...
    Juste une précision : à quoi correspond EOF ?

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    EOF est la valeur que retourne fgetc() en cas d'erreur ou de fin du fichier.

    Et bien sûr, il ne faut pas oublier de vérifier que fopen() a marché, ni de fermer le fichier avec fclose().

    C'est là qu'il convient de séparer le code en fonctions:
    Code C : 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
    #include <stdio.h>
     
    int compte(FILE *fichier)
    {
    	int c;
    	int nLignes = 0;
    	int c2 = '\0';
     
    	while((c=fgetc(fichier)) != EOF)
    	{
    		if(c=='\n')
    			nLignes++;
    		c2 = c;
    	}
     
    	/* Ici, c2 est égal au caractère juste avant le EOF. */
    	if(c2 != '\n')
    		nLignes++; /* Dernière ligne non finie */
     
    	return nLignes;
    }
     
    int main(void)
    {
    	FILE *fichier = fopen("test.c", "r");
    	if(fichier != NULL)
    	{
    		int nLignes = compte(fichier);
     
    		printf("Nombre de lignes : %d\n", nLignes);
     
    		fclose(fichier);
    	}
    	else
    		puts("Erreur en ouverture du fichier.");
    	return 0;
    }

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 124
    Points : 53
    Points
    53
    Par défaut
    OK.
    Merci beaucoup pour cette aide !
    C'est pas encore terminé ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] Déterminer le nombre de lignes d'un fichier excel
    Par olivier.breheret dans le forum Général Python
    Réponses: 3
    Dernier message: 20/05/2015, 09h16
  2. [Débutant] Déterminer le nombre de lignes d'un fichier csv
    Par charouel dans le forum C#
    Réponses: 7
    Dernier message: 14/06/2013, 18h28
  3. Réponses: 7
    Dernier message: 04/06/2008, 14h53
  4. Déterminer le nombre de lignes d'un fichier [.txt]
    Par Metallic-84s dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2006, 09h34
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

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