Jump to content
  • 0

[Opgelost] Error in DataViewer bij functie die werkt


menno

Question

Gegeven:

Ik heb de volgende Custom-Function gecreëerd om non-printing characters uit de veldinvoer te filteren. In scripts werkt deze functie ook prima en ik denk dat het in velddefinities het ook werkt. (Deze functie is zinvol wanneer gebruikers veel informatie van webbrowsers en/of andere applicatie kopiëren en plakken in FileMaker en zo voorkom je dat bij het afdrukken rare characters verschijnen en in sommige gevallen zelfs dat FM crasht zodra je een record probeert weer te geven.).

 

De functie:

// Functie: CF_FilterNonPrintingASCII ( Text ; Iteration )
// Filter de non-printing characters van de lijst (lst) uit de aangeboden tekst middels de char-equivalent m.u.v. TAB (9), CR (10) en de LF (13)
Let ( [
lst = "0¶1¶2¶3¶4¶5¶6¶7¶8¶11¶12¶14¶15¶16¶17¶18¶19¶20¶21¶22¶23¶24¶25¶26¶27¶28¶29¶30¶31" ; 
N = Int ( Iteration ) + 1 ; 
V = GetValue ( lst ; N ) ; 
C = Evaluate ( "Char(" & V & ")" ) ; 
L = ValueCount ( lst ) ; 
R = Substitute ( Text ; [ C ; "" ] )
] ;
If ( N > L ; Substitute ( Text ; [ Char ( 10 ) ; ¶ ] ; [ Char ( 13 ) ; ¶ ] ) ; CF_FilterNonPrintingASCII ( R ; N ) )
)

 

Het probleem:

Zoals gezegd werkt de functie in scripts en velddefinities, maar in de dataviewer gebeurt er iets raars. Zodra je daar de functie in gebruikt en op "Evaluate Now" klikt, dan krijg je de foutmelding

A number, text constant, field name or "(" is expected here.

terwijl in het resultaat de functie wel wordt uitgevoerd. Ik ben wel zover dat ik weet dat het probleem in feite wordt veroorzaakt door

Evaluate ( "Char(" & V & ")" )

maar ik weet niet hoe ik dat moet oplossen.

Het enige alternatief waar ik zelf op uitkom zou zijn een functie te maken zoals:

Substitute ( Text ; [ Char ( 0 ) ; "" ] ; .... ;  [ Char ( 31 ) ; "" ] )

maar dat is net wat ik niet wil en bovendien gebruik ik de Evaluate-functie wel vaker en ook in recusieve functies en daar krijg ik geen enkele foutmelding bij gebruik in de dataviewer.

 

Dus ik ben benieuwd of iemand hier een oplossing voor weet.

 

Dank alvast en mvg, Menno

Edited by Guest
Link to comment

3 answers to this question

Recommended Posts

  • 0

Haha, je hebt gelijk, onzin om Evaluate te gebruiken! Solved! Altijd goed om een ander even mee te laten kijken. Bedankt!

 

De correcte functie wordt nu:

// Functie: CF_FilterNonPrintingASCII ( Text ; Iteration )
// Filter de non-printing characters van de lijst (lst) uit de aangeboden tekst middels de char-equivalent m.u.v. TAB (9), CR (10) en de LF (13)
Let ( [
  lst = "0¶1¶2¶3¶4¶5¶6¶7¶8¶11¶12¶14¶15¶16¶17¶18¶19¶20¶21¶22¶23¶24¶25¶26¶27¶28¶29¶30¶31" ; 
  N = Int ( Iteration ) + 1 ; 
  C = Char( GetValue ( lst ; N ) ) ; 
  L = ValueCount ( lst ) ; 
  R = Substitute ( Text ; [ C ; "" ] )
] ;
  If ( N > L ; Substitute ( Text ; [ Char ( 10 ) ; ¶ ] ; [ Char ( 13 ) ; ¶ ] ) ; CF_FilterNonPrintingASCII ( R ; N ) )
)

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...