pb while opening and reading two txt files consecutively

Bonsoir,
j'ai un programme qui sert à ouvrir deux fichiers textes et les lire.Il va remplir le contenu du premier fichier dans un vecteur de 2 dimensions, et fait quelques traitement avec le contenu du deuxième fichier.lorsque je lance le programme pour qu'il fait la lecture des deux fichiers avec le remplissage du premier tableau avec le premier fichier, il se bloque quand il est en train d'ouvrir le deuxième fichier, et il cesse de fonctionner. En annulant l'une des deux lecture, il marche bien, voilà mon code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
strstream ss;    
 ss << "codde" << region << ".txt";    
 std::string filess = ss.str();    
 ifstream fichierss(filess,ios::in); // ouverture du fichier  
 int nbrligne=0;  
 std::string contenu; 
// std::string contenu;  
if(fichierss)  // si l'ouverture a fonctionné    
{     
 // déclaration d'une chaîne qui contiendra la ligne lue    
 while(getline(fichierss, contenu))  // tant que l'on peut mettre la ligne dans "contenu"    
   {    
     // on met dans "contenu" la ligne    
nbrligne++;  
 }    
fichierss.close(); // fermeture du fichier  
 
}  
 
int  nbrcor;   
nbrcor=nbrligne;  
int dim_allouee = 0; // nombre d'éléments alloués avec succès sur la dimension 2    
double** sommet=0;    
sommet=new double * [nbrcor];    
//std::fill_n( sommet, nbrcor, static_cast<double*>( 0 ) );    
for ( dim_allouee = 0; dim_allouee < nbrcor; ++dim_allouee)    
 {    
 sommet[ dim_allouee ] = new double[ 3 ];    
  }    
ifstream fichiersopen(filess,ios::in); // ouverture du fichier  
int w=0;  
for(w=0;w<nbrcor;w++)  
{  
while( getline(fichiersopen, contenu))  
{  
int x=0;  
istringstream t(contenu);    
string mot;    
while ( std::getline( t, mot, ' ' ) )    
  {    double z;
z=10 *lexical_cast<double>(mot);
      sommet[w][x] =z;// ::atof(mot.c_str());    
 x=x+1;  
   } 
double* so=sommet[w];
/************ traitement à faire *********/
int nbp=polydata->GetNumberOfPoints();
int nbp1=nbp+1;
polydata->GetPoints()->InsertPoint(nbp1,so);
//polydata->GetPoints()->InsertNextPoint(so);
polydata->GetPoints()->Modified();
polydata->Modified();
polydata->Update();
cout<<"les sommets  sont: "<<sommet[w][0]<<" "<<sommet[w][1]<<" "<<sommet[w][2]<<"\n "<<endl;
/**********************************************/
}  
}  
 fichiersopen.close();// fermeture du fichier 
/************** pour le deuxièmes fichier  ****************/
strstream sface; 
 
 sface << "face" << region << ".txt";  
 
 std::string face = sface.str();   
 
 ifstream fichierface(face,ios::in); // ouverture du fichier  
 
 int nbrligneface=0; 
 
 std::string contenuface; 
 while(getline(fichierface, contenuface))    
   {    
 
 istringstream t(contenuface); 
 string mot;    
while ( std::getline( t, face, ' ' ) )   
  {  
	  int z;
istringstream ( face )>>z;
int zz=z+nbpp;
 points->InsertNextId(zz); 
   } 
int cell=polydata->GetPolys()->GetNumberOfCells();
polydata->GetPolys()->InsertNextCell(points);
polydata->BuildCells();
polydata->BuildLinks();
polydata->GetPolys()->Modified();
int cells=cell+1;
polydata->GetPolys()->UpdateCellCount(cells);      
nbrligneface++;  
 }    
fichierface.close(); // fermeture du fichier 


Merci pour toute aide
Last edited on
i would like helping to solve your problem oO
$ gdb a.out
> run
kaputt
> bt
Good morning,
Oh my god, sorry, i posted in the french language, sorry :)
Okay,I have a program that is used to open two text files and read them.it will fill the contents of the first file in a 2-dimensional vector, and did some processing with the contents of the second file.when I run the program that it reads two files with the filling of the first table with the first file, it crashes when trying to open the second file, and stops working.by canceling one of the two readings, it works well, this is my code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
strstream ss;    
 ss << "codde" << region << ".txt";    // the file which will be opened
 std::string filess = ss.str();    
 ifstream fichierss(filess,ios::in); // open the file 
 int nbrligne=0;  
 std::string contenu; 
// std::string contenu;  
if(fichierss)  // if file is opened   
{     
 // contenu: contains the first line    
 while(getline(fichierss, contenu))   
   {      
nbrligne++;  // count the number of lines in the file
 }    
fichierss.close(); // close the file
 
}  
 
int  nbrcor;   
nbrcor=nbrligne;  
int dim_allouee = 0;     
double** sommet=0;// i will fill this 2D vector by the first file    
sommet=new double * [nbrcor];    
//std::fill_n( sommet, nbrcor, static_cast<double*>( 0 ) );    
for ( dim_allouee = 0; dim_allouee < nbrcor; ++dim_allouee)    
 {    
 sommet[ dim_allouee ] = new double[ 3 ];    
  }    
ifstream fichiersopen(filess,ios::in); open the file  
int w=0;  
for(w=0;w<nbrcor;w++)  
{  
while( getline(fichiersopen, contenu))  
{  
int x=0;  
istringstream t(contenu);    
string mot;    
while ( std::getline( t, mot, ' ' ) )    
  {    double z;
z=10 *lexical_cast<double>(mot);
      sommet[w][x] =z;   
 x=x+1;  
   } 
double* so=sommet[w];
/************ treatement to do with the contents of the vector "sommet" *********/
int nbp=polydata->GetNumberOfPoints();
int nbp1=nbp+1;
polydata->GetPoints()->InsertPoint(nbp1,so);
//polydata->GetPoints()->InsertNextPoint(so);
polydata->GetPoints()->Modified();
polydata->Modified();
polydata->Update();
cout<<"les sommets  sont: "<<sommet[w][0]<<" "<<sommet[w][1]<<" "<<sommet[w][2]<<"\n "<<endl;
/**********************************************/
}  
}  
 fichiersopen.close();// close the file
/************** for the second file  ****************/
strstream sface; 
 
 sface << "face" << region << ".txt";  
 
 std::string face = sface.str();   
 
 ifstream fichierface(face,ios::in); // open the file: here it's crashed
 
 int nbrligneface=0; 
 
 std::string contenuface; 
 while(getline(fichierface, contenuface))    
   {    
 
 istringstream t(contenuface); 
 string mot;    
while ( std::getline( t, face, ' ' ) )   
  {  
	  int z;
istringstream ( face )>>z;
int zz=z+nbpp;
 points->InsertNextId(zz); 
   } 
int cell=polydata->GetPolys()->GetNumberOfCells();
polydata->GetPolys()->InsertNextCell(points);
polydata->BuildCells();
polydata->BuildLinks();
polydata->GetPolys()->Modified();
int cells=cell+1;
polydata->GetPolys()->UpdateCellCount(cells);      
nbrligneface++;  
 }    
fichierface.close(); // close the file  
No problem, ¿what did the debugger say?
I'm not used to the syntax if(fichierss) to check if an ifstream is open. Is it legal? I would assume such code always return true or an undefined value. Could you try using is_open() instead?
And for fichiersopen and fichierface, you are not even checking if they are open
when i replace the code for the second file by:
1
2
3
4
5
6
if(fichierface.is_open())  // si l'ouverture a fonctionné    
{ cout<<"yess"<<endl;
}
else{
cout<<"erreur"<<endl;
}

it runs the code the first file, and return the message error for the second one
Then that means it could'n open the filepath you specified (we can talk in french in PMs if you need)
Topic archived. No new replies allowed.