1

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; ? 任何帮助,将不胜感激。谢谢。

4

1 回答 1

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

如果您最终需要更复杂的替换逻辑,您还可以使用 egsprintf("%1.4f", $x)来获取特定的浮点数格式。

于 2013-11-27T23:50:21.333 回答