dynamically created List only operates for level 1

David McFarlane mcfarla9 at msu.edu
Fri Oct 7 15:19:41 UTC 2011


Oh, your example did not seem to include using code to add List 
attributes (as opposed to levels), but just for those who may run 
across this, the List topic in the E-Basic Help curiously lacks the 
List.AddAttrrib method.  If you do a Find for "AddAttrib" on the full 
Help Topics, you will find it under the topic 
"FactorSpace.AddAttrib".  (I also documented this back in 2009 at 
http://support.pstnet.com/forum/Topic1241-12-1.aspx .)

-- David McFarlane, Professional Faultfinder


At 10/7/2011 11:08 AM Friday, David McFarlane wrote:
>John,
>
>Stock reminder:  1) I do not work for PST.  2) PST's trained staff 
>takes any and all questions at 
>http://support.pstnet.com/e%2Dprime/support/login.asp , and they 
>strive to respond to all requests in 24-48 hours -- this is pretty 
>much their substitute for proper documentation, so make full use of 
>it.  3) If you do get an answer from PST Web Support, please extend 
>the courtesy of posting their reply back here for the sake of others.
>
>That said, here is my take...
>
>I have successfully made dynamic Lists work using E-Basic 
>code.  Whenever I want to figure out how to do something like that, 
>I start by making some simple relevant mock-up in E-Studio, have it 
>generate the code, and then look at that generated code.
>
>In this case, add a List (e.g., "List1"), add a few levels to that 
>List, set Load Method to "Script" (so that it generates full code 
>for making the List), and Generate the code.  Then scroll down to 
>the InitObjects area in the full code.  There you will find a few lines like
>
>         Set List1.TerminateCondition = Cycles(1)
>         Set List1.ResetCondition = Samples(5)
>         List1.Reset
>
>I think your key lies there.  After adding your levels, in addition 
>to Resetting the List (as Ben already mentioned), you still need to 
>set the TerminateCondition and ResetCondition -- see the 
>List.TerminateCondition and List.ResetCondition topics, as well as 
>the Cycles and Samples topics, in the E-Basic Help facility.
>
>-- David McFarlane, Professional Faultfinder
>
>
>At 10/7/2011 10:18 AM Friday, you wrote:
>>Hi Ben,
>>
>>Thanks for the suggestion. Actually I had the .Reset (I just missed it
>>off the bottom of the cut and paste).
>>
>>It's frustrating because the debug.print returns 50 which is what I'd
>>expect its just that the loop only runs once.
>>
>>I've jsut condensed it down to the bare bones :-
>>
>> >>>const NUMBER_OF_TRIALS as integer = 50
>>
>>dim index as integer 'loop variable
>>
>>for index = 1 to NUMBER_OF_TRIALS
>>
>>         TrialList.setProc index, "TrialProc"
>>         TrialList.setWeight index, "1"
>>         TrialList.setAttrib index, "text", "cat"
>>         TrialList.setAttrib index, "correct", "a"
>>
>>         if index < NUMBER_OF_TRIALS then
>>                 TrialList.AddLevel index + 1
>>         end if
>>
>>         debug.print index & " - " & TrialList.getAttrib(index, "text") & " -
>>" &  TrialList.getAttrib(index, "correct")
>>
>>next
>>
>>debug.print "TrialList size = " & TrialList.Size
>>
>>TrialList.Reset
>><<<<
>>
>>with a basic TrialList with a single level as follows;-
>>
>> >>>
>>ID   Weight   nested   procedure   Text   Correct
>>1               1              TrialProc        Cat        a
>><<<
>>
>>
>>which has the same problem :(
>>
>>Is anyone else successfully using AddLevel ? If so, then some sample
>>code would be appreciated,
>>
>>Many thanks,
>>
>>John
>>
>>
>>
>>On Oct 6, 6:30 pm, ben robinson <baltimore.... at gmail.com> wrote:
>> > don't forget to add TrialList.Reset after adding all those levels.
>> > hope that helps.
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > On Thu, Oct 6, 2011 at 11:53 AM, JACanterbury 
>> <jacanterb... at gmail.com> wrote:
>> > > Hi
>> >
>> > > I'm setting up my TrialList to have only 1 level and then building it
>> > > on the fly something like this ...
>> >
>> > > for index = 1 to NUMBER_OF_TRIALS
>> >
>> > >        TrialList.setProc index, "TrialProc"
>> > >        TrialList.setWeight index, "1"
>> > >        TrialList.setAttrib index, "response", responses( index )
>> > >        TrialList.setAttrib index, "image", "images\\" & images( index )
>> > >        TrialList.setAttrib index, "delay", Random( interval_min,
>> > > interval_max )
>> >
>> > >        if index < NUMBER_OF_TRIALS then
>> > >                TrialList.AddLevel index + 1    ' add the next 
>> level to the list
>> > > ready for the next loop iteration
>> > >        end if
>> >
>> > > next
>> >
>> > > debug.print "TrialList size = " & TrialList.Size
>> >
>> > > this code all works fine and adds the extra levels and the final
>> > > debug.print displays the correct value (50 in this case) however the
>> > > script then only performs 1 iteration so it seems to ignore all the
>> > > extra levels that have been dynamically added.
>> > > Interestingly, if I add an extra level ie level 2) manually  before
>> > > running this code (with the approp tweak to stop AddLevel complaining)
>> > > then the list operates for level 1 & level 2.
>> >
>> > > It's as if e-prime is using the startup value for the list size and
>> > > ignoring what has happened at run time.
>> >
>> > > Any ideas would be appreciated ( i'd rather keep it dynamic if
>> > > possible)
>> >
>> > > Thanks

-- 
You received this message because you are subscribed to the Google Groups "E-Prime" group.
To post to this group, send email to e-prime at googlegroups.com.
To unsubscribe from this group, send email to e-prime+unsubscribe at googlegroups.com.
For more options, visit this group at http://groups.google.com/group/e-prime?hl=en.



More information about the Eprime mailing list