cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • Learn how to build custom Python data connectors and further customize JMP’s Data Connector Framework with the Python Data Connector Demo, available now in the JMP Marketplace!
  • See how to create experiments to support product design and ID useful product features. Register for June 12 webinar, 2pm US Eastern Time.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
peri_a
Level III

Referencing columns extracted from parsing Datafilter select where

I want to use a data filter interface for a different use.

Then i need to parse the "select where" clause and use the info in there.

I am able to parse the Where clause and identify the different column in the expression

but not reference them

 

DFClause=Currentdatafilter << get where clause();
SelectInnerExpr=Arg(parse(DFClause),1);
// let assume for a second this will always return an expression of this type to simplify the example
SelectInnerExpr= expr(:study_owner == "name" & :Is Electr. == 1);

//so i can parse it with a simple for loop for(iA=1,iA<=NArg(SelectInnerExpr),iA++, TestColExp=Arg(Arg(SelectInnerExpr,iA),1); // here i can get the column as i need but as :ColumName TestCol=eval(TestColExp); // so this does not really retun the column reference
colname= TestCol<< Get Name; );

however i get the column as :ColumName

how do i now get the column reference to then continue with the script?

colname= TestCol<< Get Name

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
peri_a
Level III

Re: Referencing columns extracted from parsing Datafilter select where

Looking at your suggestion i realizes that 

TestColExp 

Is already the reference to the column i was looking for.

the "eval" in my script was not necessary... 

i could just use 

TestColExp << Get Data Type

for example 

View solution in original post

5 REPLIES 5

Re: Referencing columns extracted from parsing Datafilter select where

Is this what you're looking for? I modified your For() loop to put the first bit into a char, then pulled out and parsed the first word. Full script attached. There are also likely more elegant ways to do this that others may add.

 

For( iA = 1, iA <= N Arg( SelectInnerExpr ), iA++,
	TestColExp = Char( Arg( Arg( SelectInnerExpr, iA ), 1 ) ); // put all into a char()
	TestCol = Parse( Word( 1, TestColExp ) ); //now returns test col
);
peri_a
Level III

Re: Referencing columns extracted from parsing Datafilter select where

Looking at your suggestion i realizes that 

TestColExp 

Is already the reference to the column i was looking for.

the "eval" in my script was not necessary... 

i could just use 

TestColExp << Get Data Type

for example 

Re: Referencing columns extracted from parsing Datafilter select where

This also seems to work, but in the not-that-unusual case of having an open paren in the column name, will fail. You'd have to trap for that if it is a concern.

 

Names Default To Here( 1 );
dt = open("$Sample_Data\Car Physical Data.jmp");
gb  = dt << Graph Builder(
	Size( 526, 668 ),
	Show Control Panel( 0 ),
	Variables( X( :Turning Circle ), Y( :Horsepower ) ),
	Elements( Points( X, Y, Legend( 5 ) ), Smoother( X, Y, Legend( 6 ) ) ),
	Local Data Filter(
		Show Histograms and Bars( 0 ),
		Add Filter( columns( :Country, :Type ), Display( :Type, N Items( 5 ) ) ),
		Add Filter( columns( :Weight ), Display( :Weight, Height( 20 ) ) )
	)
);




//////////// processing here ob = (report(gb) << parent)[outlinebox(1)]; lis = (ob << xpath( "//TabPageBox" )) << get title; colnames = Transform Each( {v, i}, lis[2 :: (N Items( lis ) - 1)], Trim Whitespace( Items( [1 1], v, "(" )[1] ) );

Re: Referencing columns extracted from parsing Datafilter select where

I should add that it isn't getting the where clause, but rather the columns used in the filter... so that may not suit your needs.

peri_a
Level III

Re: Referencing columns extracted from parsing Datafilter select where

Thanks for the suggestion, but i would need to use the whole clause including the conditions (>10 or =="F").

and do something to the columns based on the selection.

Recommended Articles