Jump to content
  • 0

Monster samenvatting


Sanne

Question

Posted

Geachte denktank, ik zit met de volgende uitdaging:

 

Ik heb een databakske met 9 tekstvelden.

 

Deze velden kunnen wel of niet gevuld zijn.

 

Van deze 9 velden moet een samenvatting worden gemaakt, volgens deze spelregels:

 

---------------------

 

Als een veld een inhoud heeft, dan moet de inhoud voorafgegaan worden door een kenmerk en worden afgesloten met een punt, tesamen moet dit dan in de samenvatting verschijnen.

 

Als in de velden de inhoud eindigt op een afkorting met een punt erachter, dan moet de inhoud worden voorafgegaan door het kenmerk, maar hoeft dan niet te worden afgesloten met een punt.

 

Hebben meerdere velden inhoud, dan moeten zij (tesamen met hun kenmerk en afsluitende punt) in de samenvatting worden samengevoegd met een spatie-streepje-spatie: " - "

 

De gehele samenvatting moet uiteindelijk eindigen op een punt, en moet - natuurlijk - niet beginnen met spatie-streepje-spatie.

 

---------------------

 

Ik heb de calculatie van de samenvatting al gemaakt. En hij werkt ook inderdaad. Maar hij is monstreus geworden:

 

Substitute(

 

(Case(not IsEmpty(Veld1) ; "Kenmerk 1: " & Veld1) &

 

Case(not IsEmpty(Veld1) ; Case(not IsEmpty(Veld2) ; ". - ")) &

Case(not IsEmpty(Veld2) ; "Kenmerk 2: " & Veld2) &

 

Case(not IsEmpty(Veld1 & Veld2) ; Case(not IsEmpty(Veld3) ; ". - ")) &

Case(not IsEmpty(Veld3) ; "Kenmerk 3: " & Veld3) &

 

Case(not IsEmpty(Veld1 & Veld2 & Veld3) ; Case(not IsEmpty(Veld4) ; ". - ")) &

Case(not IsEmpty(Veld4) ; "Kenmerk 4: " & Veld4) &

 

Case(not IsEmpty(Veld1 & Veld2 & Veld3 & Veld4) ; Case(not IsEmpty(Veld5) ; ". - ")) &

Case(not IsEmpty(Veld5) ; "Kenmerk 5: " & Veld5) &

 

Case(not IsEmpty(Veld1 & Veld2 & Veld3 & Veld4 & Veld5) ; Case(not IsEmpty(Veld6) ; ". - ")) &

Case(not IsEmpty(Veld6) ; "Kenmerk 6: " & Veld6) &

 

Case(not IsEmpty(Veld1 & Veld2 & Veld3 & Veld4 & Veld5 & Veld6) ; Case(not IsEmpty(Veld7) ; ". - ")) &

Case(not IsEmpty(Veld7) ; "Kenmerk 7: " & Veld7) &

 

Case(not IsEmpty(Veld1 & Veld2 & Veld3 & Veld4 & Veld5 & Veld6 & Veld7) ; Case(not IsEmpty(Veld8) ; ". - ")) &

Case(not IsEmpty(Veld8) ; "Kenmerk 8: " & Veld8) &

 

Case(not IsEmpty(Veld1 & Veld2 & Veld3 & Veld4 & Veld5 & Veld6 & Veld7 & Veld8) ; Case(not IsEmpty(Veld9) ; ". - ")) &

Case(not IsEmpty(Veld9) ; "Kenmerk 9: " & Veld9) &

 

".") ; ".." ; ".")

 

Graag hoor een alternief voor dit monster, bij voorkeur met VEEL minder karakters!

Samenvatting.fp5.zip

22 answers to this question

Recommended Posts

  • 0
Posted

Graag hoor een alternief voor dit monster, bij voorkeur met VEEL minder karakters!

Sanne,

ik maak me sterk dat er weinig zijn die beter doen dan jouw "fabrikaat". ben benieuwd wat hier de echt straffe gasten gaan bedenken.

 

misschien een idee ?

als je een aantal calculatievelden bij aanmaakt met als berekening de IF's in jouw formule, kan je waarschijnlijk een iets kortere formule maken omdat dan alle teksten "kenmerk 1 :" enz. in deze formule wegvallen. maar ze verschijnen dan uiteraard wel in je extra calculatievelden. is het sop de kool dan waard ?

 

cVeld1 = if(not IsEmpty(Veld1) ; "Kenmerk 1: " & Veld1) 

 

jouw formule kan dan een "eenvoudige" concatenate worden van de velden cVeld1, cVeld2 enz.

 

PS : de enige manier om dit met echt veel minder karakters te doen, is de veldnamen inkorten :lol: .

  • 0
Posted

Hoi Rony, fijn dat je mee wilt denken.

 

Maar laten we proberen om niet 9 extra velden aan te maken.

 

Waar jouw idee op mank gaat, is dat de aan elkaar geplakte velden tesamen in de samenvatting, van elkaar moeten worden onderscheiden door spatie-streepje-spatie.

 

Als er dan velden tussenin leeg zijn, dan kun je met spatie-streepje-spatie-streepje-spatie-streepje komen te zitten.

 

Dat is een van de valkuilen.

 

De ander is, dat wanneer veld 1 leeg is, je niet wilt beginnen met spatie-streepje-spatie. En wanneer veld 9 leeg is, je niet wilt eindigen met spatie-streepje-spatie.

  • 0
Posted

Een tussendoor-calculatie dan misschien, waarop je dan met een Substitute(patternCount(spatie - streepje - spatie)) de gewenste fatsoenering toepast? :idea: Dan ben je met 1 extra veld al klaar. (Toch?)

  • 0
Posted

... Dat is een van de valkuilen ...

die bedenkingen heb ik me ook gemaakt. je gaat het probleem van te complexe formules moeten verleggen naar de berekeningsvelden. dat is misschien niet opportuun.

vandaar mijn eerst reaktie :

ik maak me sterk dat er weinig zijn die beter doen dan jouw "fabrikaat".

 

Maar laten we proberen om niet 9 extra velden aan te maken.

waarom wil je dat vermijden ?

  • 0
Posted

Flash, fijn dat je meedenkt. Maar hoe had je het precies gedacht? Want je wilt niet ELKE spatie-streepje-spatie vervangen. En de patterncount-functie levert je een getal op, dat is niet iets waar je een substitute op los kunt laten ...

  • 0
Posted
Maar laten we proberen om niet 9 extra velden aan te maken.

waarom wil je dat vermijden ?

 

Dat begint op de wet-van-behoud-van-ellende te lijken: van 1 monstercalculatie naar 9 extra velden + een monstercalculatie om ze aan elkaar te krijgen ...

 

Overigens zou ik niet tegen 1 extra veld zijn, als dat de eenvoud en snelheid maar ten goede zou komen.

  • 0
Posted
Flash, fijn dat je meedenkt. Maar hoe had je het precies gedacht? Want je wilt niet ELKE spatie-streepje-spatie vervangen. En de patterncount-functie levert je een getal op, dat is niet iets waar je een substitute op los kunt laten ...

 

Je hebt gelijk Sanne, dat was een soort hersenkronkel van me. Ik bedoelde "scan op het patroon " - " en haal dat weg.". Dus 1 extra veld: =veld1 & veld2 & veld3 & bla en daar dan een substitute op alle mogelijke ongewenste streepje-spatie-streepje-spatie-streepje combinaties (jaaaa dat wordt ook een monster vrees ik). Theoretisch is de oplossing die je nu hebt weliswaar erg groot, maar wel zuiver, fault-tolerant en dus het beste lijkt mij. Misschien dat er met mijn methode ook iets werkends te bouwen is, maar dat zou dan veel meer "lapwerk" zijn ben ik bang. :oops:

  • 0
Posted

Sanne,

 

Als je je probleemstelling nou eerst eens versimpeld:

 

Als een veld inhoud heeft moet er een kenmerk-tekst voor en een '-' achter.

Er mogen geen twee punten achter elkaar voorkomen en de tekst mag niet eindigen met een '-'

 

Dan krijg ik de volgende berekening:

 

Substitute(

Substitute(

If(IsEmpty(Veld1); ""; "Kenmerk 1: " & Veld1 & ". - ") &

If(IsEmpty(Veld2); ""; "Kenmerk 2: " & Veld2 & ". - ") &

If(IsEmpty(Veld3); ""; "Kenmerk 3: " & Veld3 & ". - ") &

If(IsEmpty(Veld4); ""; "Kenmerk 4: " & Veld4 & ". - ") &

If(IsEmpty(Veld5); ""; "Kenmerk 5: " & Veld5 & ". - ") &

If(IsEmpty(Veld6); ""; "Kenmerk 6: " & Veld6 & ". - ") &

If(IsEmpty(Veld7); ""; "Kenmerk 7: " & Veld7 & ". - ") &

If(IsEmpty(Veld8); ""; "Kenmerk 8: " & Veld8 & ". - ") &

If(IsEmpty(Veld9); ""; "Kenmerk 9: " & Veld9 & ". - ") & "¶";

 

" - ¶"; "");

".."; ".")

 

Groetjes, je René

 

 

P.S. Werkt die bug van Case() met maar twee parameters nog in FM 7???

  • 0
Posted

Hoi René, wat fijn om je weer te horen! Tranen springen in mijn ogen bij het zien van jouw oplossing. Ja: het is een grote stap voorwaarts!

 

Maar ...

 

Er blijft een hardnekking probleempje: als alle velden leeg zijn, dan resulteert de calculatie in een lege regel ...

 

De geruchten gaan dat - naar alle waarschijnlijkheid - de case-functie ook in FM7 met 2 parameters blijft werken.

  • 0
Posted
Hoi René, wat fijn om je weer te horen! Tranen springen in mijn ogen bij het zien van jouw oplossing. Ja: het is een grote stap voorwaarts!

 

Maar ...

 

Er blijft een hardnekking probleempje: als alle velden leeg zijn, dan resulteert de calculatie in een lege regel ...

 

Verklein ik een berekening van 1200 naar 600 tekens, zit ze te zeuren over een return-teken. Sommige mensen zijn ook nooit tevreden. :lol:

Hoe groot is de kans dat geen van de velden is ingevuld? Je mag er ook een spatie van maken. Of bouw er een If() statement omheen.

Er was ook iets met een negatieve parameter in Position() of Replace() om eenvoudig de laatste '-' weg te halen maar daarover kan ik in de help nu niets vinden.

 

Rene

  • 0
Posted (edited)

:lol: Ah, wat mis je charme toch om me heen, René! :lol: Er is toch niemand die in jouw voetstappen kan treden ...

 

De kans dat de velden allemaal leeg zijn is groot. En dan moet de samenvatting ook echt leeg zijn! Dus ik heb het laatste karakter vervangen door 5 spaties: erg onwaarschijnlijk dat die ergens in de veldinhoud staan voorafgegaan door spatie-streepje-spatie.

 

Met de Trim() kunnen de spaties dan weer verwijderd worden:

 

Trim(

Substitute(

Substitute(

If(IsEmpty(Veld1); ""; "Kenmerk 1: " & Veld1 & ". - ") &

If(IsEmpty(Veld2); ""; "Kenmerk 2: " & Veld2 & ". - ") &

If(IsEmpty(Veld3); ""; "Kenmerk 3: " & Veld3 & ". - ") &

If(IsEmpty(Veld4); ""; "Kenmerk 4: " & Veld4 & ". - ") &

If(IsEmpty(Veld5); ""; "Kenmerk 5: " & Veld5 & ". - ") &

If(IsEmpty(Veld6); ""; "Kenmerk 6: " & Veld6 & ". - ") &

If(IsEmpty(Veld7); ""; "Kenmerk 7: " & Veld7 & ". - ") &

If(IsEmpty(Veld8); ""; "Kenmerk 8: " & Veld8 & ". - ") &

If(IsEmpty(Veld9); ""; "Kenmerk 9: " & Veld9 & ". - ") & "     ";

 

" -      "; "");

".."; ".")

)

 

 

PS: Ik zag dat in de weergave van de bovenstaande calculatie de spaties wegvielen in de posting. Dus daar staan nu 5 option-spaties (vaste spaties). Deze worden NIET door de trim-functie weggehaald, dus als je de calculatie copy-paste in FileMaker Pro, dan zorgen voor 5 gewone spaties!

Edited by Guest
  • 0
Posted
Overigens, op 24 maart geeft ik weer een FM Elite training met ruimte voor dit soort zaken.

 

Een Elite-training gegeven door René ... dat komt voor mij dicht bij hemel-op-aarde, hoor!

  • 0
Posted
:lol: Ah, wat mis ik je charme toch om me heen, René! :lol: Er is toch niemand die in jouw voetstappen kan treden ...

Weer een extra sessie bij de psychiater...

Overigens, was dit een zakelijk of beun probleem?

 

De kans dat de velden allemaal leeg zijn is groot. En dan moet de samenvatting ook echt leeg zijn! Dus ik heb het laatste karakter vervangen door 5 spaties: erg onwaarschijnlijk dat die ergens in de veldinhoud staan, maar ik ben bereid om dit aantal op te voeren.

 

Je kan er ook een onzin woord van willekeurige tekens van maken en die met een extra (laatste) substitute weghalen. Overigens kan Position met een negatieve parameter terugtellen maar die heeft dan ook Length() nodig als start. Dus dat werkt hier niet.

 

René

  • 0
Posted
Overigens, was dit een zakelijk of beun probleem?

 

Voornamelijk zakelijk, René, maar het was natuurlijk ook een beetje de sport. Ik betwijfel of een factuur ingediend bij mijn werkgever gehonoreerd zal worden ...

 

Ik heb de calculatie nog herschreven naar Case(not isempty(veld) ; enz) toe, maar kwam tot mijn verrassing uit op 612 karakters, terwijl met gebruik van de if-functie de calculatie op 594 karakters uitkomt.

 

:lol: Volgens BvB hebben jij en ik het een keer gehad over een calculatie om grassprietjes te tellen ... dus die zal bij deze posting inmiddels wel in een stuip liggen :lol:

  • 0
Posted
Overigens, op 24 maart geeft ik weer een FM Elite training met ruimte voor dit soort zaken.

 

Een Elite-training gegeven door René ... dat komt voor mij dicht bij hemel-op-aarde, hoor!

 

Was niet voor jou bedoelt maar voor de meelezers. Bovendien kan je baas mij helemaal niet betalen! :lol::lol:

  • 0
Posted
:lol: Volgens BvB hebben jij en ik het een keer gehad over een calculatie om grassprietjes te tellen ... dus die zal bij deze posting inmiddels wel in een stuip liggen :lol:

Kan ik me niets meer van herinneren... Hadden we toen iets sterks op?

 

Overigens is tekens tellen niet zo zinvol, je kan beter het aantal statements tellen. Hoe minder, hoe sneller. En not is dan ook een statement...

 

René

  • 0
Posted

Er blijft een hardnekking probleempje: als alle velden leeg zijn, dan resulteert de calculatie in een lege regel ...

 

Van mister Osborne himself:

leftwords( , 99999)

 

Uit ervaring: gebruik niet meer dan 7 negens, want dat trekt FM niet

 

rmw

  • 0
Posted

:lol: Volgens BvB hebben jij en ik het een keer gehad over een calculatie om grassprietjes te tellen ... dus die zal bij deze posting inmiddels wel in een stuip liggen :lol:

 

Kan me dit ook niet herinneren. Overigens heb ik hier achter bij mij thuis zoveel grasprietjes liggen dat ik denk dat dat niet eens in een berekening of veld past.

 

Sorry voor het afdwalen en niet echt FM gerelateerde commentaar.

 

Bart

  • 0
Posted

:lol: Volgens BvB hebben jij en ik het een keer gehad over een calculatie om grassprietjes te tellen ... dus die zal bij deze posting inmiddels wel in een stuip liggen :lol:

 

Kan me dit ook niet herinneren. Overigens heb ik hier achter bij mij thuis zoveel grasprietjes liggen dat ik denk dat dat niet eens in een berekening of veld past.

 

Sorry voor het afdwalen en niet echt FM gerelateerde commentaar.

 

Bart

 

Sanne, hij ligt toch niet in een stuip...

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