Вообразите что-то как
exp(49/200)+(x-49/200)
Я хочу передать как аргумент функции "roundn" безотносительно операции, которая не является addtion или вычитанием, Таким образом, мое выражение стало
roundn(exp(roundn(49/200,n)),n)+(x - roundn(49/200,n)
Хорошо выражение, которым я хочу управлять, является этим:
exp(49/200)+exp(49/200)*(x-49/200)+1/2*exp(49/200)*(x-49/200)^2+1/6*exp(49/200)*(x- 49/200)^3+1/24*exp(49/200)*(x-49/200)^4+1/120*exp(49/200)*(x-49/200)^5+1/720*exp(49/200)*(x-49/200)^6+1/5040*exp(49/200)*(x-49/200)^7+1/40320*exp(49/200)*(x-49/200)^8+1/362880*exp(49/200)*(x-49/200)^9+1/3628800*exp(49/200)*(x-49/200)^10+1/39916800*exp(49/200)*(x-49/200)^11
Я ищу метод (Которые включают любую программу), не базирующийся в программировании языка, столько же пакета или somithing как этот...
Попробуйте это:
ro='roundn(' # roundn open
rc=',n)' # roundn close
fun='exp\('
expression='exp(49/200)+(x-49/200)'
echo "$expression" |
perl -pe "s/$fun[^)]*\K\)/)$rc/g; s/(?<!\^)[0-9\/*]+[0-9]/$ro\$&$rc/g; s/$fun[^)]*/$ro\$&/g"
который должен дать Вам:
roundn(exp(roundn(49/200,n)),n)+(x-roundn(49/200,n))
Ваше более длительное выражение должно привести к:
roundn (exp (roundn (49/200, n)), n) +roundn (exp (roundn (49/200, n)), n) *
(x-roundn (49/200, n)) +roundn (1/2, n) *roundn (exp (roundn (49/200, n)), n) *
(x-roundn (49/200, n)) ^2+roundn (1/6, n) *roundn (exp (roundn (49/200, n)), n) *
(x-roundn (49/200, n)) ^3+roundn (1/24, n) *roundn (exp (roundn (49/200, n)), n) *
(x-roundn (49/200, n)) ^4+roundn (1/120, n) *roundn (exp (roundn (49/200, n)), n) *
(x-roundn (49/200, n)) ^5+roundn (1/720, n) *roundn (exp (roundn (49/200, n)), n) *
(x-roundn (49/200, n)) ^6+roundn (1/5040, n) *roundn (exp (roundn (49/200, n)), n) *
(x-roundn (49/200, n)) ^7+roundn (1/40320, n) *roundn (exp (roundn (49/200, n)), n) *
(x-roundn (49/200, n)) ^8+roundn (1/362880, n) *roundn (exp (roundn (49/200, n)), n) *
(x-roundn (49/200, n)) ^9+roundn (1/3628800, n) *roundn (exp (roundn (49/200, n)), n) *
(x-roundn (49/200, n)) ^10+roundn (1/39916800, n) *roundn (exp (roundn (49/200, n)), n) *
(x-roundn (49/200, n) ^11
Объяснение
/exp\([^)]*\K\)/)$rc/g
- закройте exp (), добавьте roundn близко \K
делает "exp (" соответствие нулевой ширины поэтому, только закрытие paren заменяетсяs/(?<!\^)[0-9\/*]+[0-9]/$ro\$&$rc/g
- строки цифр с mult и отделением, окружите открытым roundn и roundn близко s/exp\([^)]*/$ro\$&/g
- откройте exp (), добавьте открытый roundn $ro
, $rc
и $fun
переменные оболочки $&
содержит все соответствие за исключением частей нулевой ширины Не было бы слишком трудно сделать эту работу, если существует больше чем одна функция. Однако это, вероятно, полностью развалится, если они будут вложены.
Править:
Вот версия сценария Perl:
$ro = "roundn(";
$rc = ",n)";
$fun = "exp\\(";
while (<>) {
s/$fun[^)]*\K\)/)$rc/g;
s/(?<!\^)[0-9\/*]+[0-9]/$ro$&$rc/g;
s/$fun[^)]*/$ro$&/g;
print
}
Выполните его как это:
perl script.pl < data.txt
Ну, я пытаюсь выполнить Ваш код... Я делаю небольшую программу (practicalcase1.pl) с первым абзацем кода, который Вы написали:
ro='roundn(' # roundn open
rc=',n)' # roundn close
fun='exp\('
expression='exp(49/200)+(x-49/200)'
echo "$expression" |
perl -pe "s/$fun[^)]*\K\)/)$rc/g; s/(?<!\^)[0-9\/*]+[0-9]/$ro\$&$rc/g; s/$fun[^)]*/$ro\$&/g"
Но я получаю некоторые сообщения на cmd окон:
Semicolon seems to be missing at practicalcase1.pl line 1
Semicolon seems to be missing at practicalcase1.pl line 2
Semicolon seems to be missing at practicalcase1.pl line 3
Semicolon seems to be missing at practicalcase1.pl line 4
String found where operator expected at practicalcase1.pl line 5, near "echo "$expression""
(Do you need to predeclare echo?)
String found where operator expected at practicalcase1.pl line 6, near "pe "s/$fun[^)]*\K\)/)$rc/g; s/(?<!\^)[0-9\/*]+[0-9]/$ro\$&$rc/g""
(Do you need to predeclare pe?)
Can´t modify constant item in scalar assigment at practicalcase1.pl line 2, near "rc"
syntax error at practicalcase1.pl line 2, near "rc"
Execution of practicalcase1.pl aborted due to compilation errors.
То, что я мог сделать с ошибками типа "точку с запятой, кажется..."? То, что это - supossed, я имею отношение к ошибке "Строка, нашло где оператор..."? Что относительно "Не может изменить постоянный объект в скаляре..."? Что относительно "синтаксической ошибки в practicalcase1.pl line2..."
Огромное спасибо!