OVH Cloud OVH Cloud

ne ecris rien dans fichier resultat ?

3 réponses
Avatar
giovanni
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <sstream>
using namespace std;
int main()
{
ifstream fichier;
int nb_0, nb_1, nb_2, nb_3, nb_4, nb_5, nb_6, nb_7;
//int ok_1, ok_2, ok_3, ok_4, ok_5, ok_6, ok_7, ok_8, ok_9;
char x,y;
ifstream fichier2;
int nb_00, nb_11,nb_22, nb_33,nb_44, nb_55, nb_66, nb_77;
ifstream result;
//result.open ("resultat2.txt", ios :: out | ios :: app);
//result.close ();
ifstream fichier3;
int ok_1, ok_2, ok_3, ok_4, ok_5, ok_6, ok_7, ok_8, ok_9;
ok_1=0;
ofstream outfile("resultat.txt", ios::out);
if(!outfile){
cerr << "errore: file output non puo' venire aperto.\n";
exit(1);
}
fichier.open("text.txt", ios::in);
while (!fichier.eof()) {
fichier >> nb_0 >> nb_1 >> nb_2 >> nb_3>> nb_4 >> nb_5 >> nb_6>>
nb_7 ;
fichier2.open("text2.txt", ios::in);
while(!fichier2.eof()){
fichier2 >> nb_00 >> nb_11 >> nb_22 >> nb_33 >> nb_44 >> nb_55 >> nb_66 >>
nb_77;
printf(" ligne a %d", nb_11);
printf(" %d", nb_22);
printf(" %d", nb_33);
printf(" %d", nb_44);
printf(" %d", nb_55);
printf(" %d", nb_66);
printf(" %d\n", nb_77);
printf(" ligne b %d", nb_1);
printf(" %d", nb_2);
printf(" %d", nb_3);
printf(" %d", nb_4);
printf(" %d", nb_5);
printf(" %d", nb_6);
printf(" %d\n", nb_7);

if (nb_11==nb_1) ok_1=ok_1+1;
if (nb_11==nb_2) ok_1=ok_1+1;
if (nb_11==nb_3) ok_1=ok_1+1;
if (nb_11==nb_4) ok_1=ok_1+1;
if (nb_11==nb_5) ok_1=ok_1+1;
if (nb_22==nb_2) ok_1=ok_1+1;
if (nb_22==nb_3) ok_1=ok_1+1;
if (nb_22==nb_4) ok_1=ok_1+1;
if (nb_22==nb_5) ok_1=ok_1+1;
if (nb_33==nb_3) ok_1=ok_1+1;
if (nb_33==nb_4) ok_1=ok_1+1;
if (nb_44==nb_5) ok_1=ok_1+1;
if (nb_44==nb_4) ok_1=ok_1+1;
if (nb_44==nb_5) ok_1=ok_1+1;
if (nb_55==nb_5) ok_1=ok_1+1;
printf(" ok=%d\n",ok_1);

ok_1=0;
} fichier2.close();
fichier2.clear() ;
const static char filename[]="resultat.txt";
ofstream my(filename);
if (my.bad())
{
cerr << "erreur de fichier "
<< endl ;
return 0;
}
std::ostringstream out;
out << ok_1 << ok_2 << ok_3 << ok_4 << ok_5 << ok_6 << ok_7 << ends;
if (my.bad())
{
cerr << "erreur de ecriture dans fichier "
<< filename
<< endl ;
}
printf(" fin fichier 2 %d\n",ok_1);
printf(" ligne a %d", nb_11);
printf(" %d", nb_22);
printf(" %d", nb_33);
printf(" %d", nb_44);
printf(" %d", nb_55);
printf(" %d",nb_66);
printf(" %d\n", nb_77);
printf(" ligne b %d", nb_1);
printf(" %d",nb_2);
printf(" %d", nb_3);
printf(" %d", nb_4);
printf(" %d", nb_5);
printf(" %d", nb_6);
printf(" %d\n", nb_7);
//system("pause");
}
// chiudere file
fichier.close();
fichier.clear() ;
return(0);
}

3 réponses

Avatar
kanze
giovanni wrote:

[Un tas de code, et rien d'autre...]

Qu'est-ce qu'on est censé faire avec ton code ? S'il s'agit de
la question dans la ligne de sujet, il faut être plus précis. On
voit bien que tu n'écris rien dans le fichier resultat.txt. Et
alors ?

Aussi, il me semble qu'on a déjà vu une partie de ce code, et
indiquait plusieurs problèmes (l'utilisation de istream::eof(),
par exemple). Si tu ne corriges pas les erreurs qu'on indique,
pourquoi est-ce qu'on doit en cherchait d'autres ?

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Avatar
giovanni
oui mais j'ai trouver pourquoi ne marcher pas rester en fin de fichier et en
fesant
fichier2.clear()
ca a marcher...
la je voudrais ecrire dans le fichier resultat les sting ok_1 ok_2 etc.....


a écrit dans le message de news:

giovanni wrote:

[Un tas de code, et rien d'autre...]

Qu'est-ce qu'on est censé faire avec ton code ? S'il s'agit de
la question dans la ligne de sujet, il faut être plus précis. On
voit bien que tu n'écris rien dans le fichier resultat.txt. Et
alors ?

Aussi, il me semble qu'on a déjà vu une partie de ce code, et
indiquait plusieurs problèmes (l'utilisation de istream::eof(),
par exemple). Si tu ne corriges pas les erreurs qu'on indique,
pourquoi est-ce qu'on doit en cherchait d'autres ?

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Avatar
kanze
giovanni wrote:
oui mais j'ai trouver pourquoi ne marcher pas rester en fin de
fichier et en fesant

fichier2.clear()
ca a marcher...
la je voudrais ecrire dans le fichier resultat les sting ok_1 ok_2
etc.....


Est-ce que tu pourrais traduire cette phrase en français, pour
que je puisse le comprendre. (En passant, d'où vient le problème
au juste ? Si c'est simplement que tu n'es pas francophone, je
compatis ; le français est une langue difficile. Mais je
n'arrive réelement pas à comprendre ce que tu essaies à dire.)

De toute façon, ton utilisation de istream::eof() est erronnée,
et ne marche pas dans tous les cas. J'avais expliqué comment il
faut faire.

Quant à écrire quelque chose dans le fichier resultat, pour le
faire, il faut le faire. Dans le code que tu as posté, il n'y
avait pas le moindre sortie vers le fichier -- tu l'ouvres, tu
testes pour bad() (ce qui n'est pas correct non plus, parce que
même si tu n'arrives pas à l'ouvrir, bad() reste faux), deux
fois, d'ailleurs, sans avoir touché au fichier entre les deux.
Et c'est tout. Il n'y a jamais la moindre sortie vers le
fichier, et tu ne le fermes pas non plus (or que c'est après la
fermature qu'il faut surtout tester l'état). En fait, tu ouvres
le fichier avec le nom "resultat.txt" deux fois, tous les deux
en sortie (variables outfile et my), mais tu ne fais rien ni
avec l'un ni avec l'autre.

Enfin, voici une version simplifier de ce que je crois que tu
essaies de faire. Il faudrait que tu régardes attentivement
comment se fait les entrées/sorties, parce que j'ai l'impression
que tu n'as pas encore compris comment fonctionnent les
entrées/sorties en C++. Tu rémarqueras que les appels à eof()
n'ont lieu qu'après la detection qu'une lecture n'a pas eu lieu.
Jamais avant. Tu rémarqueras aussi l'utilisation des << et des
définis par l'utilisateur ; c'est l'idiome consacré. (Tu
rémarqueras aussi que le programme n'est pas un monolithe. C'est


même plus important.)

! #include <istream>
! #include <ostream>
! #include <iostream>
! #include <fstream>
! #include <string>

! struct DataSet
! {
! int nb_0 ;
! int nb_1 ;

! DataSet() : nb_0( 0 ) , nb_1( 0 )
! {
! }
! } ;

! std::istream&
! operator>>( std::istream& source, DataSet& dest )
! {
! DataSet tmp ;
! source >> tmp.nb_0 >> tmp.nb_1 ;
! if ( source ) {
! dest = tmp ;
! }
! return source ;
! }

! std::ostream&
! operator<<( std::ostream& dest, DataSet const& source )
! {
! dest << source.nb_0 << ' ' << source.nb_1 ;
! return dest ;
! }

! template< typename StreamType >
! void
! open( StreamType& file, std::string const& filename )
! {
! file.open( filename.c_str() ) ;
! if ( ! file ) {
! throw filename + " n'a pas pu être ouvert" ;
! }
! }

! void
! countEquals( DataSet& dest, DataSet const& src1, DataSet const&
src2 )
! {
! if ( src1.nb_0 == src2.nb_0 ) {
! ++ dest.nb_0 ;
! }
! if ( src1.nb_1 == src2.nb_1 ) {
! ++ dest.nb_1 ;
! }
! }

! void
! processRecord( DataSet& dest, DataSet const& record )
! {
! std::ifstream fichier ;
! open( fichier, "text2.txt" ) ;
! DataSet data ;
! while ( fichier >> data ) {
! countEquals( dest, record, data ) ;
! }
! if ( ! fichier.eof() ) {
! throw std::string( "error de lecture dans "text2.txt"" )
;
! }
! }

! int
! main()
! {
! try {
! DataSet resultat ;
! std::ifstream fichier ;
! open( fichier, "text.txt" ) ;
! DataSet data ;
! while ( fichier >> data ) {
! processRecord( resultat, data ) ;
! }
! if ( ! fichier.eof() ) {
! throw std::string( "error de lecture dans "text.txt""
) ;
! }
! std::ofstream dest( "resultat.txt" ) ;
! open( dest, "resultat.txt" ) ;
! dest << resultat << 'n' ;
! dest.close() ;
! if ( ! dest ) {
! throw std::string( "Erreur d'écriture dans
"resultat.txt"n" ) ;
! }
! } catch ( std::string const& message ) {
! std::cerr << message << std::endl ;
! return EXIT_FAILURE ;
! }
! return EXIT_SUCCESS ;
! }

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34