Что нового

Запуск программы с параметром, переделать в функцию

reset86

Новичок
Сообщения
47
Репутация
0
Всем привет. Как из этого сделать функцию?
Цифра ключа соответствует номеру выполняемой функции, не хочу плодить однотипный код, но в голову не приходит как из этого сделать функцию.

Код:
$spr = Chr(1)
$Esc = '[\\/-]?'

Switch $CmdLine[0]
Case 1 To 99
$ParamLine = $spr & _ArrayToString($CmdLine, $spr, 1) & $spr

$aTmp = StringRegExp($ParamLine, '(?i)' & $spr & $Esc & '(1)' & $spr, 3)
If Not @error And UBound($aTmp) = 1 Then
_1()
EndIf

$aTmp = StringRegExp($ParamLine, '(?i)' & $spr & $Esc & '(2)' & $spr, 3)
If Not @error And UBound($aTmp) = 1 Then
_2()
EndIf

Exit
EndSwitch
 
Автор
reset86

reset86

Новичок
Сообщения
47
Репутация
0
Я его поджал немного.
Код:
Switch $CmdLine[0]
Case 1 To 99
$ParamLine = _ArrayToString($CmdLine, 1) & Chr(1)

$aTmp = StringRegExp($ParamLine, '-' & '(1)', 3)
If Not @error And UBound($aTmp) = 1 Then
_1()
EndIf

$aTmp = StringRegExp($ParamLine, '-' & '(2)', 3)
If Not @error And UBound($aTmp) = 1 Then
_2()
EndIf

Exit
EndSwitch



Добавлено:
Сообщение автоматически объединено:

Я так понял, мне StringRegExp надо убрать, а использовать сразу $ParamLine.
 
A

Alofa

Гость
Приведите пример ключа запуска вашей программы.
А лучше отвлекитесь от этого кода и расскажите чего вы добиваетесь?
 

СН3СН2ОН

Знающий
Сообщения
78
Репутация
12
Код:
Func _1()
	ConsoleWrite("Один" & @CRLF)
EndFunc

Call("_1")

Видимо этого
 
Автор
reset86

reset86

Новичок
Сообщения
47
Репутация
0
Код:
$aTmp = StringRegExp($ParamLine, '-' & '(1)', 3)
If Not @error And UBound($aTmp) = 1 Then
_1()
EndIf

Ключ -1 вот тут ($ParamLine, '-' & '(1)', 3)
функция _1


Добавлено:
Сообщение автоматически объединено:

Смысл в том, что я запускаю программу с ключом -1, выполняется функция _1, если запускаю с ключом -2, выполняется функция _2. Так сейчас и работает, но приходится повторять одно и тоже 100 раз.


Добавлено:
Сообщение автоматически объединено:

Код:
$spr = Chr(1)
Switch $CmdLine[0]
Case 1 To 999
$ParamLine = $spr & _ArrayToString($CmdLine, $spr, 1) & $spr

$aTmp = StringRegExp($ParamLine, '-' & '(1)' & $spr, 3)
If Not @error And UBound($aTmp) = 1 Then
_1()
EndIf

$aTmp = StringRegExp($ParamLine, '-' & '(2)' & $spr, 3)
If Not @error And UBound($aTmp) = 1 Then
_2()
EndIf

$aTmp = StringRegExp($ParamLine, '-' & '(3)' & $spr, 3)
If Not @error And UBound($aTmp) = 1 Then
_3()
EndIf

Exit
EndSwitch


Func _1()
EndFunc

Func _2()
EndFunc

Func _3()
EndFunc



Добавлено:
Сообщение автоматически объединено:

СН3СН2ОН - это не то.
 
A

Alofa

Гость
А так не пойдет?
Код:
Switch $CmdLineRaw
   Case '-1'
      _1()
   Case '-2'
      _2()
EndSwitch
 
Автор
reset86

reset86

Новичок
Сообщения
47
Репутация
0
Нет, вы меня не понимаете. Я обращаюсь к программе с определенным ключом, например -1, программа должна понять что ключ -1, перенести ключ в переменную и из переменной подставить в номер функции и выполнить функцию _1.
Я изображения добавил, там схема.
 

Вложения

  • Схема.png
    Схема.png
    126.7 КБ · Просмотры: 10

axsmak

Знающий
Сообщения
32
Репутация
7
Код:
Global $g_sFuncList = "_1;_2;_3;_4;_5;"

If $CmdLine[0] > 0 Then
  Local $iParam = Int($CmdLine[1]) * (-1)
  Local $sFuncName = "_" & String($iParam)
  If StringInStr($g_sFuncList, $sFuncName & ";") Then Call($sFuncName)
EndIf

Func _1()
  ConsoleWrite("One" & @CRLF)
EndFunc

Func _2()
  ConsoleWrite("Two" & @CRLF)
EndFunc

Func _3()
  ConsoleWrite("Three" & @CRLF)
EndFunc

Func _4()
  ConsoleWrite("Four" & @CRLF)
EndFunc

Func _5()
  ConsoleWrite("Five" & @CRLF)
EndFunc



Добавлено:
Сообщение автоматически объединено:

Хотя можно и не плодить сотню функций, а сделать одну, в которую передавать параметр как аргумент. А там уже с помощью Switch Case выполнять требуемое
И отбросить "-" у параметра. Зачем он? "prog.exe 1" ничем не хуже "prog.exe -1"
Код:
If $CmdLine[0] > 0 Then
  _U($CmdLine[1])
EndIf

Func _U($iParam)
  Switch $iParam
    Case 1
      ConsoleWrite("One" & @CRLF)
    Case 2
      ConsoleWrite("Two" & @CRLF)
    Case 3
      ConsoleWrite("Three" & @CRLF)
    Case 4
      ConsoleWrite("Four" & @CRLF)
    Case 5
      ConsoleWrite("Five" & @CRLF)
  EndSwitch  
EndFunc

Компактнее получается
 
Автор
reset86

reset86

Новичок
Сообщения
47
Репутация
0
axsmak - спасибо, это то, что было нужно.
 
Верх