Ответ - нет: есть встроенная функция VBE, которая распознает ссылки, добавленные в проект, и создает псевдонимы во время выполнения (время выполнения VBE), если нет коллизий имен
. В случае конфликтов имен в вашем реестре все .
точки будут заменяться символами подчеркивания _
.
& raquo; ProgId
's & nbsp; (Programmatic Identifiers)
В COM он используется только в позднем связывании. Вот как вы делаете вызов для создания нового объекта
Dim myObj = CreateObject("TestNamespace.Test")
& raquo; EarlyBinding
и LateBinding
В раннем связывании вы указываете тип создаваемого объекта с помощью ключевого слова new
. Имя вашего объекта должно появиться в Intellisense VBA. Это не имеет никакого отношения к ProgId
. Чтобы получить фактическое пространство имен, используемое для вашего типа объекта, откройте Object Explorer
F2 и найдите его там
В этой статье объясните, где имена взяты из раздела Early Binding используют ту же ссылку для . Когда использовать позднюю привязку
для раздела программных идентификаторов MSDN, см. this
Хотя я знаю, что вы просите улучшить свой код. ИМХО лучшим подходом будет использование функции printf
, и вы можете избежать использования слишком большого количества переменных, если они есть, только если у вас нет большой программы, в которой нам может понадобиться использовать эти переменные (которые мы получаем из значений столбцов / полей) позже в программе.
awk '{printf("%d,%d,%d,%d,%s,%s,%d,%d,%d,%d\n",\
$1,$2,$3,$4,\
$3+$(NF-1)>101?"AAA":$3+$(NF-1),\
$3+$NF>104?"BBB":$3+$NF,\
$2+100,$5,$6,$2+5000+$3)
}' Input_file
Вывод будет следующим.
3141,37150,100,10100,101,104,37250,1,4,42250
3141,37201,100,12100,101,104,37301,1,4,42301
3144,37471,100,14100,AAA,BBB,37571,2,5,42571
3141,37471,100,14100,100,BBB,37571,0,6,42571
3141,37471,100,14100,AAA,BBB,37571,5,6,42571
3141,37471,100,14100,101,BBB,37571,1,7,42571
3142,37471,100,14100,AAA,BBB,37571,3,8,42571
3143,37471,100,14100,101,101,37571,1,1,42571
РЕДАКТИРОВАТЬ: Исправлена попытка OP здесь.
Исправленное кодовое решение OP выглядит следующим образом:
awk '{
tt1 = $1
tt2 = $2
tt3 = $3
tt4 = $4
tt5 = $5
tt6 = $6
x1 = tt3 + tt5
x2 = tt3 + tt6
x3 = tt3 + tt2
x5= x3 + 5000
if(x1>101){x1="AAA"}
if(x2>104){x2="BBB"}
printf("%d,%d,%d,%d,%s,%s,%d,%d,%d,%d\n", tt1,tt2,tt3,tt4,x1,x2,x3,tt5,tt6,x5)}' Input_file
Вывод будет следующим.
3141,37150,100,10100,101,104,37250,1,4,42250
3141,37201,100,12100,101,104,37301,1,4,42301
3144,37471,100,14100,AAA,BBB,37571,2,5,42571
3141,37471,100,14100,100,BBB,37571,0,6,42571
3141,37471,100,14100,AAA,BBB,37571,5,6,42571
3141,37471,100,14100,101,BBB,37571,1,7,42571
3142,37471,100,14100,AAA,BBB,37571,3,8,42571
3143,37471,100,14100,101,101,37571,1,1,42571
Исправлены проблемы в коде OP:
1 - Удалено %5d
и изменено на %d
для удаления ненужных пробелов из десяти цифр .
2 - фиксированные разделители в printf
изменили их на ,
между ними.
3- Удалена переменная x6
, кажется, она НИКОГДА не использовалась, и изменила ее на x5
.
4- изменен синтаксис условия if
. Кажется, синтаксис НЕ был правильным, поскольку он был изменен с if{.....)
на if(....)
.
5- Удален дополнительный awk
, который НЕ использовался после вышеуказанных изменений в коде.