Как запустить программу с параметрами (выберите BASIC)

#pick

#выберите

Вопрос:

В исходном коде Pick BASIC я вижу такие строки, как

 CALL SOMEPROGRAM (PARAM1, PARAM2)
  

Как я могу вызвать ту же строку из командной строки TCL? Я пробовал варианты следующего, но, похоже, ничего не работает.

 SOMEPROGRAM ('1','2')
  

Единственный способ, который я нашел, это написать и скомпилировать программу с помощью однострочной команды, а затем запустить эту программу.

Комментарии:

1. Как вызвать эту программу из обычной системной командной строки?

2. Я просто ввожу название программы. Моя программа называется called CALLERPROGRAM и она содержит единственную строку CALL SOMEPROGRAM ('1','2')

Ответ №1:

Если это была ваша обычная:

 SUBROUTINE REALPROG(A,B)
PRINT "A is ":A
PRINT "B is ":B
END
  

Чтобы вызвать ее из командной строки, вам нужно создать эту процедуру:

 PROGRAM WRAPPERPROG
COMMAND.RECEIVED = SENTENCE()
VAR1 = FIELD(COMMAND.RECEIVED,' ',2)
VAR2 = FIELD(COMMAND.RECEIVED,' ',3)
CALL REALPROG(VAR1, VAR2)
END
  

Предполагая, что вы ввели это из командной строки TCL / ECL:

 WRAPPERPROG DOG CAT
  

VAR1 будет DOG, а VAR2 будет CAT

… и вызвал бы REALPROG с этими параметрами, и вы должны увидеть

 A is DOG
B is CAT
  

Ответ №2:

Tcl может вызвать ваш общий программный файл в качестве подпроцесса с помощью exec , но превратить это в вызов программы и обработку правильных аргументов зависит от вашей программы.

Код Tcl для запуска программы, вероятно, будет выглядеть примерно так:

 exec {*}[auto_execok CALLERPROGRAM]
  

Если бы вы передавали аргументы 1 и 2 снова, вы бы сделали это:

 exec {*}[auto_execok CALLERPROGRAM] 1 2
  

Опять же, здесь не сказано, как эти значения попадают из командной строки в подпрограмму Pick Basic. Вам нужно обратиться к документации Pick о том, как это сделать. Но я знаю (и проверил), что Tcl определенно правильно их предоставил…

Комментарии:

1. «TCL» в контексте ВЫБОРА означает язык управления терминалом, см. metacpan.org/pod/distribution/Pick-TCL/lib/Pick /… , не язык командной строки инструмента, поэтому тег tcl вводит в заблуждение.

Ответ №3:

В Pick BASIC операторы вызова используются для вызова подпрограмм, и они не могут быть выполнены напрямую из TCL. Подпрограммы обозначаются путем установки первого слова в первой строке программы на SUBROUTINE.

Вы можете запускать «программы» из TCL. Они не включают ПОДПРОГРАММУ в верхней части исходного кода. В некоторых вариантах выбора BASIC вам может потребоваться включить PROGRAM, но я думаю, что большинству это не требуется (я знаю, что D3 этого не делает). Эти программы можно запускать из TCL, но они не получают параметры командной строки, передаваемые автоматически, как это делают подпрограммы. Я думаю, вы можете использовать SENTENCE () практически в любом варианте Pick BASIC для получения параметров командной строки.

Вот пример программы, которая будет печатать аргументы командной строки:

 PRINT SENTENCE()
END
  

Вы могли бы использовать это для создания программы, которая будет принимать аргументы командной строки и передавать их в подпрограмму, чтобы сделать что-то для вас.

Ответ №4:

Я буквально набирал какой-то подробный ответ, но на ваш вопрос был дан ответ. Вы не можете напрямую вызвать подпрограмму, вам нужно вызвать программу, которая вызывает подпрограмму. Кроме того, подпрограммы — хороший способ отделить код от основной программы, чтобы уменьшить беспорядок, но они не всегда необходимы. Другими методами, которые вы можете использовать, являются функции или GOSUBS / GOTO. Это пример перехода ниже..

 VAR = 'HELLO'
GOTO 10:

10:
CRT VAR
  

из TCL вы вызовете имя своей программы, и весь этот код будет выполнен без вызова другой программы.
Результатом будет строка hello.

Ответ №5:

Более 30 лет назад я написал утилиту для решения этой проблемы. Другие основы (QB, VB, Дартмут) имеют единственную командную строку. Вы либо вводите строки в программу, либо обрабатываете однострочные запросы. Выбрать не удалось.

Я создал элемент MD под названием PRINT. Затем запускается программа под названием BP PRINT, которая берет всю строку TCLREAD целиком, записывает ее в другое программное пространство под названием BP PPRINT, компилирует ее и затем запускает.

Невероятно полезный. Таким образом, в TCL эти команды будут работать:

ВЫВЕСТИ; X=1; Y=2 ; ВЫЗВАТЬ SOMESUB(X,Y)

ВЫВЕДИТЕ; ДЛЯ I=ОТ 1 ДО 12 ; ВЫВЕДИТЕ (I*28) «DMA»; ДАЛЕЕ я

ПЕЧАТЬ; ОТКРОЙТЕ «CUST», ЗАТЕМ ПРОЧИТАЙТЕ ИМЯ V ИЗ «1234», 1 ЗАТЕМ ВВЕДИТЕ ИМЯ

ВЫВЕДИТЕ OCONV(«12345678», «MD2Z, $»)

ВЫВЕСТИ ДАТУ()

В принципе, все, что может быть запрограммировано в пределах одной строки кода, может быть введено в TCL таким образом. Любые инструкции IF или ELSE должны быть выполнены в одной строке. Отлично подходит для тестирования.

Должно быть частью каждой реализации Pick «из коробки».

Марк Джонсон