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 :

Connaitre le nombre de lignes utilisées


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Par défaut Connaitre le nombre de lignes utilisées
    Bonjour,
    j'ai un projet C traitement de texte a faire.
    Je vous explique mon problème.

    Je créé un tableau statique à deux dimensions tab[30][80]

    Ensuite je charge un fichier texte (a partir d'un .txt) quelconque (qui ne peut évidemment pas dépasser 30 lignes).

    J'aimerais savoir si il existe un moyen de connaitre le nombre de lignes utilisé dans le tableau .


    Merci beaucoup

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Si tu initialise ton tableau lors de sa déclaration par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char tab[30][80] = { { 0 } };
    bin il te suffit de faire une fonction qui parcours grâce à une boucle ton tableau et dès qu'une ligne dans ton tableau contient la valeur 0, grâce à la variable qui sert à la boucle tu peux déterminer le nombre de lignes utilisées dans ton tableau !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Par défaut
    Je test
    Merci beaucoup

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Tu peux imposer que la dernière ligne soit une chaîne de caractère vide. Cette condition est ensuite facile à tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i;
    tab[30][80] = {{0}};
    /* ... */
    for (i = 0; i < (sizeof tab / sizeof *tab)  && tab[i][0] != '\0'; ++i)
    {
        /* traitements */
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Par défaut
    J'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(i=0;i<11;i++)
    {
     if(texte[i][0] != '\0');
       {
        nbrligneini = nbrligneini + 1;
        }
    }
    Mais ça ne marche pas !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Par défaut
    Mujigka je ne vois pas ce que tu veux dire. (Désolé Je suis un débutant)

    Merci pour l'aide !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Par défaut
    J'ai pas tout compris, mais j'ai réussi à avoir le nombre de ligne

    Merci beaucoup

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par sebdu94
    J'ai pas tout compris, mais j'ai réussi à avoir le nombre de ligne

    Merci beaucoup
    Que n'as-tu pas compris ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par sebdu94
    j'ai un projet C traitement de texte a faire.
    Enorme projet...
    Je créé un tableau statique à deux dimensions tab[30][80]
    Ah ouais... C'est pas un traitement de texte. Juste un éditeur de texte basique limité à 30 lignes de 78 colonnes utiles.
    Ensuite je charge un fichier texte (a partir d'un .txt) quelconque (qui ne peut évidemment pas dépasser 30 lignes).
    Oui et attention aux colonnes.
    J'aimerais savoir si il existe un moyen de connaitre le nombre de lignes utilisé dans le tableau .
    Tu peux les compter au moment du chargement...
    Sinon, tu peux décider qu'un ligne utile, c'est au moins un \n. Donc si la ligne est vide ([0]) = 0 ou ""), c'est que la fin utile du tableau est atteinte.

    Il faut donc penser à initialiser le tableau (au moins les colonnes 0) au démarrage.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Par défaut
    Citation Envoyé par Franck.H
    Que n'as-tu pas compris ?
    En faite je ne comprends pas comment marche les "sizeof".


    Et pour Emmannuel, oui c'est un editeur de texte basique lol.



    Désolé mais j'ai un autre problème:
    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
    //calcul le nombre de lignes utilisées
    for (i = 0; i < (sizeof edit / sizeof *edit)  && edit[i][0] != '\0'; ++i)
    {
      nbrligneini = nbrligneini+1;
    }
     
    //copie dans un autre tableau
    for(i = 0 ; i < nbrligneini ; i++)
    {
     strcpy(edit[i], tablo[i]);
    }
     
    //affichage du texte
    for(i = 0; i < nbrligneini ; i++)
    {
     printf("%s\n", edit[i]);
    }
    La copie dans un autre tableau fait planter mon programme !!

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par sebdu94
    En faite je ne comprends pas comment marche les "sizeof".
    C'est un opérateur standard du C qui retourne la taille d'un objet ou d'un (type).

    Si tu connais les propriétés des tableaux, tu dois comprendre ce que fait sizeof edit / sizeof *edit

    La copie dans un autre tableau fait planter mon programme !!
    C'est possible.
    • Comment est défini l'autre tableau ?
    • Est-tu bien certain de la signification des paramètres de strcpy() ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Par défaut
    L'autre tableau est défini de la manière suivante :

    char tab[30][80];

    ensuite je charge le texte dans ce tableau.

    et je le passe dans un fonction qui devrait un jour permettre d'éditer le texte.

    main.c :
    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
    int choixinitial, toucheaide,i;
    long testchar;
     
    char nomfichierchar[30],nomfichiersave[30];
    char tab[30][80] = {{0}};
     
    //définir la taille de la fenêtre en 120x50
    system("MODE con: cols=120 lines=50");
     
    .
    .
    .
    .
     
     else 
           {
             //chargement du texte
             //choix initial pour pouvoir quitter le programme pendant l'édition du texte
             choixinitial = edit_text(tab);
    fonctions.c
    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
    int edit_text(char tablo[][80])
    {
     
    int touche, quit, testsauve, toucheaide ,i ,j , nbrligneini;
    char namesave[30];
     
    //initialisation du tableau d'édition à 0
    char edit[30][80] = { {0} };
     
    system("CLS"); //efface l'ecran
     
     
    //calcul le nombre de lignes utilisées
    for (i = 0; i < (sizeof edit / sizeof *edit)  && edit[i][0] != '\0'; ++i)
    {
      nbrligneini = nbrligneini ++ ;
    }
     
    //copie dans un autre tableau
     
    strcpy(edit, tablo);
     
     
    //affichage du texte
    for(i = 0; i < nbrligneini ; i++)
    {
     printf("%s\n", edit[i]);
    }
    Merci

  13. #13
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par sebdu94
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //copie dans un autre tableau
     
    strcpy(edit, tablo);
    OK. Et les paramètres de strcpy(), tu as vérifié ? Tu as bien pris conscience que c'est (destination, source) ?

    Et au fait, 'edit' et 'tablo' sont bien des tableaux de char ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Par défaut
    Pour les paramètres, oui l'ordre destination source est bon.
    Et ce sont bien des tableaux de char !!

  15. #15
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par sebdu94
    Pour les paramètres, oui l'ordre destination source est bon.
    Et ce sont bien des tableaux de char !!
    Je n'en suis pas si sûr...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /* adresse du premier élément d'un tableau de char a 2 dimensions... */
    ... (char tablo[][80]) 
    {
       ...
    /* tableau de char a 2 dimensions. */
       char edit[30][80] = { {0} };

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Par défaut
    Il me semblait que lorsque l'on passait un tableau à 2 dimensions en parametres, la premiere dimension ne devait pas forcement etre mentionnée.

    Et lorsque je la remplie le programme ne marche toujours pas

    merci

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par sebdu94
    Il me semblait que lorsque l'on passait un tableau à 2 dimensions en parametres, la premiere dimension ne devait pas forcement etre mentionnée.
    Ai-je dit le contraire ?

    J'essaye simplement de te faire remarquer que tu utilises strcpy() sur des tableaux de char à 2 dimensions, ce qui n'a aucun sens (comportement indéfini -> bug).

    strcpy() fait des copies de chaines, qui, sauf modification de dernière minute de la norme, sont des tableaux simples de char (1 dimension) initialisés et terminés par un 0.

    Ton compilateur devrait te le dire... si il est bien réglé...

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Par défaut
    Merci pour le lien !!

    Je pensais copier le tableau en copiant les lignes une par une grace a la boucle.
    Je partais du fait que chaque ligne est considéré comme un tableau a part entière.(Mais aparemment c'est faux ^^)

    En tout cas merci beaucoup pour tes conseils et ta patience.
    C'est très gentil !

  19. #19
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par sebdu94
    Je pensais copier le tableau en copiant les lignes une par une grace a la boucle.
    Bonne idée, mais ce n'est pas du tout ce que tu as codé...
    Je partais du fait que chaque ligne est considéré comme un tableau a part entière.(Mais aparemment c'est faux ^^)
    Non, c'est tout à fait correct. Mais encore une fois, ce n'est pas ce que tu as codé...

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Par défaut
    Peut tu m'éclairer stp ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/06/2006, 15h46
  2. [C#][Débutant] Connaitre le nombre de lignes d une requete SQL
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/04/2006, 00h48
  3. [VBA-E] connaitre le nombre de ligne dans un tableau excel
    Par bigbarbe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/04/2006, 10h03
  4. Connaitre le nombre de lignes imprimees
    Par Gremlins13 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 12/01/2006, 18h31
  5. Connaitre le nombre de lignes imprimees
    Par Gremlins13 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/01/2005, 14h38

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