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 la taille d un fichier en entrée standard


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 95
    Par défaut Connaitre la taille d un fichier en entrée standard
    Bonjour, je voulais savoir comment on fesait pour connaitre la taille d un fichier sur entrée standard ?
    Et comment récupere tout les texte contenu dedans ?

    MErci.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    je crains que tu ne puisses, et que tu sois obligé de tout lire au fur et à mesure... (à coup de fgets() et d'une liste chaînée par exemple...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Pour savoir la taille à partir d'un flux : demande à aller à la fin puis demande quelle est ta position.
    Pour savoir la taille à partir d'un nom de fichier : utilise boost.filesystem.

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 95
    Par défaut
    Mais comment connaitre le nombre de ligne d un fichier en entrée standard ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il faut tout lire et compter au fur et à mesure.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 95
    Par défaut
    Je suis totalement debutant... Comment fait ton pour tout lire ?
    Je dois boucler sur un fichier qui na pas de taille précise et lire plusieurs info par ligne pour les comparer.

    Et je ne sais pas comment dire a ma boucle de boucler jusqua la fin du fichier...

    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    On ne peut connaître à l'avance la "taille" de l'entrée standard, car on ne peut pas revenir au début une fois arrivé au bout.

    Tu es donc obligé de tout lire au fur et à mesure (ligne par ligne, par exemple...).
    En C++, tu peux utiliser std::getline() (fonction déclarée (et définie, puisque c'est un template) dans <string>) qui te soulage du fardeau de devoir agrandir toi-même ton buffer si la ligne est trop grande.
    std::getline() te donne à chaque fois une std::string contenant une ligne entière, il te restera donc à ajouter ces std::string à un conteneur de la STL...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 95
    Par défaut
    J'ai deux valeure par ligne, séparer par un espace, je voudrait comparer a chaque fois les infos que je trouve sur lentrée standard
    Voici mon code... Sa ne fonctionne pas !

    #include <iostream>
    #include <string>

    int main(void){
    std::string adresse;
    std::string num;
    while(std::getline()){
    //ici j aimerai affecter la premier valeure a une variable(adresse) et la seconde valeure a l autre variable(num)
    }
    return 0;
    }

    Si vous pouviez m indiquer comment récuperer les 2 valeures par ligne sa serai sympa
    Merci

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Sa ne fonctionne pas !
    Normal, tu t'es pas documenté sur std::getline pour savoir comment l'utiliser correctement.

  10. #10
    Membre chevronné Avatar de aziz jim
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 455

  11. #11
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Ce n'est pas possible. Tu dois tout lire et après analyser une fois que l'entrée standard aura été fermée.
    Et pourquoi tu veux connaitre cette taille ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  12. #12
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    La fonction getline() (disponible dans l'espace de nommage std) prend, au minimum, deux parametres:
    Le flux d'entrée à utiliser et
    Une chaine pour récupérer ce qui est lu.

    Un troisième parametre, facultatif permet de déterminer un délimiteur (caractère représentant la fin de lecture). Par défaut, c'est le retour à la ligne.

    Tu disposes de trois sortes de flux d'entrée:
    -L'introduction "clavier" par l'utilisateur
    -les fichiers ouvert en lecture (typiquement std::ifstream)
    -les chaines de flux d'entrée (std::istringstream)

    Si tu veux lire toute une ligne dans un fichier, tu peux travailler sous la forme de
    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
     
    //déclaration d'un chaine pour récupérer la lecture
    std::string recup
    //ouverture du fichier
    std::ifstream fichier("nom_du_fichier.ext")
    //n'oublions pas de tester l'ouverture
    if(!(fichier.is_open())
    {
        std::getline(fichier,recup);
        //gestion de la ligne récupérée (qui sera "koala,nounours", par exemple)
    }
    else
    {
        //oupppsss, fichier non ouvert
    }
    Si tu veux récupérer une introduction clavier, cela prendra la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //déclaration de la chaine qui permet d'avoir l'introduction clavier
    std::string recup;
    std::getline(std::cin,recup);
    //gestion de la chaine récupérée
    Enfin, les istringstream utilisées avec getline viennent à ton secours pour séparer une chaine en fonction d'un séparateur:
    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
     
    //recup est une std::string du genre de "koala01,nounours"
    //il nous faut 2 chaines distrincte s (une pour koala01 et une pour nounours)
    std::string chaine1;
    std::string chaine2;
    //création de la chaine d'entrée 
    std::istringstream iss(recup);
    //récupération de la première chaine dans chaine1
    std::getline(iss,chaine1,',');
    //récupération de la deuxieme chaine dans chaine2
    std::getline(iss,chaine2)
    ////////////////////////////////////////////////////////////////
    //utilisation dans le cadre d'une chaine dont on ignorerait le nombre d'éléments
    // du genre de "koala,nounours,australie,bush,...."
    //une chaine qui nous servira plusieurs fois
    std::string chaine;
    //un vecteur de chaines
    std::vector<std::string> separees;
    //et bien sur l'istringstream
    std::istringstream iss(recup);
    while(std::getline(iss,chaine,','))
    {
        //insertion de la chaine récupérée à la  fin du vecteur de chaines
        separees.push_back(chaine);
    }
    //un affichage de vérification
    for(unsigned int i=0;i<separees.lengt();i++)
        std::cout<<separees[i]<<std::endl;
    NOTA: pour pouvoir utiliser les ifstream/ofstream et les istringstream/ostringstream, il faut inclure respectivement les entetes <fstream> et <sstream>
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. [C#] Comment connaitre la taille d'un fichier.
    Par PascalCmoa dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/02/2018, 08h54
  2. Connaitre la taille d'un fichier distant
    Par pipopipo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/08/2007, 11h01
  3. [Techno] Connaitre la taille d'un fichier coté client
    Par K-Kaï dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 15/05/2006, 15h00
  4. Réponses: 2
    Dernier message: 26/04/2005, 12h18
  5. [JSP] Connaitre la taille d'un fichier
    Par dst dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 21/06/2004, 17h22

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