非常新的perl,我只是想修改文本文件中特定行的值。该行写道:
1.0040 1.0033 1.0021 0.9997 0.9997 0.9997
我想将1.0000替换为小于1的任何值,但仍将所有值保持为1或更大,并将所有数字保留在文本文件中的“原始”位置(包括修改后的位置)。有时需要进行可视化检查,如果修改后的文件中的所有内容都在同一个位置,则会更容易。新行应为:
1.0040 1.0033 1.0021 1.0000 1.0000 1.0000
我可以采取以下措施: $ _ = ~s / [只需更换少于1的值的一些逻辑] /1.0000/g; ? 任何帮助,将不胜感激。感谢。
答案 0 :(得分:1)
当然,并不难。 /e
修饰符允许您指定一个表达式,其结果将用作s///
中的替换。你可以在那里放一个条件:
s {
([\d\.]+) # Given some floating-point number,
} {
$1 < 1.0 ? "1.0000" : $1 # replace iff less than 1.0.
}xge;
压扁:
s/([\d\.]+)/$1 < 1 ? "1.0000" : $1/ge
如果您最终需要更复杂的替换逻辑,您也可以使用例如sprintf("%1.4f", $x)
获取特定的浮点数格式。