Ga naar inhoud
  • 0

[Opgelost] Error in DataViewer bij functie die werkt


menno

Vraag

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

aangepast door Gast
Link naar reactie

3 antwoorden op deze vraag

Aanbevolen berichten

  • 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 naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...