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 :

Traiter les données d'un fichier texte


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Architecte systèmes
    Inscrit en
    Mai 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 32
    Points : 38
    Points
    38
    Par défaut Traiter les données d'un fichier texte
    Bonjour à tous,

    J'essaie d'écrire un programme en c++ pour lire puis écrire dans un fichier texte mais je rencontre quelques difficultés pour le coder. Il y a plusieurs fonctions que j'ai du mal à maitriser. Est-ce que vous pourriez me dire ce que vous en pensez svp? J'avoue que pour l'instant je galère un peu..

    Le fichier texte est de la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    29/01/2021 21:05
    29/01/2021 21:06
    29/01/2021 21:07
    29/01/2021 21:08
    29/01/2021 21:09
    29/01/2021 21:10
    29/01/2021 21:11
    29/01/2021 21:12
    29/01/2021 21:13
    29/01/2021 21:14
    Voici la liste des instructions de mon programme:

    Code algo : 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
    Si fichier .txt existe alors
         ouvrir .txt
         lire la dernière ligne
         convertir les caractères de la dernière ligne en secondes
         trouver l'indice de la série1 égale à secondes
     
         Si indice est nul alors
              écrire à la suite de .txt toute la série1
         Sinon
              écrire à la suite de .txt les données de série1 suivant indice
         fin
     
    Sinon
         créer le fichier .txt
         écrire série1 à la suite de .txt
    fin

    Voici ma tentative de code :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    using namespace std;
     
    fstream myFile("C:/Users/personne/Documents/essai.txt", std::ios::ate);
     
    if (myFile)
    {
            std::streampos size = myFile.tellg();
            char c;
            char temps[16];
    	for(int i=1;i<=16;i++)
            {
                     myFile.seekg(-i,std::ios::end);
                     myFile.get(c);
                     temps[i]=c;
            };
     
            int secondes;
    	secondes = calcul_ctime(temps); // fonction de conversion de temps en secondes
    	int indice;
            indice = getIndex(serie1, secondes); // fonction de recherche de l'indice de serie1 = secondes (renvoie 0 si aucun indice trouvé)
     
                     for (int i = indice; i < fin; i++)
    			 {
                                     struct temps_serie1
                                     temps_serie1 = conv_sec_to_temps(serie1(i)); // fonction de conversion des secondes de serie1 en temps (jours + mois + année + heures + secondes)
                                     myFile << temps_serie1.lesjours << "/" << temps_serie1.lesmois << "/" << temps_serie1.annee << " " << temps_serie1.lesheures << ":" << temps_serie1.lesminutes
                              };
            };
     
            myFile.close();
     
    else
            for (int i = 0; i < fin; i++)
                     {
                              struct temps_serie1
                              temps_serie1 = conv_sec_to_temps(serie1(i)); // fonction de conversion des secondes de serie1 en temps (jours + mois + année + heures + secondes)
                              myFile << temps_serie1.lesjours << "/" << temps_serie1.lesmois << "/" << temps_serie1.annee << " " << temps_serie1.lesheures << ":" << temps_serie1.lesminutes
                     };
     
            myFile.close();
    };
    Merci d'avance

    Mango1

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 551
    Points
    10 551
    Par défaut
    Citation Envoyé par mango1 Voir le message
    Est-ce que vous pourriez me dire ce que vous en pensez svp?
    C'est très mauvais

    Déjà c'est quoi le but insérer 1 temps, dans 1 liste chronologique
    Le problème c'est que tu utilises 1 fichier est donc, il faut entièrement le charger en mémoire, faire tout ce qu'il faut et l'écrire entièrement.

    Et accessoirement, pour savoir le nombre de lignes, il faut en premier lieu le lire entièrement pour compter les lignes bien formées.
    Savoir le nombre de lignes, cela va permettre de dimensionner ton tableau, mais 1 tableau std::vector est dynamique donc bon.

    Et accessoirement, je ne connais pas en C++, mais en C tu as 1 mode + (w+, r+) qui permet de créer le fichier s'il n'existe pas (<- si je ne me trompe pas)

    Code algo : 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
    38
    39
    40
    41
    42
    43
    44
    45
    // <--- optionnel, start here
    Ouverture en lecture/ création
     
    nb_lines = 0;
    lire 1 ligne
     
    tant que la ligne n'est pas vide
        convertir la ligne en temps
     
        si la conversion est bonne alors ++nb_lines;
        lire 1 ligne
    fin tant que
     
    Fermer le fichier
    // <--- optionnel, stop here
     
    création d'1 tableau list_series [optionnel : de (nb_lines + celles que tu vas insérer)]
     
    Ouverture en lecture ou lecture/ création si tu n'as pas fait l'optionnel.
    lire 1 ligne
     
    tant que la ligne n'est pas vide
        convertir la ligne en temps
     
        si la conversion est bonne alors stocker ce temps dans list_series 
        lire 1 ligne
    fin tant que
     
    Fermer le fichier
     
    Recherche dans list_series l'index d'insertion (en gros, tant que temps recherché supérieur, index++)
    Insertion dans list_series
     
    Ouverture en écriture qui détruit le fichier // ou alors renommer/ copier l'ancien parce que cela évite de transpirer en cas de problèmes
     
    index = 0;
     
    tant que la ligne n'est pas vide
        convertir list_series[index] en chaîne de caractères
     
        si la conversion est bonne alors écrire la chaîne de caractères, ++index
        lire 1 ligne
    fin tant que
     
    Fermer le fichier

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Architecte systèmes
    Inscrit en
    Mai 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    Merci pour ta réponse

    C'est très mauvais
    l'important c'est de s'améliorer

    Le but est de venir greffer une série à la suite du fichier texte. Si une partie de la série est déjà dans le fichier texte alors ça ne sert à rien de tout réécrire et il faut juste écrire la suite de la série dans le texte. Si le fichier texte ne contient en revanche aucune partie de la série alors il faut tout écrire. Si le fichier texte n'existe pas alors il faut le créer et écrire toute la série dedans. Voilà l'idée

    Pour placer le flux à la fin du fichier, j'utilise la commande std::streampos size = myFile.tellg() ; c'est une commande que j'ai trouvé sur un autre forum (j'ai quelques doutes dessus honnêtement)

    De la ligne 8 à 15, je lis les caractères de la dernière ligne du texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char c;
            char temps[16];
    	for(int i=1;i<=16;i++)
            {
                     myFile.seekg(-i,std::ios::end);
                     myFile.get(c);
                     temps[i]=c;
            };
    De 17 à 20, je cherche dans la série si la dernière ligne du texte est présente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int secondes;
    	secondes = calcul_ctime(temps); // fonction de conversion de temps en secondes
    	int indice;
            indice = getIndex(serie1, secondes); // fonction de recherche de l'indice de serie1 = secondes (renvoie 0 si aucun indice trouvé)
    Et après ça, j'écris dans le texte (soit à la suite, soit depuis le début)

    Mango1

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 551
    Points
    10 551
    Par défaut
    Citation Envoyé par mango1 Voir le message
    Le but est de venir greffer une série à la suite du fichier texte. Si une partie de la série est déjà dans le fichier texte alors ça ne sert à rien de tout réécrire et il faut juste écrire la suite de la série dans le texte. Si le fichier texte ne contient en revanche aucune partie de la série alors il faut tout écrire. Si le fichier texte n'existe pas alors il faut le créer et écrire toute la série dedans. Voilà l'idée
    Ouais toujours pas clair
    • Tu as 1 série, mais elle se trouve au milieu du fichier, est-ce possible ?
    • Tu as 1 série, mais certaines valeurs sont dans le fichier, d'autre pas, est-ce possible ?
    • Tu as 1 série et ton fichier, sont-ils toujours triés ?



    Citation Envoyé par mango1 Voir le message
    Pour placer le flux à la fin du fichier, j'utilise la commande std::streampos size = myFile.tellg() ; c'est une commande que j'ai trouvé sur un autre forum (j'ai quelques doutes dessus honnêtement)
    La documentation en anglais de std::istream avec tellg()


    Citation Envoyé par mango1 Voir le message
    De la ligne 8 à 15, je lis les caractères de la dernière ligne du texte :
    Déjà que tu repositionnes le curseur à la fin à chaque tour de boucle, mais mon dieu utilise std::istream::getline

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Architecte systèmes
    Inscrit en
    Mai 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    Re,

    Tu as 1 série, mais elle se trouve au milieu du fichier, est-ce possible ?
    La série démarre de l'instant présent jusqu'à un temps passé indéfini
    Donc la série aura toujours un temps d'avance sur le fichier texte

    le fichier texte est la collecte des datas alors que la série est l'ensemble des datas en temps réel

    Tu as 1 série, mais certaines valeurs sont dans le fichier, d'autre pas, est-ce possible ?
    Oui tout à fait possible ; on peut avoir collecter une partie des datas mais certaines manquent

    Tu as 1 série et ton fichier, sont-ils toujours triés ?
    la série est un vecteur contenant des secondes
    le fichier texte affiche date + heure:minute au lieu de mettre les secondes (c'est plus facile à lire )

    Déjà que tu repositionnes le curseur à la fin à chaque tour de boucle, mais mon dieu utilise std::istream::getline
    Bien vu merci

    est-ce que fstream permet de faire lecture/écriture? De ce que j'ai compris istream est pour la lecture seule non?

  6. #6
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 562
    Points : 7 628
    Points
    7 628
    Par défaut
    Bonjour,

    L'énoncé demande de lire la dernière ligne. Le seul moyen est de lire toutes les lignes.
    Pour distinguer un fichier existant d'un fichier inexistant. Tu peux essayer de l'ouvrir en lecture pour distinguer les 2 cas. Mais comme ici tu finiras par le créer si nécessaire, le plus simple est :
    - ouvrir le fichier en lecture/écriture-sans-altérer-le-début/création-si-n-existe-pas (le mode std::ios::app)
    - lire toutes les lignes
    - si rien n'a pu être lu => le fichier était vide ou n'existait pas, l'index de départ est 0
    - si des lignes ont pues être lues => analyser la dernière ligne lue, en déduire l'index de départ.
    - à cet instant, le bit eof est monté, il faut peut-être effacer les erreurs avant de continuer.
    - il ne reste plus qu'à ajouter les lignes dans le fichier.
    - fermer le fichier.

    std::ios::ate n'est pas adapté ici, il permet de se positionner à la fin, mais on veut lire le début, et il ne créera pas un fichier vide si necessaire.
    tellg et seekg sont quasi-utilisables pour un fichier texte . Ça peut marcher en Linux car il n'y a pas de gestion de fichier texte en Linux, mais le code serait alors totalement non portable ailleurs. C'est ce que tu cherches à faire (partir de la fin et reculer.) mais seekg ne peut être utilisé en déplacement relatif dans un fichier texte.
    si if ( myFile ) réussit c'est que le fichier est ouvert et utilisable, mais le else correspond alors au cas où le fichier est en erreur donc on ne peut rien lire ni n'écrire.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Architecte systèmes
    Inscrit en
    Mai 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    Ça peut marcher en Linux car il n'y a pas de gestion de fichier texte en Linux, mais le code serait alors totalement non portable ailleurs. C'est ce que tu cherches à faire (partir de la fin et reculer.) mais seekg ne peut être utilisé en déplacement relatif dans un fichier texte.
    ah mince ça casse un peu mon délire ; je pensais que je gagnais en temps d'exécution avec ça. Du coup obligé de lire depuis le début ligne par ligne?
    Le code est compilé en .dll après

    si if ( myFile ) réussit c'est que le fichier est ouvert et utilisable, mais le else correspond alors au cas où le fichier est en erreur donc on ne peut rien lire ni n'écrire.
    Donc il faut que j'ajoute après le else un ofstream?

  8. #8
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 562
    Points : 7 628
    Points
    7 628
    Par défaut
    Citation Envoyé par mango1 Voir le message
    ah mince ça casse un peu mon délire ; je pensais que je gagnais en temps d'exécution avec ça. Du coup obligé de lire depuis le début ligne par ligne?
    Le code est compilé en .dll après
    Ta technique peut marcher sous Linux, si tu connais la longueur de la ligne (et si tu sais si la dernière ligne est terminée ou pas par un retour chariot). Mais si ton fichier ne fait pas des gigaoctets, le lire entièrement ne sera pas très long et devrait être plus simple. Tu lis les lignes et quand tu as eu un eof tu n'as qu'à te demander y a-t-il eu une dernière ligne?
    Citation Envoyé par mango1 Voir le message
    Donc il faut que j'ajoute après le else un ofstream?
    Oui, si tu veux gérer à part le cas du fichier vide, mais je proposais des gérer les 2 cas dans le if le fichier a pu être ouvert en lecture+écriture.

    Et pour un fichier en lecture+écriture c'est bien std::fstream.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Architecte systèmes
    Inscrit en
    Mai 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    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
    29
    using namespace std;
     
    	fstream myFile("C:/Users/personne/Documents/essai.txt", std::ios_base::app);
     
    	std::string ligne; // variable contenant chaque ligne lue 
    	char temps;
     
        // cette boucle s'arrête dès qu'une erreur de lecture survient 
    	while (std::getline(fichier, ligne))
    	{
    		temps = ligne;
    	}
     
    	int secondes;
    	secondes = calcul_ctime(temps); // fonction de conversion de temps en secondes (si size de temps égale 0, renvoie 0)
    	int indice;
    	indice = getIndex(serie1, secondes); // fonction de recherche de l'indice de serie1 = secondes (renvoie -1 si aucun indice trouvé)
     
    	for (int i = indice+1; i < fin; i++)
    	{
    		struct temps_serie1
    			temps_serie1 = conv_sec_to_temps(serie1(i)); // fonction de conversion des secondes de serie1 en temps (jours + mois + année + heures + secondes)
    		myFile << temps_serie1.lesjours << "/" << temps_serie1.lesmois << "/" << temps_serie1.annee << " " << temps_serie1.lesheures << ":" << temps_serie1.lesminutes
    	};
     
    	myFile.clear();                 // clear fail and eof bits
    	myFile.seekg(0, std::ios::beg); // back to the start!
     
    	myFile.close();
    Qu'est-ce que vous en pensez maintenant?

  10. #10
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 562
    Points : 7 628
    Points
    7 628
    Par défaut
    A part vouloir copier une chaine dans un char qui n'a pas vraiment de sens.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 551
    Points
    10 551
    Par défaut
    Citation Envoyé par mango1 Voir le message
    Qu'est-ce que vous en pensez maintenant?

    • ligne 6, la variable temps ne sert à rien
    • ligne 11, effectivement comme le dit @dalfab ne sert à rien
    • ligne 14 à ligne 17, peut-être remplacé par 1 truc du style int indice = getIndex(serie1, calcul_ctime( ligne.c_str() ));
    • ligne 21, sortir la définition de la variable temps_serie de ta boucle (même si le compilateur doit le faire) et cela compile de donner le même nom pour ta variable que le nom de la structure
    • ligne 23, il ne manque pas std::endl
    • ligne 26 - 27, je ne pense pas que ce soit pertinent parce que tu fermes ton fichier juste après
    • Et accessoirement ligne 1, à utiliser avec parcimonie (pas dans 1 fichier entête .h par exemple)

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Architecte systèmes
    Inscrit en
    Mai 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    Merci pour vos commentaires c'est top

  13. #13
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Salut,
    Citation Envoyé par dalfab Voir le message
    Oui, si tu veux gérer à part le cas du fichier vide, mais je proposais des gérer les 2 cas dans le if le fichier a pu être ouvert en lecture+écriture.
    Et encore, si l'idée est, de toutes manières, de récupérer le fichier, pourquoi ne "tout simplement" pas travailler en deux temps:

    1- récupérer le contenu du fichier (ouvert en lecture) et compter le nombre de ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    std::ifstream ifs("fichier.txt");  // le fichier, ouverts en lecture
    std::vector<std::string> lines; // toutes les lignes qui seront lues
    std::string temp; // une chaine de caractères permettant d'extraire les lignes
    if(ifs){   // si on a pu ouvrir le fichier
        while(std::getline(ifs, temp)){    // tant qu'il est possible d'extraire une ligne depuis le fichier
            lines.push_back(temp); // on l'ajoute à la "liste de lignes"
        }
    }
    auto linesRead = lines.size(); // la variable linesRead correspond au nombre de lignes qui ont été ajoutée
                                   // (et donc, au nombre de lignes du fichier)
    2- Comme on récupéré toutes les lignes du fichier, on peut sans problème "briser le marbre" et tout réécrire, ce qui nous évite de faire une distinction entre le fichier vide et les autres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    std::ofstream ofs{"fichier.txt"};
    if(! ofs){ // si on n'a pas pu ouvrir le fichier en écriture, c'est qu'il y a un problème
        // on ne sait pas aller plus loin
        throw std::runtime_error("unable to open the file");
    }
    /* si on arrive ici, on peut réécrire toutes les lignes
     * (sans oublier de rajouter le retour à la ligne, qui a disparu lors de la lecture)
     */
    for(auto const & it : lines){ // pour tout ce que l'on trouve dans la liste de lignes
        ofs<<it<<"\n"; // on le rajoute dans le fichier
    }
    /* on n'oublie pas de rajouter l'information  si besoin */
    C'est simple et c'est efficace

    nota: dans l'idéal, tu créeras les deux flux (ifs et ofs) dans des fonctions séparées, de manière à ce qu'ils soient automatiquement fermés lorsque les fonctions équivalentes arriveront à leur terme
    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

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Architecte systèmes
    Inscrit en
    Mai 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2017
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    Merci pour ton commentaire koala01
    au final j'ai fait deux programmes indépendants : un pour la lecture et un autre pour l'écriture. Et ça marche!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/08/2006, 18h40
  2. effacer les données d'un fichier texte
    Par Shyboy dans le forum Langage
    Réponses: 7
    Dernier message: 28/06/2006, 14h23
  3. Pour extraire les données d'un fichier texte
    Par Floch dans le forum Access
    Réponses: 2
    Dernier message: 02/05/2006, 16h01
  4. [VB 6.3] Traiter les données d'un fichier
    Par yaya54 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 21/02/2006, 15h00
  5. [JTable] Comment récuperer les données d'un fichier texte ?
    Par Makunouchi dans le forum Composants
    Réponses: 2
    Dernier message: 03/05/2005, 17h37

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