Écrire après un mot précis dans un fichier texte

Contenu du snippet

Ce morceau de code permet d'écrire à un endroit précis dans un fichier texte.
Par exemple, si j'ai le fichier texte date.txt suivant :

JOUR 13
MOIS 06
ANNEE 2004

et que je veux changer le mois par exemple, alors j'appelle la fonction ajout :
ajout("07","date.txt","MOIS")

et je récupère dans date.txt :

JOUR 13
MOIS 07
ANNEE 2004

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>
#include <windows.h>
using namespace std; 

int nombre_lignes(int indice,LPCTSTR f){//retourne le nombre de lignes avant le mot recherche
	ifstream fic(f);
	if(!fic){
	          cerr<<"le fichier ne peut pas etre ouvert."<<endl;
	          exit(EXIT_FAILURE);
	           }
	char ch;
	unsigned int nb_char =0;
	string texte;
	int nb_lignes_debut=0;
	while(fic.get(ch)&& nb_char <=indice){
		texte +=ch;nb_char++;
		if(ch=='\n'){++nb_lignes_debut;}
		}
	return(nb_lignes_debut);
	}

int chercher(LPCTSTR f,string expr){//retourne l'endroit où on va ecrire dans le fichier
	ifstream fic(f);
	if(!fic){
		cerr<<"le fichier ne peut pas etre ouvert."<<endl;
		exit(EXIT_FAILURE);
		}
	char ch;
	string texte;
	int nb_lignes=1;//, nb de lignes du fichier, =1 a cause du eof
	while(fic.get(ch)){
		texte +=ch;
		if(ch=='\n'){++nb_lignes;}
		}
	int indice;
	indice=texte.find(expr);
	char *debut=new char(indice+1);
	fic.read(debut,indice);
	int nb_lignes_debut=nombre_lignes(indice,f);
	return (indice+nb_lignes_debut+expr.length()+1);
	}

void ajout(string s,LPCTSTR f,string expr){//ecrit dans le fichier a l'emplacement desire
	fstream fic(f,ios::in|ios::out);
	if(!fic){
		cerr<<"le fichier ne peut pas etre ouvert."<<endl;
		exit(EXIT_FAILURE);
		}
	int i;
	i=chercher(f,expr);
	fic.flush();
	fic.seekg(i,ios::beg);
	fic<<s;
	fic.flush();
	fic.close();
	}

Conclusion :


L'intérêt de cette fonction apparemment très simple est qu'il n'est pas évident de penser à compter les lignes avant celle où l'on veut écrire. Mais si on ne le fait pas, comme le saut de ligne compte pour 2 caractères, ce qu'on veut ecrire s'écrit trop tôt !

N'hésitez pas à me donner votre avis...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.