ReplaceImage (Stringlist function): Difference between revisions
Jump to navigation
Jump to search
m (syntax diagram, tags and links) |
m (syntax diagram, tags and links) |
||
Line 24: | Line 24: | ||
<p class="code">image cust | <p class="code">image cust | ||
<p class="code">ssn is string len 10 | |||
name is string len 20 | |||
bdate is string len 8 | |||
</p> | |||
end image | end image | ||
<p class="code">... | |||
</p> | |||
%list = new | %list = new | ||
repeat forever | repeat forever | ||
<p class="code">read image cust | |||
if $status then | |||
loop end | |||
end if | |||
%n = %list:findImageItem(%cust:ssn) | |||
if %n then | |||
%list:replaceImage(%n, 'CUST') | |||
else | |||
%list:addimage('CUST') | |||
end if | |||
</p> | |||
end repeat | end repeat | ||
</p> | </p> | ||
Line 50: | Line 53: | ||
repeat forever | repeat forever | ||
<p class="code">... | |||
%n = %list:findImageItem(%cust:ssn) | |||
if %n then | |||
%list:replaceImage(%n) | |||
else | |||
%list:addimage | |||
end if | |||
</p> | |||
end repeat | end repeat | ||
</p> | </p> |
Revision as of 22:35, 6 February 2011
Replace Stringlist item with an image (Stringlist class)
This callable method replaces a Stringlist item with the contents of an image.
Syntax
[%rc =] sl:ReplaceImage( itemNum, [imageName])
Syntax terms
%rc | A numeric variable that is set to 0 if the new item length is the same as the replaced item length, 1 if it is shorter, or 2 if it is longer. |
---|---|
sl | A Stringlist object. |
itemNum | The number of the item that the image is to replace. |
imageName | A string that contains the name of an image. This is an optional argument if an image has been associated with the Stringlist via the BindImage. Otherwise, it is a required argument. |
Usage notes
- All errors in ReplaceImage result in request cancellation.
- ReplaceImage is extremely efficient if the Stringlist item size is not being changed (return value for ReplaceImage of 0), fairly efficient when a Stringlist item is being replaced with a shorter string (return value of 1), and can be fairly expensive when a Stringlist item is being replaced with a longer string (return value of 2). Replacement with a longer string can be expensive because it can result in the splitting of a Stringlist leaf page. Once a leaf page is split, it will not be merged back together, even if subsequent RemoveItem invocations make this possible. Because of this leaf-page splitting, heavy use of ReplaceImage calls that increase Stringlist item size (and Insert and RemoveItem) can result in "sparse" Stringlists which place an unnecessary burden on the buffer pool and CCATEMP. Such heavy use can also result in an inability to add an item to the end of the Stringlist (via Add) because of a full pointer page, even though the Stringlist is nowhere near the theoretical capacity for a Stringlist. Stringlist compression can be achieved using the CopyItems.
Examples
- The following example demonstrates how ReplaceImage can be used to maintain the last copy of an image for a particular ID in a Stringlist.
image cust
ssn is string len 10 name is string len 20 bdate is string len 8
end image
...
%list = new
repeat forever
read image cust if $status then loop end end if %n = %list:findImageItem(%cust:ssn) if %n then %list:replaceImage(%n, 'CUST') else %list:addimage('CUST') end if
end repeat
Here is a neater and more efficient way of coding this:
%list:bindimage('CUST') repeat forever
... %n = %list:findImageItem(%cust:ssn) if %n then %list:replaceImage(%n) else %list:addimage end if
end repeat
In this example, BindImage associates the image with the Stringlist, eliminating the need to specify the image name on the ReplaceImage.