I think the issue is in one of your statements:
set fieldTwo [lreplace $fieldTwo 0 2 $drugData^$description^$code]
Using the lreplace in the case doesn’t make sense, as fieldTwo contains only one element as it was set – ‘set fieldTwo [lindex $fieldList 2]’
If you would change the ‘re-set’ of fieldTwo to:
‘set fieldTwo $drugData^$description^$code’
it may work more as you are intending.
Or, if you want to use lreplace commands, since it looks like you are only interested in the first subfield of field 2, only work on that one. That is, don’t even worry about setting and replacing the other subfields, since they are not affected. You split field 2 into subfields, take the first subfield, work on it, and only replace that subfield. Then join it all back together.