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 :

nombre de colonnes dans une ligne


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 51
    Points : 34
    Points
    34
    Par défaut nombre de colonnes dans une ligne
    Bonjour,

    Je souhaite écrire une fonction qui prend en entrée une ligne lue dans un fichier et me retourne le nombre de strings qu'elle contient.

    Par exemple je lis la ligne suivante : "20MABNDA000001 1 8 1 Pr01" et me retourne 5.

    Dans la lecture de mon fichier j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *buffer = strdup((char*)ligne.c_str());
    pour garder une copie de la ligne lue et je fais des :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char *colonne1 = strtok( NULL, " " ); 
    char *colonne2 = strtok( NULL, " " ); 
    ....
    pour lire toutes les colonnes .... problème je veux savoir avant combien de colonnes dois-je lire ?

    Avez-vous des idées ?

    Merci de votre aide

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    Si tu es sûr que tes string sont spéparés par des espaces. Tu peux utiliser std::count :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::string ligne;
    // ligne = ...
    int nb_string = std::count(ligne.begin(), ligne.end(), ' '); // + 1 si ligne n'est pas vide
    Vu que le bout de code donné (tu peux utiliser la balise [CODE] ) est en C :
    Pour lire les fichiers en C++, on utilise ifstream. Tu peux aussi jeter un coup d'œil à std::getline pour récupérer une ligne depuis un fichier.

  3. #3
    Membre chevronné
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 855
    Points : 2 177
    Points
    2 177
    Par défaut
    Pour connaitre la "colonne" tu peux utiliser la methode find de la classe string. Ca te retournera la position (n'oublie pas la gestion d'erreur !).

    Petite question, pourquoi se faire c**** avec strdup quand on a les strings ?! Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char *to_copy = "tralalilou";
     
    string s_copy = to_copy;
    char *c_copy = strdup(to_copy);
     
    cout << "string : " << s_copy << endl << "char* : " << c_copy << endl;
    free(c_copy); //C oblige, un malloc = un free

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/10/2007, 14h59
  2. Nombre de colonnes dans une feuille de données
    Par steps5ive dans le forum Access
    Réponses: 2
    Dernier message: 09/01/2007, 21h52
  3. Compter le nombre de colonne dans une table
    Par Coin dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2006, 16h03
  4. Regrouper des colonnes dans une ligne
    Par aturlan dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2006, 21h05

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