Bonjour à tous,
Je me heurte à un problème que je n'arrive pas à résoudre. Voici le contexte : j'utilise Root, un logiciel C/C++ bien connu des physiciens HEP. Je voudrais lire un fichier de données et je souhaite laisser le choix du fichier. Donc je demande à l'utilisateur de taper le nom du fichier au clavier, je récupère la chaîne de caractères, et j'aimerais ensuite l'exploiter afin de lire dans le fichier de données correspondants. Et là, plantage
J'ai tout essayé : avec string *file, string file, char * file etc... Rien à faire.
J'ai vu que si je fais manger à bidule.open() un const char * il accepte. Le truc c'est que la chaîne n'est pas a priori fixée. J'ai donc pensé à passer par une étape intermédiaire, où je transforme ma string en une *char.
Cependant, je ne sais pas comment lire la longueur d'une chaîne. J'ai essayé length(machaîne) et Root me renvoie "function length(machaîne) not defined".
Je vous joins ici mon code, si vous pouviez m'aider ce serait cool
#include "string.h"
void Draw() {
ifstream inStat;
float x;
float y;
float z;
int imax;
string fileopen;
char *intermediate;
TH1F *stat = new TH1F("stat","Statistics on Slot 12 about Zline_s",100,20,30);
TH1F *stat2 = new TH1F("stat2","Statistics on Slot 12 about Tshpr",30,0.012,0.015);
TH1F *stat3 = new TH1F("stat3","Evolution of ",64,1,64);
TH2F *ztshpr = new TH2F("ztshpr","",30,0.012,0.01 5,100,20,30);
printf("Quel fichier ouvrir ?\n");
//scanf(" %c",&fpen); pas bon, code C qui ne marche pas
cin >> fileopen; // spécifique à C++
cout << "le fichier est " << fileopen[0] << endl;
imax= length() fileopen;
for (int i= 0;i< imax;i++)
{intermediate[i] = fileopen[i];}
const char *feopen = intermediate;
inStat.open(feopen);
for(int i=1;i<65;i++) {
inStat >> x;
inStat >> y;
inStat >> z;
stat->Fill(x,1);
stat2->Fill(y,1);
stat3->SetBinContent(i,z);
ztshpr->Fill(y,x);
}
ztshpr->Draw();
inStat.close();
}
-----