我想来自:
0010|C|||N55555555|E0222222220010
以下内容:
0010|C|||N55555555|E022222222|1.0
最后四位数字代表一位小数位数,例如它可能是:
0010|C|||N55514200|E0222222220300
我希望将命令转换为:
0010|C|||N55555555|E022222222|30.0
我希望输入一个命令来批量转换这些字符串。任何帮助将不胜感激!
答案 0 :(得分:1)
您可以使用sub-replace-expression
(请参阅:help sub-replace-\=
):
:%s#\d\{4}$#\=printf('|%.1f', str2nr(submatch(0)) / 10.0)#
那是:
:%s#
:为文件中的每一行执行此替换(使用#
作为分隔符,因为我需要在/
部分中使用\=
\d\{4}$
:匹配该行的最后四位数字 \=
:解释以下内容:
printf('|%.1f
:打印|
后跟1精度浮点数(第二个参数)str2nr(submatch(0))
:将匹配的4位数组转换为十进制数(删除尾随0以避免将0XYZ
读为八进制值)/ 10.0
:将值除以10 这转换
0010|C|||N55555555|E0222222220010
0010|C|||N55514200|E0222222220300
0010|C|||N55514200|E0222222220301
0010|C|||N55514200|E0222222229301
到
0010|C|||N55555555|E022222222|1.0
0010|C|||N55514200|E022222222|30.0
0010|C|||N55514200|E022222222|30.1
0010|C|||N55514200|E022222222|930.1