首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Perl中从单个源生成两个文件?

如何在Perl中从单个源生成两个文件?
EN

Stack Overflow用户
提问于 2013-12-21 04:25:06
回答 3查看 94关注 0票数 3

这是一个similiar question。我有这个源文件,我想把蓝色记录在blue.out和绿色记录在green.out中。我从这里要去哪里?

代码语言:javascript
运行
复制
Blue 1-3
a
b
Green 1-3
d
e
Blue 4-6
i
j
Blue 7-9
m
n
Green 4-6
p
q
Green 7-9
s
t

需要输出两个文件blue.outgreen.out

代码语言:javascript
运行
复制
blue.out           green.out
------------------------------
a                  d   
b                  e   
i                  p
j                  q
m                  s
n                  t

这是我的密码

代码语言:javascript
运行
复制
use strict;
use warnings; 
my $blue = 'Blue';
my $green= 'Green';

while (<>) {
    if (/$blue/) {
        open(BLUEOUT,">>blue.out");
    print BLUEOUT $_ ;
}
    if (/$green/) {
        open(GREENOUT,">>green.out");
    print GREENOUT $_ ;
}
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-21 04:36:16

代码语言:javascript
运行
复制
open my $blue,  ">", "blue.out"  or die "could not open output file blue.out: $?";
open my $green, ">", "green.out" or die "could not open output file green.out: $?";

my $curr = undef;

while (<>) 
{
    if (/Blue/)  { $curr = $blue;  next; }
    if (/Green/) { $curr = $green; next; }
    print $curr $_ if defined $curr;
}

close $blue;
close $green;
票数 4
EN

Stack Overflow用户

发布于 2013-12-21 04:38:07

最好在循环之前打开文件。也可能最好使用词法文件句柄。然后,您可以使用“绿色”和“蓝色”行在文件句柄之间切换,同时跳过该行,否则打印到当前文件。

代码语言:javascript
运行
复制
open my $green, '>', "green.out" or die;
open my $blue,  '>', "blue.out"  or die;

my $output;

while (<>)
{
    if (m/^Green/) { $output = $green; next; }
    if (m/^Blue/)  { $output = $blue;  next; }
    die "No colour specified yet" if !defined $output;
    print $output $_;  # NB: no comma!
}

警告:未经测试的代码!

票数 3
EN

Stack Overflow用户

发布于 2013-12-21 04:40:51

以下是另一个选择:

代码语言:javascript
运行
复制
use strict;
use warnings;

my ( $file, %fh );
while (<>) {
    if (/^([A-Z][a-z]+.+?)(?=\s+\d+-\d+$)/) {
        $file = lc $1;
        open $fh{$file}, '>', $file . '.out' or die
          if !exists $fh{$file};
    }
    else {
        print { $fh{$file} } $_;
    }
}

这将捕获文件名的颜色名称,并将这些颜色下面的字母写入这些文件。这避免了对颜色和文件名进行“硬编码”。

希望这能有所帮助!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20715381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档