[ROOT] TString, char*, and Strip

From: nozarm (nozarm@jlab.org)
Date: Thu Oct 23 2003 - 02:47:10 MEST


Hi all,

I've written the following piece of macro to read in a text file with a 
number of lines with the first field in each line used (later in the 
larger macro) to label the .eps and .gif files produced (after producing 
graphs, ...) and the second field, used as titles of the graphs.  

Since at a later stage, I do the following inside another loop, i.e.
....
char psFile_name[40];
sprintf(psFile_name,"%s_%s.eps",Basename,PsVarName[n]);

....

 I would need to get rid of the blank spaces before and after the first 
field in each line.  So I do this by using Strip but not without doing 
some gymnastics
between TString and char* (as I've highlighted in the macro).  The macro 
works but I was just wondering whether there is a more graceful way of 
handling this...  i.e. can I not have a Strip method that takes as an 
argument another TString and the character to be stripped, returning the 
stripped string?
Looking in 
 http://root.cern.ch/cgi-bin/print_hit_bold.pl/root/html/src/TString.cxx.html?TString#first_hit 
, I wasn't able to find one.


Thanks and best wishes,
Mina Nozar
//////////////////////////////////////////

void Label(const int Ncol, char * LabelFile_name)
{

// root
// .L Label.C  
// .x Label.C(34,"test.label");

#include <iostream.h>
#include <string.h>

// Reading in the label file
  ifstream LabelFile;
  LabelFile.open(LabelFile_name, ios::in);
                   
  Int_t nline = 0;
  TString VarName[Ncol];
  TString PsVarName[Ncol];
  char line[100];
  TString tmp, tmp1;
  const char* tmp2;
  while (!LabelFile.eof() && nline<(Ncol/2)) {
  LabelFile.getline(line,100, '\n');
  tmp = line;
  tmp1 = tmp(0,6);
  tmp2 = tmp1;
  PsVarName[2*nline] = Strip(tmp2);
  VarName[2*nline] = tmp(7,tmp.Length()-6);
cout << "PsVarName[" << 2*nline<< "]: " << PsVarName[2*nline] << 
"        VarName[" << 2*nline << "]: " << VarName[2*nline] << endl;
  nline++;      
  }


test.label file looks like:

Mass  Mass(#pi^{+}#pi^{+}#pi^{-}) GeV
Total  Total Intensity
0-+_1  0^{-+}0^{+}_0_#sigma
0-+_2  0^{-+}0^{+}_0_f_{0}(980)
0-+_3  0^{-+}0^{+}_1_#rho(770)
1++_1  1^{++}0^{+}_0_#rho(770)
1++_2  1^{++}1^{+}_0_#rho(770)
1++_3  1^{++}1^{-}_0_#rho(770)
1++_4  1^{++}0^{+}_2_#rho(770)
1++_5  1^{++}1^{+}_2_#rho(770)
1++_6  1^{++}1^{-}_2_#rho(770)
1++_7  1^{++}0^{+}_1_#sigma
1++_8  1^{++}1^{+}_1_#sigma
1++_9  1^{++}1^{-}_1_#sigma
1++_10 1^{++}0^{+}_1_f_{0}(980)
1++_11 1^{++}1^{+}_1_f_{0}(980)
1++_12 1^{++}1^{-}_1_f_{0}(980)


Running the above peice results in:

Openning file: test.label
PsVarName[0]: Mass        VarName[0]: ass(#pi^{+}#pi^{+}#pi^{-}) GeV
PsVarName[2]: Total        VarName[2]: Total Intensity
PsVarName[4]: 0-+_1        VarName[4]: 0^{-+}0^{+}_0_#sigma
PsVarName[6]: 0-+_2        VarName[6]: 0^{-+}0^{+}_0_f_{0}(980)
PsVarName[8]: 0-+_3        VarName[8]: 0^{-+}0^{+}_1_#rho(770)
PsVarName[10]: 1++_1        VarName[10]: 1^{++}0^{+}_0_#rho(770)
PsVarName[12]: 1++_2        VarName[12]: 1^{++}1^{+}_0_#rho(770)
PsVarName[14]: 1++_3        VarName[14]: 1^{++}1^{-}_0_#rho(770)
PsVarName[16]: 1++_4        VarName[16]: 1^{++}0^{+}_2_#rho(770)
PsVarName[18]: 1++_5        VarName[18]: 1^{++}1^{+}_2_#rho(770)
PsVarName[20]: 1++_6        VarName[20]: 1^{++}1^{-}_2_#rho(770)
PsVarName[22]: 1++_7        VarName[22]: 1^{++}0^{+}_1_#sigma
PsVarName[24]: 1++_8        VarName[24]: 1^{++}1^{+}_1_#sigma
PsVarName[26]: 1++_9        VarName[26]: 1^{++}1^{-}_1_#sigma
PsVarName[28]: 1++_10        VarName[28]: 1^{++}0^{+}_1_f_{0}(980)
PsVarName[30]: 1++_11        VarName[30]: 1^{++}1^{+}_1_f_{0}(980)
PsVarName[32]: 1++_12        VarName[32]: 1^{++}1^{-}_1_f_{0}(980)



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:16 MET