Jump to content
View in the app

A better way to browse. Learn more.

FMForums.com

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Cant get the recursive function to work

Featured Replies

I Have custom Function

BulletList(Text,BulletChar,Start) which is supposed to add the bullet character at the start of each value. I have been scratching my head all day trying to get it to be recursive.

Let([
VC=ValueCount(text);
Line=BulletChar & " "  & GetValue(text;start)
];
Case(start≤VC;line &¶&   BulletList(Line;BulletChar;Start+1);)
)

Any pointers would be great. I actually don't want to have the "Start" variable but thought I needed a counter to exit the function and a way to increment the getvalue.

Edited by Aussie John

5 hours ago, Aussie John said:

Untested, but this might work? It's also late so I might not be thinking right. 😄


Let([
     line = GetValue( text; 1 );
     newText = Substitute( "!!!" & text & "¶"; "!!!" & line & "¶"; "")
    ];
    If( IsEmpty( newText ); BulletChar & " " & line; BulletList( newText; BulletChar) )
   )

 

The "!!!" in the substitute make the first line unique in case there are duplicate values.

Hi John,

8 hours ago, Aussie John said:

BulletList(Text,BulletChar,Start)

Is this a CF you created, or is it posted someplace?

Lee

  • Author
5 hours ago, Lee Smith said:

Hi John,

Is this a CF you created, or is it posted someplace?

Lee

Hi Lee. This is a CF I am trying to create. 

  • Author
9 hours ago, OlgerDiekstra said:

Let([
     line = GetValue( text; 1 );
     newText = Substitute( "!!!" & text & "¶"; "!!!" & line & "¶"; "")
    ];
    If( IsEmpty( newText ); BulletChar & " " & line; BulletList( newText; BulletChar) )
   )

Thanks Olger - unfortunately this goes into an indefinite loop

Edited by Aussie John

6 hours ago, Aussie John said:

Thanks Olger - unfortunately this goes into an indefinite loop

Nearly got it right.

bulletList( text; bulletChar )

Let([
     line = GetValue( text; 1 );
     textstr = Substitute( text; "¶"; ",");
     text = Substitute( ¶ & text & ¶; ¶ & line & ¶; ¶ );
     text = Middle( text; 2; Length( text ) - 2 );
     result = If( IsEmpty( text ); line; bulletList( text; bulletChar ) )
    ];
   bulletChar & " " & line & ¶ & result
   )

The last item is duplicated, which I haven't worked out yet, but everything else works. Recursion ain't easy.

  • Author

I think I have cracked it.

Let([
     Line = GetValue( text; 1 );
     VC = ValueCount(text)
    ];
Case ( VC > 0 ;BulletChar&line & ¶ &  BulletList ( RightValues ( text ; VC - 1 ) ;BulletChar) ;)
   )

Thanks for your help Olger

Well done. Here's a simpler version, no need for those variables:

   If( ValueCount( text ) > 0; 
       bulletChar & GetValue( text; 1 ) & ¶ & bulletList( RightValues( text; ValueCount( text ) - 1 ); bulletChar ) 
      )

The only downside is that you do valuecount() twice. (I prefer if statements as opposed to case in instances like these, but it makes no difference really).

  • Author

thanks - the key is the rightvalues which I saw in a different CF by Comment. I have a numbering CF from the Brian dunning site which I can now simplify too.

Edited by Aussie John

Yeah, I was looking for something like rightvalues but couldn't find it. Simplifies it greatly.

Here's the numbered list:

numberedList( text; counter )

If( ValueCount( text ) > 0; 
    counter & " " & GetValue( text; 1 ) & ¶ & numberedList( RightValues( text; ValueCount( text ) - 1 ); counter + 1 ) )

It's funny how it now all looks so easy. 😄

  • Author

got you on a roll now.

Create an account or sign in to comment

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.