2013

Jan

18

Av Rolf

Jag har gjort en del C/C++-program och alltid haft mycket svårt med textberäkningar som att hämta delar av texter. I FileMaker är allt mycket enklare 🙂 I och med att FileMaker kan hantera stora textmassor är det viktigt med bra funktioner. Det finns förstås några inbyggda, men jag tänkte tipsa om en som jag använder ofta. 

Den beräkningsfunktion jag ofta använder kallar jag för GetTextBetween och jag har säkert blivit inspirerad från andra programmeringsspråk. Funktionen ger som resultat texten mellan två andra texter och har 3 argument: textfältet att söka i, den text som är precis före det jag vill ha som resultat samt den text som är precis efter det jag önskar.

Exempel 1

Jag får ett mail med text från ett formulär på webben som jag klistrar in i ett textfält i FileMaker. Varje rad börjar med fältnamn följt av kolon och innehållet. För att få innehållet i fältet ”Namn”, dvs. det som står på samma rad efter ”Namn:” i mailtexten använder jag beräkningen:

GetTextBetween (textfält; "Namn:"; "¶")

Exempel 2

Jag hämtar en webbsida med manussteget Infoga från URL, t.ex. http://finans.pricerunner.se/pr/bolan/jamfor.php (en helt godtyckligt vald sajt), där jag vill få fram aktuell 3-månadersränta för ett låneinstitut. Jag gör ett manus med manussteget Infoga från URL som hämtar hela webbsidan till ett textfält och använder sedan följande beräkningsfunktion:

GetTextBetween (GetTextBetween ( Textfält; Bank; "<br /></td>" );"center;'>";"%")

Jag använder samma funktion 2 gånger, först för att få fram en lämplig text efter bankens namn (som jag anger i fältetBank) och sedan procentsiffran som avslutas med ”%”. (Vilka texter som ska användas före och efter får man klura ut.)

Ladda ner exempeldatabas här: Bolån.fmp12 (124,00 kb)

GetTextBetween

Hur ser då beräkningsfunktionen ut?

GetTextBetween (textfält; start; stopp) =

Let([ startlängd = Length(start); startPos = Position(textfält;start;1;1); stoppPos = Position(textfält;stopp;startPos + startlängd;1) ]; Middle(textfält;startPos + startlängd;stoppPos - startPos - startlängd) )

Jag beräknar positionen för den första textsträngen (start) och sedan den andra textsträngen (stopp). När jag söker efter den andra textsträngen (stopp) börjar jag där den första slutar. Till sist använder jag funktionen Middle för att ge texten mellan start och stopp som resultat.

Jag har gjort det som en anpassad (egen) funktion i FileMaker Advanced, du gör det med kommandot Hantera anpassade funktioner i menyn Arkiv. Om du inte har FileMaker Advanced kan du använda samma formel i ett vanligt beräkningsfält, men du får upprepa formeln varje gång du vill använda den.

Kommentarer

2017-05-05 Johan Hammarström

Hej,
försöker mig på att implementera detta, men allt funktionen producerar är ett frågetecken... Någon idé om vad som kan vara fel? Lägger in ett namnfält, "Niclas", som textfält och start "ic" och stopp "s" så borde jag ju få ut "la"... Inte sant?

Med goda hälsningar,
- Johan.

2017-05-09 Rolf

Du har rätt och det ska fungera. Har du utgått från exempeldatabasen?

Skriv en kommentar

Din epost-adress stannar hos oss.