加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Perl中用逗号分隔的列表替换字符串的一部分

发布时间:2020-12-15 23:22:58 所属栏目:大数据 来源:网络整理
导读:如果我有一个逗号分隔长度10个数字字符串的文件(例如0001010101)并且想要重新格式化字符串以用字母替换每个字符串的最后两个字符,其中01是A,依此类推,最多26个是Z是什么在Perl中执行此操作的方法是什么? 示例文件内容: 0109150103,1807111225,0305102306
如果我有一个逗号分隔长度10个数字字符串的文件(例如0001010101)并且想要重新格式化字符串以用字母替换每个字符串的最后两个字符,其中01是A,依此类推,最多26个是Z是什么在Perl中执行此操作的方法是什么?

示例文件内容:

0109150103,1807111225,0305102306

输出将是:

01091501C,18071112Y,03051023F

假设我将字符串拆分为数组,然后评估每个数字以查看带有substr的最后2位数字并替换为相应的字母.想知道什么是最有效的方法来做这个恶看,看看01然后设置为A,依此类推.

我会做的蛮力方式如下:

$data=<file.txt>;
@tokens=split /,/,$data;
while(@tokens)
{
 print substr($_,7)."A," if(substr($_,8,2)=='01');
 print substr($_,7)."B,2)=='02');
#.
#.
 print substr($_,7)."Z,2)=='26');
}

解决方法

可以使用 chr

echo "0109150103,0305102306" | 
    perl -wnE'@t = split /,/; s/(..)$/chr(64+$1)/e for @t; say for @t'

其中/ e修饰符使正则表达式中的替换部分被评估为代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读