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