Subscribe Bookmark RSS Feed

How do I conditionally set data type for new column in JSL?

mikedriscoll

Community Trekker

Joined:

Jun 23, 2011

Hi, How can I conditionally and programmatically set a data type for a new column? I have a workaround that covers numeric / character, and it could be extended for other types, but I'm trying to get the method below (marked 'not working') to work. The log shows it is not recognizing the type variable. I've tried a few things like parse() but have been so far unsuccessful.

 

Names Default To Here( 1 );

dt = open( "$SAMPLE_DATA\Big Class.jmp");

colType = column(dtData,"Name") << get data type;

// doesn't work, error on colType
dt << add multiple columns("New Column", 1, After("Name"), colType);

// works
dt << add multiple columns("New Column", 1, After("Name"), Numeric);
if(colType == "Character", column(dt, "New Column") << data type ("Character"));

Thanks,

Mike

1 ACCEPTED SOLUTION

Accepted Solutions
txnelson

Super User

Joined:

Jun 22, 2012

Solution

This will do the trick for you

Eval(
	Substitute(
			Expr(
				dt << add multiple columns( "New Column", 1, After( "Name" ), __coltype__ )
			),
		Expr( __colType__ ), Parse( coltype )
	)
)
Jim
4 REPLIES
txnelson

Super User

Joined:

Jun 22, 2012

Solution

This will do the trick for you

Eval(
	Substitute(
			Expr(
				dt << add multiple columns( "New Column", 1, After( "Name" ), __coltype__ )
			),
		Expr( __colType__ ), Parse( coltype )
	)
)
Jim
mikedriscoll

Community Trekker

Joined:

Jun 23, 2011

Thanks Jim. That works well. The eval(substitute(expr(...))) has always confused me as to when to use it because it seems an overcomplicated way of getting the variable where it needs to go. Is it fair to say that it is always needed if I'm trying to put a variable into such an expression? 

 

Thanks,

Mike

 

txnelson

Super User

Joined:

Jun 22, 2012

You are correct.  This is typically the best way to populate expressions

Jim
mikedriscoll

Community Trekker

Joined:

Jun 23, 2011

Thanks!