Format Arrays
Bob Sneidar
bobsneidar at iotecdigital.com
Thu Mar 1 15:06:08 EST 2018
Hi all.
Ever queried or updated an SQL database with float column types, and noted to your dismay that float values truncate leading AND trailing values? So now when you want to put that data into a datagrid, 800.00 becomes 800, 495.60 becomes 495.6. Wouldn't it be great if there was a command that went through all those arrays in the datagrid data and formatted the float values the way you want? Well now you can!
Right now it only calls formatMoney (which I have included and because that is what I needed it for) but add your own formatting in the switch statement and call your own functions. A great example would be retrieving sql datetime formats and converting them to another livecode date format before populating your datagrid (or anything else really).
aArray is obviously an array, but can be a single array or an array of arrays (but not mixed). pFormat is how you want to format the values, pKeyList is which array keys you want to format, and pType is the kind of array you are passing (record or data).
Anyone who wants to tack on their own formatting can chime in. Actually, this would be a great open source github project!
on formatArray @aArray, pFormat, pKeyList, pType
if pType is "record" then
put aArray into aArrayRecords [1]
else -- pType is "data" (array of arrays)
put aArray into aArrayRecords
end if
put the keys of aArrayRecords into tArrayKeys
sort lines of tArrayKeys numeric ascending
repeat for each line tRecord in tArrayKeys
put aArrayRecords [tRecord] into aRecord
put the keys of aRecord into tRecordKeys
sort lines of tRecordKeys numeric ascending
put (char 1 of tRecordKeys is "@") into IsRecord
repeat for each item tKey in pKeyList
put aRecord [tKey] into tValue
switch pFormat
case "money"
put formatMoney(tValue, false) into tValue
break
end switch
if isRecord then
sqlrecord_set aRecord, tKey, tValue
else
put tValue into aRecord [tKey]
end if
end repeat
put aRecord into aArrayRecords [tRecord]
end repeat
-- convert back to passed array
if pType is "record" then
put aArrayRecords [1] into aArray
else
put aArrayRecords into aArray
end if
end formatArray
function formatMoney theValue, tUseSymbols
-- strip out monetary symbols
replace "$" with empty in theValue
replace "¢" with empty in theValue
switch
case theValue = 0 or theValue >= 1
put "$%1.2f" into tFormatString
if tUseSymbols is false then replace "$" with empty in tFormatString
put format(tFormatString, theValue) into theValue
break
case theValue >= 0
put "%#.2f¢" into tFormatString
if tUseSymbols is false then replace "¢" with empty in tFormatString
put format(tFormatString, theValue) into theValue
break
case theValue <= -1 -- why am I doing this??
replace "-" WITH empty in theValue
put format("($%1.2f)", theValue) into theValue
break
case theValue < 0 -- why am I doing this??
replace "-" WITH empty in theValue
put format("(%#.2f¢)", theValue) into theValue
break
end switch
return theValue
end formatMoney
More information about the use-livecode
mailing list