免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 39031 | 回复: 1

如何实现叠加输出? [复制链接]

论坛徽章:
0
发表于 2019-09-26 09:04 |显示全部楼层
本帖最后由 nanshanjin 于 2019-09-26 10:32 编辑

如题,现有文件如下:
D a        
P b
C c
O d
F e
G f
S g
G i
S j
G k
S l
D m
P n
...
...

\t分隔
输出为
D_a
D_a; P_b
D_a; P_b;C_c
D_a; P_b;C_c;O_d
D_a; P_b;C_c;O_d;F_e
D_a; P_b;C_c;O_d;F_e;G_f
D_a; P_b;C_c;O_d;F_e;G_f;S_g
D_a; P_b;C_c;O_d;F_e;G_i
D_a; P_b;C_c;O_d;F_e;G_i;S_j
G和S之前叠加输出,然后每个D、P之间循环,有大神知道如何实现吗?

论坛徽章:
0
发表于 2019-11-21 14:38 |显示全部楼层
  1. #!/usr/bin/perl

  2. use strict;

  3. my $string = '';
  4. my $string_temp = '';
  5. while (<DATA>) {
  6.          chomp;
  7.          my ($l1,$l2) = split /\s+/;
  8.          if ($l1 =~ /D/i) {
  9.                  $string = "$l1\_$l2";
  10.                  print "$string\n";
  11.          }
  12.          elsif ($l1 =~ /G/i) {
  13.                  $string_temp = "$string; $l1\_$l2";
  14.                  print "$string_temp\n";
  15.          }
  16.          elsif ($l1 =~ /S/i) {
  17.                  $string_temp .= "; $l1\_$l2";
  18.                  print "$string_temp\n";
  19.          }
  20.          else {
  21.                  $string .= "; $l1\_$l2";
  22.                  print "$string\n";
  23.          }
  24. }
  25. <>;

  26. __DATA__
  27. D a
  28. P b
  29. C c
  30. O d
  31. F e
  32. G f
  33. S g
  34. G i
  35. S j
  36. G k
  37. S l
  38. D m
  39. P n
  40. C c
  41. O d
  42. F e
  43. G f
  44. S g
  45. G i
  46. S j
  47. G k
  48. S l
复制代码

评分

参与人数 1可用积分 +10 收起 理由
飘絮絮絮丶 + 10 赞一个!

查看全部评分

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP