找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 13750|回复: 0

[原创代码] [perl][文本处理]追加列元素并自动对齐

[复制链接]
发表于 2017-10-19 18:07:02 | 显示全部楼层 |阅读模式
本帖最后由 523066680 于 2017-10-19 18:28 编辑

(Perl区没有话题也要水一个)

可以这样写:
  1. use List::Util qw/max/;
  2. my $newstr = "T";
  3. my @lines  = <DATA>;
  4. my $maxlen = max map { $_=~s/\r?\n$//;length($_) } @lines;
  5. grep { printf "%-${maxlen}s    %s\n", $_, $newstr } @lines;

  6. __DATA__
  7. B    B    B    B
  8. B    B    B
  9. B    B
  10. B
复制代码
如果要尽量接近口语描述的话:
  1. use List::Util qw/max/;

  2. sub get_each_line { (<DATA>) }
  3. sub get_each_len_of { map { $_=~s/\r?\n$//; length($_) } @_ }
  4. sub print_each_of { grep { printf "%-${_[2]}s    %s\n", $_, $_[4] } @{$_[0]}; }

  5. $newstr = "T";
  6. my @lines = get_each_line;
  7. my $max   = max get_each_len_of @lines;
  8. print_each_of \@lines, set_length => $max, append => $newstr;

  9. __DATA__
  10. B    B    B    B
  11. B    B    B
  12. B    B
  13. B
复制代码
  1. B    B    B    B    T
  2. B    B    B         T
  3. B    B              T
  4. B                   T
复制代码

评分

参与人数 2技术 +2 收起 理由
老刘1号 + 1 感谢分享
happy886rr + 1 优雅

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:46 , Processed in 0.011316 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表