drcmomo
Messages postés182Date d'inscriptionlundi 13 mars 2006StatutMembreDernière intervention25 décembre 2009
-
20 juin 2006 à 11:42
snpier wolf
Messages postés216Date d'inscriptionsamedi 11 août 2007StatutMembreDernière intervention30 mai 2011
-
18 août 2008 à 20:48
Bonjour!!
Je fais un traitement sur les fichiers.txt
mes fichiers contiennent des centaines de lignes.Mon problème j'aimerais bien remplacer dans toutes lignes du fichier ,le champ DateHeure(voir l'exemple ci-dessous:
1011090673;06/02/06 04:03:24;4502;SNPI;SNPI1
;DIFFERENCE PROGRAMMATION SUIVI ORIGINE 607;2b;2;Train inattendu sur origine 607 index programmé 58568 index suivi 58569;1;0;2;idem exploitation;2
PAR:
1011090673;06/02/2006 04:03:24;4502;SNPI;SNPI1;
DIFFERENCE PROGRAMMATION SUIVI ORIGINE 607;2b;2;Train inattendu sur origine 607 index programmé 58568 index suivi 58569;1;0;2;idem exploitation;2
en gros j'aimerais rajouté un 20 devant le 06 pour pour chaque ligne.
L'idée je ne sais pas le programmer, mon idée ouvrir le fichier d'origine, lire ligne par ligne le fichier,modifier format DateHeure, ecrire les ligne dans un autre fichier apres la modification jusqu'a la fin.
Merci d'avance
snpier wolf
Messages postés216Date d'inscriptionsamedi 11 août 2007StatutMembreDernière intervention30 mai 2011 18 août 2008 à 20:16
salut en gros,
tu ouvres avec ifstream, tu le lis ligne par ligne avec getline(sdt::ofstream , sdt::tring),
tu cherche le 06 avec un switch dans une boucle for par exemple, tu rajoutes le 20 avant
tu remets la ligne dans un string et quand le fichier est fini tu le réécris.
while(getline(fStr, sTexte) )//boucle sur le numbre de ligne
{
for(int i=0;i<=sTexte.length();i++)//boucle sur le numbre de lettre dans une ligne
{
switch(sTexte[i])//switch sur la lettre
{
case CcTestZero://si la lettre est "0"
if(sTexte[i+1]==CcTestSix)//si la lettre d'après est "6"
{
if(sTexte[i+2]==CcTestSlach)//si la lettre d'après est "/"
sTexte.insert(i-1,"20");//on insert 20 aven le 0
}
break;
}//fin de switch
}//fin de for
sNewTexte+=sTexte;
sNewTexte+="\n";
}// fin de while
fStr.close();//on ferme le fichier du monde leture
}//fin de if(fStr)
Fichier.open("Fichier.txt");//on ouvre le fichier en mode écriture
Fichier<<sNewTexte;//on réécrit le fichier avec les modifs
Fichier.close();/on ferme le fichier
}//fin de main()
snpier wolf
Messages postés216Date d'inscriptionsamedi 11 août 2007StatutMembreDernière intervention30 mai 2011 18 août 2008 à 20:20
ou la mets
Fichier.open("Fichier.txt");//on ouvre le fichier en mode écriture
Fichier<<sNewTexte;//on réécrit le fichier avec les modifs
Fichier.close();/on ferme le fichier
dans l'encapsulation de if(fStr)
dsl
snpier wolf
Messages postés216Date d'inscriptionsamedi 11 août 2007StatutMembreDernière intervention30 mai 2011 18 août 2008 à 20:48
voisi le code corrié est qui fonctionne
code :
<hr />
#include <fstream>
#include
using namespace std;int main()
{
string sTexte, sNewTexte;
ofstream Fichier;
ifstream fStr;
const char CcTestZero='0';
const char CcTestSix='6';
const char CcTestSlach='/';
fStr.open("Fichier.txt", fstream::in);//ouverture du texte
if(fStr)
{
cout<<"open ok\n";
while(getline(fStr, sTexte) )//boucle sur le numbre de ligne
{
for(int i=0;i<=sTexte.length();i++)//boucle sur le numbre de lettre dans une ligne
{
cout<<"lettre "<<sTexte[i]<<endl;
switch(sTexte[i])//switch sur la lettre
{
case CcTestZero://si la lettre est "0"
if(sTexte[i+1]==CcTestSix)//si la lettre d'après est "6"
{
if(sTexte[i+2]==CcTestSlach)//si la lettre d'après est "/"
{ sTexte.insert(i,"20");
i+=2;}//on insert 20 aven le 0
}
break;
}//fin de switch
}//fin de for
sNewTexte+=sTexte;
sNewTexte+="\n";
}// fin de while
fStr.close();//on ferme le fichier du monde leture
Fichier.open("Fichier.txt");//on ouvre le fichier en mode écriture
Fichier<<sNewTexte;//on réécrit le fichier avec les modifs
Fichier.close();//on ferme le fichier
}//fin de if(fStr)