How To: Delete columns of data
Michael Doub
mikedoub at gmail.com
Fri Sep 5 14:37:47 EDT 2014
just to complete your library, here is a function that will extract the listed column in the order that you
specify but it does not modify the original data.
-= Mike
function extractColumns @pData,pColsToReturn,pDelim
-- Extract specified columns from a table in order
-- Syntax: extractColumns <data>,<cols>[,<delim>]
-- data: Specifies the data to parse.
-- cols: A comma separated list of columns or column ranges to be returned in order
-- for example "2,7,5"
-- or a accending column range: "3-5"
-- of a decending column range: "5-3"
-- or a combination "2,4-5,7,11-9"
-- delim: Optional column separator for example "," or "|"
-- if unspecified, defaults to tab.
-- based on a handler by Hugh Senior and Peter M. Brigham, Use-LC list
-- requires getItem()
if pColsToReturn = empty then return pData
repeat for each item pCol in pColsToReturn
if "-" is in pCol then
put getItem(pCol,1,"-") into firstColNbr
put getItem(pCol,2,"-") into lastColNbr
if firstColNbr < lastColNbr then
repeat with i = firstColNbr to lastColNbr
put i & comma after pColsToReturnExpanded
end repeat
else
repeat with i = firstColNbr down to lastColNbr
put i & comma after pColsToReturnExpanded
end repeat
end if
else
put pCol & comma after pColsToReturnExpanded
end if
end repeat
put char 1 to -2 of pColsToReturnExpanded into pColsToReturn
if pDelim = empty then put tab into pDelim
set the columnDelimiter to pDelim
split pData by column
put item 2 of extents(pData) into tMax
repeat for each item n in pColsToReturn
add 1 to x
put pData[n] into rData[x]
end repeat
combine rData by column
return rData
end extractColumns
On Sep 5, 2014, at 1:51 PM, Michael Doub <mikedoub at gmail.com> wrote:
> Here is an even more general version:
>
> function deleteColumns pData,pColsToDelete,pDelim
> -- delete specified columns from a table
> -- Syntax: deleteColumns <data>,<cols>[,<delim>]
> -- data: Specifies the data to parse.
> -- cols: A comma separated list of columns or column ranges to be removed,
> -- for example "2,5,7"
> -- or a column range: "3-5"
> -- or a combination "2,4-5,7,9-11,"
> -- delim: Optional column separator for example "," or "|"
> -- if unspecified, defaults to tab.
> -- based on a handler by Hugh Senior and Peter M. Brigham, Use-LC list
>
> -- requires getItem()
>
> if pColsToDelete = empty then return pData
> repeat for each item pCol in pColsToDelete
> if "-" is in pCol then
> put getItem(pCol,1,"-") into firstColNbr
> put getItem(pCol,2,"-") into lastColNbr
> repeat with i = firstColNbr to lastColNbr
> put i & comma after pColsToDeleteExpanded
> end repeat
> else
> put pCol & comma after pColsToDeleteExpanded
> end if
> end repeat
> put char 1 to -2 of pColsToDeleteExpanded into pColsToDelete
> if pDelim = empty then put tab into pDelim
> set the columnDelimiter to pDelim
> split pData by column
> put item 2 of extents(pData) into tMax
> repeat with n=1 to tMax
> if n is NOT among the items of pColsToDelete then
> add 1 to x
> put pData[n] into pData[x]
> end if
> end repeat
> repeat with n=x+1 to tMax
> delete local pData[n]
> end repeat
> combine pData by column
> return pData
> end deleteColumns
>
> function getItem tList,tIndex,tDelim
> -- returns item # tIndex of tList, given itemdelimiter = tDelim
> -- could just "get item tIndex of tList" in the calling handler but
> -- then have to set and restore the itemDelimiter, so this is less hassle
> -- defaults to tDelim = comma
>
> if tDelim = empty then put comma into tDelim
> set the itemdelimiter to tDelim
> return item tIndex of tList
> end getItem
>
>
>
> On Sep 5, 2014, at 10:58 AM, Peter M. Brigham <pmbrig at gmail.com> wrote:
>
>> Peter M. Brigham
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list