Thanks Geert.
Before I offered my "if" statement series, I was trying to work a case 
statement but couldn't think how to get the value into the series, 
because I was focusing on a bunch of different subfield functions. 
Thanks for reminding me and clarifying for me.
Don

[email protected] wrote:
> Hi all,
>
> here is another approach that might suit Malkie, and that stores the last  
> subfield *directly* in a field of the same panel :
>
> Create a second (calculated?) A45 field in the panel, containing the  
> following formula:
>
> P1F1 cases
> case subfield[cv;" ";15]<>" " of subfield[cv;" ";15] endof
> case subfield[cv;" ";14]<>" " of subfield[cv;" ";14] endof
> case subfield[cv;" ";13]<>" " of subfield[cv;" ";13] endof
> case subfield[cv;" ";12]<>" " of subfield[cv;" ";12] endof
> case subfield[cv;" ";11]<>" " of subfield[cv;" ";11] endof
> case subfield[cv;" ";10]<>" " of subfield[cv;" ";10] endof
> case subfield[cv;" ";9]<>" " of subfield[cv;" ";9] endof
> case subfield[cv;" ";8]<>" " of subfield[cv;" ";8] endof
> case subfield[cv;" ";7]<>" " of subfield[cv;" ";7] endof
> case subfield[cv;" ";6]<>" " of subfield[cv;" ";6] endof
> case subfield[cv;" ";5]<>" " of subfield[cv;" ";5] endof
> case subfield[cv;" ";4]<>" " of subfield[cv;" ";4] endof
> case subfield[cv;" ";3]<>" " of subfield[cv;" ";3] endof
> case subfield[cv;" ";2]<>" " of subfield[cv;" ";2] endof
> case subfield[cv;" ";1]<>" " of subfield[cv;" ";1] endof
> endcases
>
> Note : Add more lines to the formula (up to 45!) if needed, and put the  
> proper field as the case variable !
>
> Regards,
> Geert.
>
>
>
>
>
> On Wed, 12 Aug 2009 04:49:51 +0200, Brian Hancock  
> <[email protected]> wrote:
>   
>> Hi Malkie,
>> There are a number of things in DP, which are not straightforward,  
>> getting
>> the last word in a string is one. Many programming languages do not have  
>> the
>> power of many of DP's functions, but the have looping constructions, DO  
>> and
>> WHILE LOOPS, FOR NEXT loops etc. these allow you to iterate over sets and
>> lists. These looping structures are how many problems such as the last  
>> word
>> etc would be handled.
>>
>> But DP is extremely flexible and there is a very simple technique for
>> simulating such structures.
>>
>> I always have a panel in every application I write that has one record  
>> and
>> only one record.  This panel can be used at any point in the application  
>> to
>> be the target of a created sub report with a virtual link, you can even  
>> nest
>> sub reports to this panel several layers deep... to get complex  
>> structures
>>
>> So for the last word it is quite easy. You store the value to be parsed  
>> in
>> say RV1, you put in a sub report to do some looping, and set a loop  
>> variable
>> in say RV2, in this case 40 is enough you can only use the up to 78
>> character string for the subfield function.  You use a formula to extract
>> the RV2th
>>
>>
>>                          --Empty--
>> -------------------------REPORT BODY--------------
>> -----------------Store Value in Report Variable 1--
>> ....> RV1 contains the string or data file to find the last word
>> ....> eg "The quick brown fox jumps over the lazy dog"
>> ===============SUBREPORT LINK/PANEL: 0 xx =============
>> -------------------------FIRST PAGE HEADER--------------
>> -----------------Store Value in Report Variable 2--
>> ....> RV2 contains a loop variable, a counter
>> ....> eg 40 which is big enough here
>> -------------------------OTHER PAGE HEADER--------------
>>                          --Empty--
>> -------------------------TWO-LEVEL REPORT HEADER--------
>>                          --Empty--
>> -------------------------REPORT BODY--------------------
>> -----------------Store Value in Report Variable 3 --
>> ....> RV3  gets the RV2th field
>> ....> on the first loop when rv2 is 40 then it returns empty string
>> ....> but as rv2 reduces you get a value
>> -----------------Store Value in Report Variable 2 --
>> ....> RV2 decrements if the RV3 is an empty string, otherwise resets to 0
>> ....> IF length[RV3]=0 THEN RV2 - 1 ELSE 0 ENDIF
>> -----------------Repeat Record if True Is In Report Variable 2 --
>> ....> until it finds the a value it will keep looping until RV2 runs out
>> -------------------------TWO-LEVEL FOOTER---------------------------
>>                          --Empty--
>> -------------------------PAGE FOOTER--------------------------------
>>                          --Empty--
>> -------------------------FINAL FOOTER-------------------------------
>>                          --Empty--
>> =========================END OF SUBREPORT===========================
>> ....> RV3 contains the last word
>> -------------------------TWO-LEVEL FOOTER-----------------
>>
>> The same general technique can be used for many other similar processing
>> purposes.  One major use is for processing an unknown number of fields  
>> and
>> values in a web submitted form, which might be lines of say a delimited  
>> data
>> import from a web form.
>>
>> Brian
>>
>>
>> -----Original Message-----
>> From: [email protected]
>> [mailto:[email protected]] On Behalf Of Don Codling
>> Sent: Wednesday, 12 August 2009 5:30 AM
>> To: [email protected]
>> Subject: Re: [Dataperf] Extracting Words URGENT
>>
>> August 11, 2009
>>
>> Malkie, I don't think there is an easy way to do this, because DP does
>> not allow counting subfields backwards. So you need a formula like this,
>> in which the highest number equals the maximum number of words in the
>> target field. Of course each extra line requires an extra "ENDIF".
>>
>> If subfield[P2F3;" ";8 > "" then  subfield[P2F3;" ";8]
>> elseif  subfield[P2F3;" ";7] > "" then  subfield[P2F3;" ";7]
>> elseif  subfield[P2F3;" ";6] > "" then  subfield[P2F3;" ";6]
>> elseif  subfield[P2F3;" ";5] > "" then  subfield[P2F3;" ";5]
>> elseif  subfield[P2F3;" ";4] > "" then  subfield[P2F3;" ";4]
>> elseif  subfield[P2F3;" ";3] > "" then  subfield[P2F3;" ";3]
>> elseif  subfield[P2F3;" ";2] > "" then  subfield[P2F3;" ";2]
>> else P2F3
>> ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF
>>
>> REMEMBER, you have to use the F4 selection to put in meaningful field
>> names. Aside from that you can copy & paste this, as expanded for your
>> need, from your word processor.
>>
>> To get everything but the first word shoud be fairly easy. I have not
>> tested this, though.
>> cat.t[subfield[P2F3;" ";2]; subfield[P2F3;" ";3]; subfield[P2F3;" ";4];
>> subfield[P2F3;" ";5]; subfield[P2F3;" ";6]; subfield[P2F3;" ";7]; ...
>> subfield[P2F3;" ";17]]
>>
>> To get everything but the last word is harder. I have not tested this,
>> either. But try something like
>> cat.t[if subfield[P2F3;" ";2] = "" then "" else subfield[P2F3;" ";1]
>> endif; if subfield[P2F3;" ";3] = "" then "" else subfield[P2F3;" ";2]
>> endif; if subfield[P2F3;" ";4] = "" then "" else subfield[P2F3;" ";3]
>> endif;   ... {To the highest number of words in your field}]
>>
>> Don Codling
>> Windows XP home, SP3
>> 2 GBytes RAM
>>
>> [email protected] wrote:
>>     
>>> Hi Everyone;
>>>
>>> I desperately need your expertise. I would like to make a formula in a
>>> field (not in a report) that would automatically extract the last word  
>>> of
>>> another field, something like with a subfield or substring function or
>>> whatever. The amount of words in that field are not identical. It can
>>> vary between 2 and 10 or even more.
>>>
>>> Also, how would I extract all the words of a field besides the last
>>> word or besides the first word?
>>>
>>> Malkie
>>>
>>> _______________________________________________
>>> Dataperf mailing list
>>> [email protected]
>>> http://lists.dataperfect.nl/mailman/listinfo/dataperf
>>>
>>>
>>>       
>> _______________________________________________
>> Dataperf mailing list
>> [email protected]
>> http://lists.dataperfect.nl/mailman/listinfo/dataperf
>>
>> _______________________________________________
>> Dataperf mailing list
>> [email protected]
>> http://lists.dataperfect.nl/mailman/listinfo/dataperf
>>     
>
>
>
>   
_______________________________________________
Dataperf mailing list
[email protected]
http://lists.dataperfect.nl/mailman/listinfo/dataperf

Reply via email to