Понадобилось мне тут выполнить текстовое преобразование расчётного выражения в формат отличный от экселя.
При этом
23,21+-3*x^2+36*(25*x^1+36 *x^ 2)^3
должно превратиться в
23.21-3*pow(KKS,2)+36*pow((25*pow(KKS,1)+36*pow(KKS,2)),3)
т.е.
1. Возведение в степень надо прописывать как pow(x,2) вместо x^2 (степени до 9...)
2. По мелочи - заменить х на ККС (другое название аргумента), "+-" на "-", запятые на точки
Накидал небольшой код, всё работает но ощущение что изобретаю велосипед... Мысли есть, или и так пойдёт?
ПыСы думал в PQ глянуть... некогда
При этом
23,21+-3*x^2+36*(25*x^1+36 *x^ 2)^3
должно превратиться в
23.21-3*pow(KKS,2)+36*pow((25*pow(KKS,1)+36*pow(KKS,2)),3)
т.е.
1. Возведение в степень надо прописывать как pow(x,2) вместо x^2 (степени до 9...)
2. По мелочи - заменить х на ККС (другое название аргумента), "+-" на "-", запятые на точки
Накидал небольшой код, всё работает но ощущение что изобретаю велосипед... Мысли есть, или и так пойдёт?
ПыСы думал в PQ глянуть... некогда
| Код |
|---|
Public Function parsing_1(txt As String, x As String, kks As String) As String
Dim Mas(1 To 10000) As String
Dim i As Long, k As Long, k0 As Long, m As Long
Dim rez As String
txt = Replace(txt, " ", "")
txt = Replace(txt, ",", ".")
txt = Replace(txt, "+-", "-")
For i = 1 To Len(txt)
Mas(i) = Mid(txt, i, 1)
Next i
For i = 1 To UBound(Mas)
If Mas(i) = "^" Then
Mas(i) = ","
For k = UBound(Mas) - 2 To i + 1 Step -1
Mas(k + 2) = Mas(k + 1)
Next k
Mas(i + 2) = ")"
' Обработка степени числа, НЕ ВЫРАЖЕНИЯ
If Mas(i - 1) <> ")" Then
For k = i To 1 Step -1
If Mas(k) = "+" Or _
Mas(k) = "-" Or _
Mas(k) = "*" Or _
Mas(k) = "/" Or _
Mas(k) = "(" Then
k0 = k
Exit For
End If
Next k
For k = UBound(Mas) - 4 To k0 + 1 Step -1
Mas(k + 4) = Mas(k)
Next k
Mas(k0 + 1) = "p"
Mas(k0 + 2) = "o"
Mas(k0 + 3) = "w"
Mas(k0 + 4) = "("
End If
' Обработка степени ВЫРАЖЕНИЯ
If Mas(i - 1) = ")" Then
For k = i - 1 To 1 Step -1
If Mas(k) = ")" Then
m = m + 1
End If
If Mas(k) = "(" Then
m = m - 1
End If
If m = 0 Then
k0 = k
Exit For
End If
Next k
For k = UBound(Mas) - 4 To k0 Step -1
Mas(k + 4) = Mas(k)
Next k
Mas(k0 + 0) = "p"
Mas(k0 + 1) = "o"
Mas(k0 + 2) = "w"
Mas(k0 + 3) = "("
End If
End If
Next i
For j = 1 To UBound(Mas)
rez = rez & Mas(j)
Next j
parsing_1 = Replace(rez, x, kks)
End Function |
Изменено: - 13.02.2026 22:13:18
