Jump to content
Sign in to follow this  
Neuronal Nerd

List of particular Layouts

Recommended Posts

I want to create a list of layouts, but not all of my layouts. I'm sure this is relatively simple, but I'm having trouble figuring it out.

Let's say I have Layout A through Layout Z, but I just want to pull Layouts between B and F.

I know that I can use LayoutNames(Get(Filename)) to create a list of all of them, but how could I use the text functions to pull what I want?

Thank you.

Share this post


Link to post
Share on other sites

This is a recursive calculation, so you will need a custom function - perhaps something like:

ValuesStartingWith ( listOfValues ; startChar ; endChar )


Let ( [

item = GetValue ( listOfValues ; 1 ) ;

char = Left ( item ; 1 ) ;

countValues = ValueCount ( listOfValues ) 

] ;

Case ( startChar ≤ char and char ≤ endChar ; item & ¶ )

&

Case ( countValues > 1 ; ValuesStartingWith ( RightValues ( listOfValues ; countValues -1 ) ; startChar ; endChar ) )

)

Share this post


Link to post
Share on other sites

Thanks, but I tried creating that and the computer gives an error that a parameter cannot be found (highlighting the "char and char"), which I'm guessing it does not understand "item". So what would go there?

Share this post


Link to post
Share on other sites

Well, I thought I did. I've created simple ones before.

I created a custom function with the exact name and parameters as your post. I cut and pasted your exact text for the calculation. I go to click Ok, and I get the error message I mentioned.

Share this post


Link to post
Share on other sites

I did miss the fact that item was defined already above in my haste, but I still don't understand why I'm getting "The specified parameter cannot be found" when it is highlighting "char and char"

Share this post


Link to post
Share on other sites

Me neither. Why don't you post a screen shot of the entire 'Edit Custom Function' window?

Share this post


Link to post
Share on other sites

ok, I got it to work. Here is exactly what I did. I deleted the space before the word "and" and the space after the word "and", then I typed those two spaces back in manually. So seems to me there was some hidden characters/formatting when I cut and pasted that messed it up. That is over my head, but it's what worked.

Share this post


Link to post
Share on other sites

So, I've implemented the above custom function and the list it is returning includes all of my layouts except the one that is used for the parameter "startChar".

Share this post


Link to post
Share on other sites

This is a different situation, since now you want values between "LayoutB" and "LayoutF", not between B and F.

However, it's easy to generalize the function, so try:

ValuesInRange ( listOfValues ; lowLimit ; highLimit )


Let ( [

item = GetValue ( listOfValues ; 1 ) ;

countValues = ValueCount ( listOfValues ) 

] ;

Case ( lowLimit ≤ item and item ≤ highLimit ; item & ¶ )

&

Case ( countValues > 1 ; ValuesInRange ( RightValues ( listOfValues ; countValues -1 ) ; lowLimit ; highLimit ) )

)

Share this post


Link to post
Share on other sites

Thanks again! Ok, so it works in my example solution, but when I go to implement in my actual solution, I run into problems. It may be related to my naming convention as I uses spaces, [ ], and - in my actual solution because I am getting incomplete results.

Share this post


Link to post
Share on other sites

I'm attaching another example file that uses some of the same naming conventions of my actual file. Please note there are items in the list that should not be in the list.

LayoutList.fp7.zip

Edited by Guest

Share this post


Link to post
Share on other sites

oh! I just realized what the computer is doing, though I still don't know how to fix it. It is giving me the layouts that are in between the 2 alphabetically. I don't organize my layouts alphabetically. I apparently chose a poor example and miscommunicated my intent.

Here is another example. If I have the following layouts:

Splash Screen

Background

Insurance

Accounts

Clinical Findings

Recommendations

Settings

How do I get the computer to give me this list by telling it my list starts after "Splash Screen" and Ends before "Settings":

Insurance

Accounts

Clinical Findings

Recommendations

Edited by Guest

Share this post


Link to post
Share on other sites

You would need another custom function to sort the result. You could search Brian Dunning's site for likely candidates.

Why do you need this, BTW?

Share this post


Link to post
Share on other sites

I have over 100 layouts in my solution. Among those layouts is a list of about 20 different clinical tests, each with its own layout for data entry. I group those layouts together. Every time I add a new test to my research, I wanted my field that lists the available tests to automatically update based on the name of the layout.

Share this post


Link to post
Share on other sites

That doesn't sound like a good arrangement. You should be able to add tests without modifying the schema at all.

Share this post


Link to post
Share on other sites

I found a custom function called GetIndex, and this ended up meeting my needs:

MiddleValues ( LayoutNames(Get(FileName)) ; GetIndex(LayoutNames(Get(FileName));"TestListStart")+1; GetIndex(LayoutNames(Get(FileName));"TestListEnd")-GetIndex(LayoutNames(Get(FileName));"TestListStart")-1)

Share this post


Link to post
Share on other sites

Oh, so that's what you wanted (I haven't seen your edit earlier). This could be done quite simply as:


Let ( [

start = Position ( ¶ & listOfValues & ¶ ; ¶ & startValue & ¶ ; 1 ; 1 ) ;

end = Position ( ¶ & listOfValues & ¶ ; ¶ & endValue & ¶ ; start ; 1 ) + Length ( endValue ) 

] ;

Middle ( listOfValues ; start ; end - start )

)

I still think your real issue is elsewhere.

Share this post


Link to post
Share on other sites

Please tell me more about my issues. Should I be using a different structure? I don't add tests often (about 2 a year), and I use the same tests over and over. I put each test in a different table because each is so incredibly diverse and within each tests, I use very different formulas for calculating standard scores and interpretations of those tests. I don't see it practical to have a single table with each record representing a different test because there are so many different things I would do with each test.

Share this post


Link to post
Share on other sites

I have practically no information regarding what your tests are, but it sounds like you have a field for every parameter. I would have a table of tests, and another table for the test parameters, where each parameter would be a record. A third table would be used for the actual values and statistics.

This is just the basics - it gets more complex depending on what/who you're testing, how often, etc. But the idea is to have a discrete record for each recorded value. This is the only way results can be be analyzed by any chosen criteria with no restrictions.

Share this post


Link to post
Share on other sites

OK, then. I just wanted to point out that the 100+ layouts, the current issue, and the fact that you need to put on your developer hat to do things that should be entirely in the province of the user - these are all just symptoms of a structural issue. But if it works...

Share this post


Link to post
Share on other sites

Hi Comment,

Would you mind exanding on the structure you suggested?

Test table

Results table

Analysis Table?

How would a results table allow for the programmer to define analysis for different tests? (Table names just a guess towards your structure suggestion?)

Thanks

Mike

Share this post


Link to post
Share on other sites

Would you mind exanding on the structure you suggested?

Rather difficult to do without a mission statement. My point here was that when you have a separate record for each result, you can easily produce a report by any criteria (e.g. patients with low cholesterol and high blood pressure, grouped by ethnicity). Do a search for "survey" for more examples.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site, you agree to our Terms of Use.