Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

ecrire dans un fichier texte c++

  1. #1
    docEmmettBrown

    ecrire dans un fichier texte c++

    bonjour,

    voila j'aimerais écrire dans un fichier mais au debut via seekp(0). Le probleme est quand j'utilise cette méthode, ca écrit par dessus mon texte alors que j'aimerais juste écrire au début sans effacer la suite.

    Avez vous une méthode ?

    voici mon code:

    Code:
    int main() {
        ofstream fichier("text.txt", ios::ate);
    
        fichier.seekp(0);
        for (i=0; i < 10 ; ++i) {
            fichier << "valeur de i : "+ toString(i) << endl; //fonction toString convertie int en string
        }
    }
    merci d'avance pour votre aide

    -----


  2. Publicité
  3. #2
    Ikhar84

    Re : ecrire dans un fichier texte c++

    A ma connaissance, on ne peut pas ecrire au début d'un fichier tout en en conservant le contenu...

    Ou on remplace le contenu, ou on "ajoute" à la fin...

    Sinon il faut utiliser des astuces, si le fichier n'est pas trop gros, on peut en garder le contenu en mémoire, écrire les nouvelles données en ecrasant les anciennes, puis écrire les données "sauvegardées" en mémoire à la fin du fichier...
    Si le fichier est trop gros, on peut utiliser un fichier temporaire pour stocker le contenu de notre fichier au lieu de le garder en RAM (dans une variable).
    J'ai glissé Chef !

  4. #3
    pm42

    Re : ecrire dans un fichier texte c++

    En effet.Si on veut avoir des données avec un ordre et une possibilité d'insérer un peu n'importe où, le fichier texte n'est pas adapté.

  5. #4
    docEmmettBrown

    Re : ecrire dans un fichier texte c++

    aie.

    j'ai une seconde méthode mais je bloque à un endroit.

    je veux pouvoir lire une donnée sur un numéro de ligne bien précis. par exemple je veux pouvoir lire la donnée de la ligne 5, mais je bloque sur l'algo
    j'arrive a connaitre le nombre de ligne max via le code suivant :
    Code:
     std::ifstream file( "fichier.txt" );  
        if ( file ) 
        { 
            int lines = 0;  
            while ( file.ignore( std::numeric_limits<int>::max(), '\n' ) )  
            {  
                ++lines;  
            }  
        }
    mais je ne sais pas comment lire une donné sur la ligne 5. Est ce possible ?
    Il faudrait pouvoir placer le curseur à la ligne 5 via :
    Code:
    file.seekg(ligne5);
    getline(file, dataRead); //on récupere la donnée de la ligne 5
    Dernière modification par docEmmettBrown ; 20/02/2018 à 15h06.

  6. #5
    jacknicklaus

    Re : ecrire dans un fichier texte c++

    Tu peux, dans ta boucle de lecture initiale, mémoriser dans un tableau les positions des débuts de ligne avec appel à tellg()
    Mais j'ai comme l'impression que tu cherches à construire une base de données avec des méthodes d'accès direct, basée sur du fichier texte. ce n'est pas du tout adapté !

    Tu devrais soit reconsidérer la solution, soit voir si tu peux travailler entièrement en mémoire, soit te tourner vers un solution SGBD tout faite. Il n'est pas difficile d'interfacer du C++ avec une base SQL.
    There are more things in heaven and earth, Horatio, Than are dreamt of in your philosophy.

  7. #6
    docEmmettBrown

    Re : ecrire dans un fichier texte c++

    Oui, je récupere des valeurs envoyées de mon client à mon serveur et je stock ces données sur un fichier texte.

    mais j'ai des problemes lorsque j'écris avec le serveur et en meme temps je lie avec un autre programme

    C'est quoi sgbd ?

    je précise que je ne peux pas utiliser internet
    Dernière modification par docEmmettBrown ; 21/02/2018 à 13h21.

  8. #7
    Ikhar84

    Re : ecrire dans un fichier texte c++

    SGBD: Système de Gestion de Base de Données. On parle en général de SGBDR (R pour relationnel), donc "lier" d'une certaine façon les données... c'est ce que l'on appelle vulgairement une base de données (si on distingue pas les données du serveur...).

    En effet, si tu souhaites travailler avec des données volumineuses ou avec un accès (disons) direct, tu es mal parti...

    Pour les données en mode texte (si on veut) il y a deux "techniques" principales: les fichiers CSV, où les données d'une ligne sont séparées par un caractère spécial (virgule ou point-virgule en général, voir par des espaces ou tabulation), et les fichier XML, plus accessibles en mode non séquentiel (tu récupères directement les données que tu recherches), pour travailler avec XML, il faut un parser (disons un analyseur de XML), que tu peux ajouter à ton projet sous forme de header ou de bibliothèque.

    Pour une veritable gestion des données, surtout si elles sont liées entres elles, il faut une base de données.
    Pour cela, ton programme peut communiquer avec un SGBDR, en mode client/serveur ou embarquer une forme de serveur (serveur embarqué ou mode fichier selon les fournisseur de SGBDR).
    Pour un mode client/serveur, si tu es sous Windows, il y a un grand choix de solution gratuites ou libres.
    Pour le mode embarqué, je préfère personnellement firebird SQLite, mais c'est plus une question d'habitude.

    Avant tout, il faut nous présenter ton modèle de données, pour voir si elle nécessite la grosse artillerie, ou si un fichier binaire ou texte est suffisant, XML est un bon moyen par exemple, et nous en dire plus sur ton projet...

    Si il faut réellement un serveur de données, il faudra se mettre à SQL, et connaitre un minimum de base sur la gestion des données (voir sur l'administration d'un serveur).

    Edit: je viens de voir que tu avais des problèmes de lecture/écriture simultané ce qui est normal. Il faut s'assurer que deux programmes différents ne soient pas au même moment l'un en train d'écrire, l'autre en train de lire, le même fichier...
    C'est un problème de base d'accés aux ressources. Au minimum, les données lues sont obsolètes car déjé modifiées, au pire, il y a interblocage des processus !
    Dernière modification par Ikhar84 ; 21/02/2018 à 21h42.
    J'ai glissé Chef !

  9. #8
    pm42

    Re : ecrire dans un fichier texte c++

    J'ajouterais que pour quelqu'un qui veut programmer, le réflexe devrait être de chercher "sgbd" sur le Net et de lire la page Wikipedia au moins plutôt que d'attendre une réponse toute faite qui va venir quelques heures plus tard.

    Il est très difficile de devenir un programmeur efficace si on ne se force pas à chercher soi même des solutions, des outils et qu'on n'est pas dans une logique de curiosité affutée.

  10. #9
    Ikhar84

    Re : ecrire dans un fichier texte c++

    Je suis tout à fait d'accord.

    De plus, si les bases sont acquises par le biais de cours magistraux, ou de grosses recherches personnelles, les compétences pratiques ne peuvent être acquises qu'en programmant encore et encore. Il faut faire de gros efforts de recherche personnelles et tenter de reproduire les exemples (snipet) encore et encore.

    J'ajouterais que quasiment tout ce que l'on souhaite réaliser a déjà été fait, par des personnes certainement bien plus compétente que nous et mises à disposition, au moins sous une forme parcellaire...

    Pour cela, des cours et exercices d'algorythmique dont disponibles à foison sur le net.

    Enfin, avant de choisir une solution ou une techno particulière, il est judicieux de chercher à connaître l'etat de l'art, ne serait ce que pour faire un choix en toute connaissance de cause...
    J'ai glissé Chef !

  11. #10
    Jack

    Re : ecrire dans un fichier texte c++

    Citation Envoyé par docEmmettBrown Voir le message
    je précise que je ne peux pas utiliser internet
    Comment fais-tu pour poster tes messages dans ce forum dans ce cas?

Discussions similaires

  1. [c++] lecture dans un fichier texte
    Par ahmedcssforever dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 05/03/2013, 14h32
  2. Écrire dans un fichier à partir de données d'un tableau
    Par dalfred dans le forum Programmation et langages, Algorithmique
    Réponses: 15
    Dernier message: 17/11/2012, 14h36
  3. Écrire un fichier avec un .h, en ouvrant le fichier dans main
    Par AmigaOS dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 30/01/2011, 19h30
  4. Maple, écrire dans un fichier
    Par Iggypops dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 20/12/2009, 19h30
  5. [c++] lecture dans un fichier texte
    Par bob la truite dans le forum Logiciel - Software - Open Source
    Réponses: 17
    Dernier message: 24/07/2007, 17h46