Problème d'écriture en boucle donnant des fichiers vides

Asmodeean Messages postés 1 Date d'inscription mardi 23 mars 2010 Statut Membre Dernière intervention 31 mars 2010 - 31 mars 2010 à 15:50
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 - 31 mars 2010 à 17:28
Bonjour à vous tous,

Je suis actuellement en train de programmer un logiciel pour du transfert de rayonnement et je butte sur pas mal de problèmes.
Le plus embêtant pour l'heure est celui ci:

Je cherche à imprimer trois colonnes de données dans un fichier .dat que je lirai ensuite dans GNUplot pour faire un graphe 3D. Mon prgramme étant long et lourd, je veux écrire ces colonnes dans un fichier .dat, les lire avec GNUplot, sauvegarder l'image sur le répertoire actuel, fermer le fichier et l'écraser avec la prochaine itération de boucle. Comme ça je ne sauvegarde que les images, ce qui est le plus important pour moi.

Or, après avoir tout programmé, je lance la machine mais seul le fichier .dat est créé, il n'est pas remplit. Ce qui est incompréhensible pour moi, car cela marche avec deux autres fichiers en écriture simultannées.

Pourriez vous m'aider ?
Je poste ici le code concernant la aprtie:




// Creating a data file used with GNUplot to draw graphs

ofstream objetfichier;
objetfichier.open("plot.dat", ios::trunc);
if (objetfichier.bad())
return 1;



// loop for the imaging axis

for (int x; x<=Data[28]; x++)
{
for (int y; y<=Data[29]; y++)
{
// loop for the spectroscopic channels

for (l; l<Data[26]; l++)

{

I[l][x][y] = Col[i].Row[j].I[l][x][y];

Q[l][x][y] = Col[i].Row[j].Q[l][x][y];

U[l][x][y] = Col[i].Row[j].U[l][x][y];

V[l][x][y] = Col[i].Row[j].V[l][x][y];


// compute the polarization p

if (I[l][x][y]!=0)

{

p = sqrt(Q[l][x][y]*Q[l][x][y]+U[l][x][y]*U[l][x][y]+V[l][x][y]*V[l][x][y])/I[l][x][y];

}

else

{

p = 0;

}



// compute the polarization position angle

if ((U[l][x][y]==0)&&(Q[l][x][y]==0))

{

theta = 0;

}

else

{

theta = 90/pi*atan2(U[l][x][y],Q[l][x][y]);

}



// compute a normalization constant for the fluxes

N = (Data[0]*(Data[2]+(l+0.5)*Data[4]/Data[26]))/10000;

// print X and Y value
out_stream << -(Data[30]/2)+x*(Data[30]/Data[28]) << " ";

res_stream << -(Data[30]/2)+x*(Data[30]/Data[28]) << " ";
out_stream << -(Data[30]/2)+y*(Data[30]/Data[29]) << " ";

res_stream << -(Data[30]/2)+y*(Data[30]/Data[29]) << " ";
objetfichier << -(Data[30]/2)+x*(Data[30]/Data[28]) << " ";
objetfichier << -(Data[30]/2)+y*(Data[30]/Data[29]) << " ";


switch(n)

{



// save combined I-parameter and normalized total flux

case 0:

out_stream << I[l][x][y] << " ";

res_stream << I[l][x][y]/N << " ";
objetfichier << I[l][x][y]/N << " ";

break;



// save combined Q-parameter and polarization

case 1:

out_stream << Q[l][x][y] << " ";

res_stream << p << " ";
objetfichier << p << " ";

break;



// save combined U-parameter and position angle

case 2:

out_stream << U[l][x][y] << " ";

if (theta < -45) theta = theta + 180;

res_stream << theta << " ";
objetfichier << theta << " ";

break;



// save combined V parameter and normalized polarized flux

default:

out_stream << V[l][x][y] << " ";

res_stream << p*I[l][x][y]/N << " ";
objetfichier << p*I[l][x][y]/N << " ";
break;
}

out_stream << "\n";

res_stream << "\n";

}



}

}
objetfichier.close();

out_stream << "\n";

res_stream << "\n";
system("gnuplot graph.gnu");


Ne vous en faites pas pour les calculs ils sont justes.
out_stream et res_stream sont deux autres écritures de fichier qui marchent à merveille.
Le fichier graph.gnu marche aussi très bien.

1 réponse

tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
31 mars 2010 à 17:28
Bonjour,
En ouvrant plot.dat en écriture, ça devrait fonctionner :
objetfichier.open("plot.dat", ios::out | ios::trunc); 

Non ?
0
Rejoignez-nous