cs_alncool
Messages postés16Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention12 juillet 2005
-
12 mai 2004 à 20:51
cs_alncool
Messages postés16Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention12 juillet 2005
-
12 mai 2004 à 23:46
Voilà les source je j’ai fait :
-Fichier principal-
#include "stdafx.h"
#using <mscorlib.dll>
using namespace System;
int _tmain()
{
// crée un container contenant plusieur objets de type Reference
vector<Reference> listeRef;
// crée un pointeur sur le container
vector<Reference>::iterator iterListeRef;
// ofstream pour l'écriture dans un fichier
ofstream monfichier;
// ifstream pour la lecture dans un fichier
ifstream monfichier2;
Reference a;
Reference b("2134264","abc123","123456789");
Reference c;
// Ouvre data.txt en écriture
monfichier.open("data.txt");
// écriture des deux objets a et c
// résultat dans le fichier :
// Nouvelle facture Nouveau code Nouveau numéro de série
// 2134264 abc123 123456789
monfichier<>c)
//ajout d'un objet dans le container
listeRef.push_back(c);
monfichier2.close();
//parcourt du container pour afficher les résultats
for (iterListeRef=listeRef.begin();iterListeRef<listeRef.end();iterListeRef++){
cout << (*iterListeRef).get_numFacture()<<" "
<< (*iterListeRef).get_code()<<" "
<< (*iterListeRef).get_numSerie()<<endl;
}
return 0;
}
-Fichier Reference.cpp-
#include "StdAfx.h"
#using <mscorlib.dll>
// Constructeur
Reference::Reference()
:code("Nouveau code"), numFacture("Nouvelle facture"), numSerie("Nouveau numéro de série")
{
}
// Constructeur surchargé
Reference::Reference(string numFacture,string code,string numSerie)
:code(code), numFacture(numFacture), numSerie(numSerie)
{
}
// Assesseurs
string Reference::get_code(){
return code;
}
string Reference::get_numFacture(){
return numFacture;
}
string Reference::get_numSerie(){
return numSerie;
}
// Mutateurs
void Reference::set_code(string newCode){
code = newCode;
}
void Reference::set_numFacture(string newNumFacture){
numFacture = newNumFacture;
}
void Reference::set_numSerie(string newNumSerie){
numSerie = newNumSerie;
}
// surcharge de l’opérateur >> pour récupérer des infos(attributs des objets de type Reference) d’un fichier
ifstream &operator>> (ifstream &fichierEntree, Reference &objetDestination){
fichierEntree>>objetDestination.numFacture;
fichierEntree>>objetDestination.code;
fichierEntree>>objetDestination.numSerie;
return fichierEntree;
}
// surcharge de l’operateur << pour écrire des infos(attributs des objets de type Reference) dans un fichier
ofstream &operator<< (ofstream &fichierSortie, Reference &objetSource){
fichierSortie<<objetSource.numFacture<<"\t";
fichierSortie<<objetSource.code<<"\t";
fichierSortie<<objetSource.numSerie<<"\n";
return fichierSortie;
}
Explication du problème :
Tout fonctionne bien mis a part un détail : dans le main j’écris les infos des deux objets a et c dans le fichier data.txt – les infos sont bien inscrites avec une petite mise en page c’est a dire une tabulation entre les différents string sauf la dernière de l’objet qui fait un retour chariot pour indiquer les infos du prochain objet – mais lorsque je veux faire la même chose mais inversé, c’est à dire qu’à partir du fichier je désire reconstituer mes objets (dans un container) mes chaînes de caractère sont mal reconstituées. Au lieu d’avoir un objet avec les trois attribut "Nouvelle facture""Nouveau code""Nouveau numéro de série" j’obtient "Nouvelle""facture""Nouveau" puis un autre objet "code""Nouveau""numéro" etc… Autrement dit, au lieu de considérer les tabulations et les retours chariots comme délimitant les longueurs des chaînes, les chaînes de caractère sont délimités par les espaces.
Que dois-je faire pour pouvoir acquérir correctement mes chaînes de caractère ?
Je développe sur visual studio .net (C++) avec application en mode console.
Merci d’avance pour votre aide.
PS : désolé de remettre la même question que dans la section fichier mais je me suis mal fait comprendre alors j’ai bien détaillé et aussi parce que la ca devient urgent :)
Règle du bon codeur:
1) faire compliquer quand on peut faire simple
2) taper sur son PC quand ça ne marche pas
3) profiter de ses erreurs pour les recopiers dans un autre programme
4) je crois qu'avec tout ça t'arriveras un jour à faire quelque chose.
cs_alncool
Messages postés16Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention12 juillet 2005 12 mai 2004 à 20:54
je vous conseil de faire du copier coller de mes sources dans un editeur pour avoir quelque chose de plus lisible par ce que la c pas top...
Règle du bon codeur:
1) faire compliquer quand on peut faire simple
2) taper sur son PC quand ça ne marche pas
3) profiter de ses erreurs pour les recopiers dans un autre programme
4) je crois qu'avec tout ça t'arriveras un jour à faire quelque chose.
cs_alncool
Messages postés16Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention12 juillet 2005 12 mai 2004 à 23:39
oki merci vais essayer...
Règle du bon codeur:
1) faire compliquer quand on peut faire simple
2) taper sur son PC quand ça ne marche pas
3) profiter de ses erreurs pour les recopiers dans un autre programme
4) je crois qu'avec tout ça t'arriveras un jour à faire quelque chose.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_alncool
Messages postés16Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention12 juillet 2005 12 mai 2004 à 23:46
Pwah niquel ca marche du tonnere de Dieu... Enfin je voulais dire 'Merci ca fonctionne' :big)
Règle du bon codeur:
1) faire compliquer quand on peut faire simple
2) taper sur son PC quand ça ne marche pas
3) profiter de ses erreurs pour les recopiers dans un autre programme
4) je crois qu'avec tout ça t'arriveras un jour à faire quelque chose.