我是root的新手。很抱歉,如果有任何事情的话。 我无法在根V 5.34中调用我的文本文件(" Image.txt")。此文本文件包含9列和250行。我想读第2,第3,第4,第5和第7(它们由","并且具有第47行的值)列为x,y,a,b,z。然后我想绘制图形为y Vs x,b vs a和直方图作为count / bin Vs z。在此之前,我需要从第47行中获取这些列的值。如何解决此问题?在此先感谢您的帮助。文件(Image.txt)作为附件: http://www.filedropper.com/image_9
答案 0 :(得分:1)
我希望你不是在找人提供完整的解决方案......让我简单地概述一下让你入门的基本想法。
在C ++中,代码可能如下所示:
std::ifstream myfile("Image.txt");
std::string myline;
while ( std::getline(myfile, myline) )
{
// Parse the string... E.g.:
//int d1, d2; float f1;
//sscanf(line.c_str(), "%d,%f,%d", &d1, &f1, &d2);
// Use d1, d2, f1 to fill a histogram or whatever...
}
答案 1 :(得分:0)
FILE *f = fopen("Image.nap","r");
if (!f) {
printf("Could not open Image.nap\n");
return;
}
char line[300];
float v1,v2,v3,v4,v5,v6,v7,v8;
Int_t i = 0;
TGraph *g = new TGraph();
TGraph *g1 = new TGraph();
TCanvas *c1 = new TCanvas("c1","c1",800,1000);
TH1F *h1=new TH1F ("h1","Elpsarea Histo",100,-400,400);
while (fgets(line,160,f)) {
if (i>49) {
sscanf(&line[0] ,"%g,%g,%g,%g,%g,%g,%g,%g",&v1,&v2,&v3,&v4,&v5,&v6,&v7,&v8);
g->SetPoint(i,v2,v3);
g1->SetPoint(i,v5,v6);
printf ("%g\t", v8);
h1.Fill(v8);
}
i++;
}
fclose(f);
c1->Divide(1,2);
c1->cd(1);
g->Draw("AP");
c1.cd(2)
g1.Draw("AP");
TCanvas *c2 = new TCanvas("c2","Histo for Elps area",600,400);
h1->GetXaxis()->SetTitle("Elepse Area Imicron)");
h1->GetYaxis()->SetTitle("Count/bin");
h1->GetXaxis()->CenterTitle();
h1->GetYaxis()->CenterTitle();
h1.Draw();