我正在使用PowerShell和MS Access。
我想将数学因子应用于此列值中管道内的内容。
实施例。给定系数为4时,-100.0必须变为-400.0且100.0必须变为400.0。
我只需要修改" Min_Value"和" Max_Value"令牌(硬编码)。
FiledValue来自数据库(有多行)。
FieldValue并不总是与此示例完全相同,但令牌模式始终与Ex相同。 MIN_VALUE = | ..... |
function Test
{
$Factor = 4
# Hard-coded SQL query result
$FieldValue = "Min_Value=|-100.0|;Max_Value=|100.0|;COMM_ID1=|1|;"
# Compare this value with a regular expression (Issue A: This doesn't work because of the minus sign and decimal)
if ($FieldValue -match "Min_Value=\|([0-9]+)\|;Max_Value=\|([0-9]+)\|;")
{
# Trying to retreive -100.0 here...(Issue B: this doesn't work). I beleive I can only specify ||, not Min_Value=||
$TokenMinValue = $FieldValue.Split('Min_Value=||')[1]
$TokenMaxValue = $FieldValue.Split('Max_Value=||')[1]
# Trying to take the token (-100.0), multiply it by 4 and write it back where I found it (Issue C: this obvioulsy doesn't work)
$Result = $FieldValue -replace "$regex",($TokenMinValue * $Factor)
$Result = $FieldValue -replace "$regex",($TokenMaxValue * $Factor)
#The goal is for $Result to equal "Min_Value=|-400.0|;Max_Value=|400.0|;COMM_ID1=|1|;"
}
}
答案 0 :(得分:1)
您没有指定您的DBMS,因此这是使用>>> stats.cauchy.fit(arr, floc=10)
(10, 2.4905786982353786)
>>> stats.norm.fit(arr, floc=10)
(10, 3.3686549590571668)
的解决方案。至少你可以遵循它背后的逻辑:
Postgres
魔术就是这样:
select
concat(
replace(
concat('Min_Value=|', string_agg(intval,';')), ';', '|;Max_Value=|'),
'|;')
from (
select (unnest(regexp_matches('Min_Value=|10|;Max_Value=|100|;', 'Min_Value=\|([0-9]+)\|;Max_Value=\|([0-9]+)\|;'))::int*4)::TEXT as intval
) foo;
从输入字符串中提取两个整数regexp_matches
将数组解压缩为两个单独的行unnest
并乘以因子Integer
4
和string_agg
作为分隔符,使一个字符串行包含由;
分隔的整数;
在开头添加concat
,因此字符串现在为Min_Value=|
Min_Value=|40;400
并将replace
替换为下一部分 - ;
,以便字符串现在为|;Max_Value=|
Min_Value=|40|;Max_Value=|400
将concat
附加到字符串<强>输入:强>
|;
<强>结果:强>
Min_Value=|10|;Max_Value=|100|;