Jump to content
Claris Engage 2025 - March 25-26 Austin Texas ×
The Claris Museum: The Vault of FileMaker Antiquities at Claris Engage 2025! ×

This topic is 2407 days old. Please don't post here. Open a new topic instead.

Recommended Posts

Posted (edited)

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
Posted
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.

Posted

Hi John,

8 hours ago, Aussie John said:

BulletList(Text,BulletChar,Start)

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

Lee

Posted
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. 

Posted (edited)
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
Posted
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.

Posted

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

Posted

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).

Posted (edited)

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
Posted

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. 😄

This topic is 2407 days old. Please don't post here. Open a new topic instead.

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
×
×
  • Create New...

Important Information

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