免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7268 | 回复: 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 赞一个!

查看全部评分

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

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP