Re: Newbie Question- strtok type mismatch

From: Philippe Canal <pcanal_at_fnal.gov>
Date: Thu, 5 May 2011 11:32:10 -0500


Hi Herman,

 > Can anybody explain why this is the case? This was a deficiency in CINT's handling of strtok. The problem is resolved by revision 39116 of the trunk.

Cheers,
Philippe.

On 5/2/11 3:33 AM, Hermann Fuchs wrote:
> Hi
>
> It seems I've found the error.
> splitedString = strtok (NULL, " ");
> Does not work with Root, I have to use
> splitedString = strtok (0, " ");
> then it works.
>
> Can anybody explain why this is the case? I thought NULL can be used
> throughout c and c++ ?
>
> Cheers,
> Hermann
>
> On Mon, 2011-05-02 at 09:06 +0200, Hermann Fuchs wrote:
>> Hello
>>
>> I am using the current stable version, version 5.28
>>
>> It causes a type missmatch, wheter I start it with .x myfile.cxx or .x
>> myfile.cxx+
>>
>> I have attached my script below, perhaps it is something trivial, which
>> I'm just not seeing.
>> The reason why I'm using this complicated read process instead of using
>> the built-in ReadFile is, because I've to preprocess the values first.
>> The current source file consists of a single column of data which can be
>> surrounded by leading and trailing spaces and blank lines.
>> In the next step I want to read in a 8000*8000 matrix therefore the
>> complicated design.
>>
>> any help would be greatly appreciated,
>> Cheers,
>> Hermann
>> {
>> gROOT->Reset();
>> Int_t i,numValRead;
>> //the variables for the data
>> Double_t depth=0;
>> Double_t EDep=0;
>>
>> Double_t x,y,z;
>> Double_t incrementX,incrementY,incrementZ;
>> Double_t startX,startY,startZ;
>> Double_t value;
>> Int_t nBytes=10000;
>> Int_t len=0;
>> Char_t line[nBytes];
>> Char_t* splitedString;
>>
>> value=x=y=z=0;
>> incrementX=incrementY=incrementZ=0.05;
>> startX=startY=startZ=0;
>> x=startX;
>> y=startY;
>> z=startZ;
>>
>> // open the ASCII file
>> FILE *fp = fopen("sourceFileOneColumn.txt","r");
>>
>>
>> // create a new ROOT file
>> TFile *f = new TFile("testv1.root","RECREATE");
>>
>>
>>
>> // create a TTree
>> TTree *tree = new TTree("EDep","OneDimZ-Edep");
>>
>> //create two branches with one variable each
>> tree.Branch("depth",&depth,"depth/D");
>> tree.Branch("EDep",&depth,"EDep/D");
>>
>>
>> // fill the tree from the values in ASCII file
>> while (fgets(line,(nBytes),fp))
>> {
>> // remove newline
>> len = strlen(line);
>> if( line[len-1] == '\n' ) line[len-1] = 0;
>> //if stringlenght was zero, line is empty, skip it
>> if (strlen(line) == 0) continue;
>>
>> //if starting with # skip line and go to next line
>> if (line[0] == '#')
>> {
>> //printf( "# detected \n");
>> continue;
>> }
>>
>> //cut string by seperators
>> printf("here\n");
>>
>> splitedString = strtok(line," ");
>>
>> while (splitedString != NULL)
>> {
>> //Fill tree
>> EDep=atof (splitedString);
>> depth=z;
>> tree->Fill();
>>
>> splitedString = strtok (NULL, " ");
>> //increment z
>> z=z+incrementZ;
>> }
>>
>> }
>>
>> // check what the tree looks like
>> tree->Print();
>>
>> //close the source file
>> fclose(fp);
>>
>> //write data to root file
>> f->Write();
>>
>> //Close the root file
>> f->Close();
>> }
>>
>>
>>
>> On Fri, 2011-04-29 at 10:25 -0500, Philippe Canal wrote:
>>> Hi Hermann,
>>>
>>> I can not reproduce the problem with the trunk. Which version of ROOT are you using?
>>>
>>> Cheers,
>>> Philippe.
>>>
>>> On 4/29/11 9:05 AM, Hermann Fuchs wrote:
>>>> Hello
>>>>
>>>> I apologize if this is a stupid question, as I am pretty new to Root
>>>> development.
>>>>
>>>> I am trying to split a string using strtok. The same code fragment works
>>>> outside of root, so i am unsure why this would cause an error.
>>>>
>>>> The troubling lines are:
>>>>
>>>> Char_t line[nBytes];
>>>> Char_t* splitedString;
>>>> ...
>>>> fgets(line,(nBytes+1),fp)
>>>> ...
>>>>
>>>> splitedString = strtok(line," ");
>>>>
>>>> The following error occurs:
>>>>
>>>> Error: strtok param[0] type mismatch readFilesv1.cxx:57:
>>>> *** Interpreter error recovered ***
>>>>
>>>>
>>>> Does anybody have an idea how to solve that problem?
>>>> Any idea would help.
>>>> Background info: I am trying to read an Asci file delimited by spaces.
>>>>
>>>>
>>>> Cheers,
>>>> Hermann
>>>>
>>>
>
Received on Thu May 05 2011 - 18:32:16 CEST

This archive was generated by hypermail 2.2.0 : Thu May 05 2011 - 23:50:01 CEST