Hello Christophe
fscanf ist not a good choice at all. The position of the file pointer
when an error is encountered is undefined. Better use:
Char_t Line[300]; // or apropriate
fgets (Line, 300, fpointer); // to read a line including cr at the end
// fgets read actually only 299 chars
plus 0x00
sscanf (Line, Format_string, args); // as fscanf
advantage: the string can be divided as needed prior to
scanning the arguments -> any number of arguments is possible only
you have to find a convenient way to split the string after a complete
argument.
Stephan Heising
>>>>>>>>>>>>>>>>>> Ursprüngliche Nachricht <<<<<<<<<<<<<<<<<<
Am 12/8/99, 6:18:25 PM, schrieb Christophe Suire <suire@in2p3.fr> zum
Thema fscanf limitation:
> Hello,
> I have the following error when I try to use the macro "reading an
> ascii file " ( look at the end of the mail ) with a large number of
> arguments.
> Limitation: fscanf only takes upto 12 arguments
> FILE:/home/suire/Test_prod/data/./mynt.C LINE:34
> *** Interpreter error recovered ***
> I understand well the error but I cannot reduce the number of
arguments.
> Any ideas how to do it.
> Thanks.
> Reading an ascii file and making an ntuple
> {
> // example of macro to read data from an ascii file and
> // create a root file with an histogram and an ntuple.
> gROOT->Reset();
> FILE *fp = fopen("/user/brun/root/basic.dat","r");
> Float_t x,y,z;
> Int_t ncols;
> Int_t nlines = 0;
> TFile *f = new TFile("basic.root","RECREATE");
> TH1F *h1 = new TH1F("h1","x distribution",100,-4,4);
> TNtuple *ntuple = new TNtuple("ntuple","data from ascii
> file","x:y:z");
> while (1) {
> ncols = fscanf(fp,"%f %f %f",&x, &y, &z);
> if (ncols < 0) break;
> if (nlines < 5) printf("x=%8f, y=%8f, z=%8f\n",x,y,z);
> h1->Fill(x);
> ntuple->Fill(x,y,z);
> nlines++;
> }
> printf(" found %d points\n",nlines);
> fclose(fp);
> f->Write();
> }
> --
> -------------------------------------------------
> Christophe Suire suire@in2p3.fr
> Institut de Recherches Subatomiques phone: +33(0)388106154
> 23,rue du Loess Bat20 BP28 fax: +33(0)388106614
> F-67037 Strasbourg cedex2
> -------------------------------------------------
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:44 MET