Re: Writing and reading TObString

Rene Brun (Rene.Brun@cern.ch)
Tue, 18 May 1999 16:06:00 +0000


Hi Michal,
You had several problems in your macro. see my comments in the modified
macro below.

Rene Brun

void michal2()
{
// Create a new ROOT file to contain TObjString

TFile *tfile = new TFile("michal2.root", "recreate");
Char_t large_str[10000];

TObjString Comment;
large_str[0] = '\0';
sprintf(large_str, "testing TObjString");
Comment.SetString(large_str); //use . instead of ->
Comment.Print();
Comment.Write();
// Comment -> Delete(); //you should not Delete a stack object
tfile -> Write("Comment");

tfile -> Close();
delete tfile;

TObject *obj;
TKey *key;

TFile *f = new TFile("michal2.root", "read");
f -> ls();

// create an iterator to loop through all objects(keys) in the file
TIter nextkey(f -> GetListOfKeys());
while (key = (TKey*)nextkey()) {
obj = key -> ReadObj(); //use ReadObj, not Read

if (obj->InheritsFrom("TObjString") ) { //instead of obj->IsA
TObjString *Comm = (TObjString *) obj;
Comm->Print();
}
}
f -> Close();
}

lijowski@cosray2.wustl.edu wrote:
>
> Hello,
>
> I am trying to write a text into a root file and read it. Below
> is a short macro which is based on Example of macro to add histogram files
> in ROOT page. It crashes in line 41 with a message illegal pointer to
> class object obj 0x0 .... .
>
> Am I doing something wrong or is it any other solution?
>
> Thank you and regards,
>
> Michal Lijowski
>
> -------------------------------------------------------------------------
>
> void test_TObjString()
> {
> // gROOT -> Reset();
>
> Char_t Macro_name[80] = "test_TObjString";
> Char_t infile[200], outfile[200];
>
> // Create a new ROOT file to contain TObjString
>
> sprintf(outfile, "%s.root", Macro_name);
> printf("%s\n", outfile);
>
> TFile *tfile = new TFile(outfile, "recreate");
> Char_t large_str[10000];
>
> TObjString Comment;
> large_str[0] = '\0';
> sprintf(large_str, "testing TObjString");
> Comment -> SetString(large_str);
> Comment -> Print();
> Comment -> Write();
> Comment -> Delete();
> tfile -> Write("Comment");
>
> tfile -> Close();
>
> TObject *obj;
> TKey *key;
>
> sprintf(infile, "%s.root", Macro_name);
> printf("%s\n", infile);
> TFile *f = new TFile(infile, "read");
> f -> ls();
>
> // create an iterator to loop through all objects(keys) in the file
> TIter nextkey(f -> GetListOfKeys());
> while (key = (TKey*)nextkey()) {
> obj = key -> Read();
> if (obj -> IsA() -> InheritsFrom("TObjString") ) {
> TObjString *Comm = (TObjString *) obj;
> Comm -> Print();
> }
> }
>
> f -> Close();
> }