Сделайте операцию в переменной, прежде чем печатать вывод

Ответ - нет: есть встроенная функция 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

0
задан OXXO 23 February 2019 в 12:01
поделиться

1 ответ

Хотя я знаю, что вы просите улучшить свой код. ИМХО лучшим подходом будет использование функции 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, который НЕ использовался после вышеуказанных изменений в коде.

0
ответ дан RavinderSingh13 23 February 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: