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 :

Petit soucis avec un fichier txt


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 17
    Par défaut Petit soucis avec un fichier txt
    Bonjour à tous,

    je suis confronté à un petit soucis en c++ sur un fichier txt.

    J'ai un fichier .txt de la forme suivante :

    2013-03-21 13:52:06 test
    2013-03-21 13:52:07
    2013-03-21 13:52:10 h
    2013-03-21 13:52:57 h
    2013-03-21 13:55:48 subj testcmd

    avec x ligne (recupération de l'instruction qu'un utilisateur tape dans un display)

    je souhaiterais recuperer la fin de la ligne , pour avoir ceci:

    test

    h
    h
    subj testcmd

    mais attention, voila mon soucis, je dois recuperer les 5 derniéres lignes du fichier txt, sachant que je ne connais pas par avance le nombre de ligne total.

    Autre soucis, la taille maximun de mon tableau de string, s'il y a plus de 255 ligne dans le fichier.

    J'ai donc créer un tableau de string qui recupére chaque ligne (et aussi une boucle while qui compte le nombre de ligne total)

    j'arrive bien à afficher la ligne (mais je n'arrive pas à decouper la chaine)

    Si quelqu'un à une idée, voila le bout de code qui me pose soucis.

    (tDisp.setText() dois avoir un type string)


    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
     
     
     
    ifstream monHistory("history.txt");
    			if(monHistory)
    			{
     
    				string cmdHistory;
    				string tbHistory[255];
    				int i = 0;
    				int n= 0; 
     
    				while ( ! monHistory.eof() )
    					{
    						while(getline(monHistory, cmdHistory))
    						{
    							tbHistory[i] = cmdHistory;
    								i++;
    						}
     
    						tDisp.setText("Cmd History", 8,0);
    						tDisp.setText(tbHistory[i-5] , 9 ,0);
    						tDisp.setText(tbHistory[i-4] , 10 ,0); 
    						tDisp.setText(tbHistory[i-3] , 11 ,0); 
    						tDisp.setText(tbHistory[i-2] , 12 ,0);
    						tDisp.setText(tbHistory[i-1] , 13 ,0);
    					}
    			monHistory.close();

    merci beaucoup,
    doc'

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Je pense que la fonction strtok_r pourrait t'intéresser.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 17
    Par défaut
    bonjour,

    je regarde tout de suite.

    Par contre je vois que strtok_r() fait une sortie de type char et non en string, mais ca je vais voir aprés.

    merci do'c

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    En C++, on a substr et find pour les std::string.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 17
    Par défaut
    re-bonjour,

    ha oui j'avais oublié le substr() merci !

    maintenant, il me faut résoudre le soucis de récupérer les 5 dernières lignes de mon fichier .txt Comme je connais pas le nombre max de ligne qu'il y aura dans le fichier (en gros ca fait office de log, sans taille max)

    merci beaucoup doc'

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Bonsoir,
    Tu te focalises trop sur "les 5 dernières alors que je sais pas combien j'en ai", alors que la solution au problème peut être très simple : tu log au fur et à mesure et ne récupères que les 5 dernières
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    std::vector<string> v;
    while()
    {
     std::string s;
     getline(s, file);
     v.push_back(s);
    }
    if (v.size() > 5)
      std::vector<string> last5 = std::vector(v.begin() + v.size() - 5, v.end());
    else
      std::vector<string> last5 = v;
    On peut aussi imaginer une autre voie, on log tout, on inverse le contenu et on prend alors les 5 premières
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::reverse(v.begin(), v.end());
    if (v.size() > 5)
      std::vector<string> last5 = std::vector(v.begin(), v.begin() + 5);
    else
      std::vector<string> last5 = v;
    Ou une version plus technique (non testée), qui n'en log que effectivement 5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i = 0;
    std::vector<string> v;
    v.resize(5);
    while()
    {
     getline(v[i++%5], file);
    }
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. Petit souci avec deux fichiers
    Par Dawlon dans le forum WinDev
    Réponses: 8
    Dernier message: 01/06/2012, 09h45
  2. petit soucis avec les listes
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/09/2005, 10h08
  3. Petit souci avec clause where
    Par ybruant dans le forum SQL
    Réponses: 1
    Dernier message: 21/07/2005, 22h10
  4. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45
  5. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52

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