如何计算 XML 文件中的数字(字符串格式)
How to calculate numbers(in string format) in the XML file
我有以下 XML 数据,我想计算一下
<data>
<numbers>
<value>1 - 3</value>
</numbers>
<numbers>
<value>5 - 10</value>
</numbers>
<numbers>
<value>2.4 +/- 3.2</value>
</numbers>
<numbers>
<value>10</value>
</numbers>
<numbers>...</numbers>
<numbers>...</numbers>
<numbers>...</numbers>
...
</data>
如上,有两个问题,一个是值是字符串格式,另一个问题是值的类型不同,有些使用+/-,有些使用范围。
逻辑上我知道该怎么做,只需使用 if-else 来检测不同的格式,例如:
if (tag "value" contains "+/-"):
Separate the string by "+/-", convert the number from string to number
use first number + last number to find the biggest number
use first number - last number to find the smallest number
if (tag "value" contains "-"):
Separate the string by "-", convert the number from string to number
first number is smallest number, last number is biggest number
if (tag "value" contains a "whole number"):
Just convert it into number format and done.
编程是这样的,我是一名学生,目前正在自学R语言,我知道如何去做,但我不知道如何编码,也许有有一些库或函数可以做到这一点。
如果你知道怎么做,请帮助我,非常感谢,我非常感谢你的帮助:)
h <- "<data>
<numbers>
<value>1 - 3</value>
</numbers>
<numbers>
<value>5 - 10</value>
</numbers>
<numbers>
<value>2.4 +/- 3.2</value>
</numbers>
<numbers>
<value>10</value>
</numbers>
</data>
"
h <- XML::xmlParse(h)
v <- XML::xpathSApply(h, "//value", XML::xmlValue)
lapply(v, function(x) {
if (stringr::str_detect(x,"\+/-")) {
num1 <- stringr::str_extract(x, ".+(?=\+/-)")
num2 <- stringr::str_extract(x, "(?<=\+/-).+")
list(
"+" = sum(as.numeric(c(num1, num2))),
"-" = diff(as.numeric(c(num1, num2)))
)
} else {
eval(parse(text=v[1]))
}
})
我有以下 XML 数据,我想计算一下
<data>
<numbers>
<value>1 - 3</value>
</numbers>
<numbers>
<value>5 - 10</value>
</numbers>
<numbers>
<value>2.4 +/- 3.2</value>
</numbers>
<numbers>
<value>10</value>
</numbers>
<numbers>...</numbers>
<numbers>...</numbers>
<numbers>...</numbers>
...
</data>
如上,有两个问题,一个是值是字符串格式,另一个问题是值的类型不同,有些使用+/-,有些使用范围。
逻辑上我知道该怎么做,只需使用 if-else 来检测不同的格式,例如:
if (tag "value" contains "+/-"):
Separate the string by "+/-", convert the number from string to number
use first number + last number to find the biggest number
use first number - last number to find the smallest number
if (tag "value" contains "-"):
Separate the string by "-", convert the number from string to number
first number is smallest number, last number is biggest number
if (tag "value" contains a "whole number"):
Just convert it into number format and done.
编程是这样的,我是一名学生,目前正在自学R语言,我知道如何去做,但我不知道如何编码,也许有有一些库或函数可以做到这一点。
如果你知道怎么做,请帮助我,非常感谢,我非常感谢你的帮助:)
h <- "<data>
<numbers>
<value>1 - 3</value>
</numbers>
<numbers>
<value>5 - 10</value>
</numbers>
<numbers>
<value>2.4 +/- 3.2</value>
</numbers>
<numbers>
<value>10</value>
</numbers>
</data>
"
h <- XML::xmlParse(h)
v <- XML::xpathSApply(h, "//value", XML::xmlValue)
lapply(v, function(x) {
if (stringr::str_detect(x,"\+/-")) {
num1 <- stringr::str_extract(x, ".+(?=\+/-)")
num2 <- stringr::str_extract(x, "(?<=\+/-).+")
list(
"+" = sum(as.numeric(c(num1, num2))),
"-" = diff(as.numeric(c(num1, num2)))
)
} else {
eval(parse(text=v[1]))
}
})