Femca Posted October 1, 2010 Share Posted October 1, 2010 Kan ik dit script "eleganter" maken ? De bedoeling was dus om pack_year_delta te laten berekenen. Waarbij 1) sample_clinical2_round2::pack_year leeg is er naar het volgend record moet worden gegaan 2) delta_clinical::Pack_year_delta niet leeg is naar het volgend record 3) zoniet berekenen script ziet er als volgt uit Loop If(sample_clinical2_round2::Pack_year = "") Go to Record (next) Else If (not isEmpty (delta_clinical::Pack_year_delta) Go to Record (next) Else Set Field(delta_clinical::Pack_year_delta; sample_clinical2_round2::pack_year - sample_clinical2::pack_year) End If Go to Record (next; Exit after last) End If End Loop Quote Link to comment
0 rmw Posted October 1, 2010 Share Posted October 1, 2010 Als het de bedoeling is om in 1 keer in alle records een waarde aan te passen heb je de script stap Replace Field Contents[by calculation] De voorwaarden die je stelt zijn ook in 1 berekening te vatten. Dus het kan in 1 scriptstap en in 1 berekening Replace Field Contents ( delta_clinical::Pack_year_delta ; If ( ( IsEmpty ( sample_clinical2_round2::Pack_year ) ) and ( not IsEmpty ( delta_clinical::Pack_year_delta ) ) ; sample_clinical2_round2::pack_year - sample_clinical2::pack_year ; delta_clinical::Pack_year_delta ) ) In gewoon nederlands: als aan beide voorwaarden wordt voldaan vervang je de veldinhoud door een nieuwe berekende waarde, anders laat je gewoon staan wat er al staat. HTH rmw PS Ik heb de code gewoon hier ingetypt, dus het kan zijn dat er een haakje oid ontbreekt Quote Link to comment
0 Femca Posted October 4, 2010 Author Share Posted October 4, 2010 Hallo rmw Ik heb jouw script getest maar ik heb opnieuw het probleem dat het lang duurt om het script te runnen. Nu als ik mijn script met de loop zou behouden en ik wil een tweede voorwaarde invoegen moet ik dan een tweede loop invoeren? Nu ziet mijn script er als volgt uit: Loop If (sample_clinical_round2_pilinname = "" or sample_clinical_round2_substitutietherapie = "") Go to Record (next) Else If (not is Empty ( delta_clinical::pilinname_delta) or not IsEmpty (delta_clinical::pilinname_deltaproc) or not IsEmpty (delta_clinical::substitutietherapie_delta )or not IsEmpty (delta_clinical::substitutietherapie_deltaproc) Go to Record(next) Else Set field(delta_clinical::pilinname_delta; sample_clinical_round2_pilinname - sample_clinical_pilinname) Set field(delta_clinical::pilinname_deltaproc; (sample_clinical_round2_pilinname - sample_clinical_pilinname) *100/sample_clinical_pilinname) Set field(delta_clinical::substitutietherapie_delta ; sample_clinical_round2_substitutietherapie - sample_clinical_substitutietherapie) Set field(delta_clinical::substitutietherapie_deltaproc ; sample_clinical_round2_substitutietherapie - sample_clinical_substitutietherapie)*100/ sample_clinical_substitutietherapie) End If Go to record (next, exit after last) End if End loop Kan ik dit ook anders? Quote Link to comment
0 dudematters Posted October 6, 2010 Share Posted October 6, 2010 Ik zou persoonlijk eerst een selectie maken van records die je wilt bijwerken, de rest weglaten. Dan is een replace sneller dan een loop. Plus als je alleen bewerkt wat je nodig hebt (veel minder records) is het ook veel sneller, ik denk niet dat je het nog sneller krijgt. Dus; Maak een extra veld die een berekening heeft met de volgende calculatie; notEmptyVar = If( If (not is Empty ( delta_clinical::pilinname_delta) or not IsEmpty (delta_clinical::pilinname_deltaproc) or not IsEmpty (delta_clinical::substitutietherapie_delta )or not IsEmpty (delta_clinical::substitutietherapie_deltaproc);"1";"0") Op deze manier weet je of je vergelijking 2 een waarde heeft of niet, zodat je erop kan zoeken. Dan kan je een script maken die het volgende uitvoert Set Error Capture (on) Enter Find Mode Set Field(sample_clinical_round2_pilinname;"==") Set Field(sample_clinical_round2_substitutietherapie;"==") Set Field(notEmptyVar;"==") Preform Find If GetLastError() <> 401 Replace Field Contents (delta_clinical::pilinname_delta; sample_clinical_round2_pilinname - sample_clinical_pilinname) Replace Field Contents (delta_clinical::pilinname_deltaproc; (sample_clinical_round2_pilinname - sample_clinical_pilinname) *100/sample_clinical_pilinname) Replace Field Contents (delta_clinical::substitutietherapie_delta; sample_clinical_round2_substitutietherapie - sample_clinical_substitutietherapie) Replace Field Contents (delta_clinical::substitutietherapie_deltaproc; sample_clinical_round2_substitutietherapie - sample_clinical_substitutietherapie)*100/ sample_clinical_substitutietherapie) End If Dit is handmatig ingetypt, dus er kunnen wat syntax foutjes in zitten. Quote Link to comment
Question
Femca
Kan ik dit script "eleganter" maken ?
De bedoeling was dus om pack_year_delta te laten berekenen.
Waarbij
1) sample_clinical2_round2::pack_year leeg is er naar het volgend record moet worden gegaan
2) delta_clinical::Pack_year_delta niet leeg is naar het volgend record
3) zoniet berekenen
script ziet er als volgt uit
Loop
If(sample_clinical2_round2::Pack_year = "")
Go to Record (next)
Else
If (not isEmpty (delta_clinical::Pack_year_delta)
Go to Record (next)
Else
Set Field(delta_clinical::Pack_year_delta; sample_clinical2_round2::pack_year - sample_clinical2::pack_year)
End If
Go to Record (next; Exit after last)
End If
End Loop
Link to comment
3 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.