【问题标题】:Perl Open multiple files and write to a single file side by sidePerl 打开多个文件并并排写入单个文件
【发布时间】:2013-02-19 22:17:53
【问题描述】:

我在 windows 中运行一个 Perl 脚本,它创建了多个包含一些信息的文本文件。我想要一些关于 Perl 脚本的帮助,以便将所有文本文件数据并排放入一个文件中。我知道我可以使用嵌套的foreach 循环来解析每个文件并并排打印它们。但是文件的数量会有所不同。 例如:

输入:

file1.txt:

AAA
BBB
CCC

file2.txt:

DDD
EEE
FFF

输出:

AAA  DDD
BBB  EEE
CCC  FFF

提前致谢

【问题讨论】:

    标签: windows perl concatenation


    【解决方案1】:

    Linux 工具 paste 也提供此功能,如果您没有设置滚动您自己的 perl 脚本。

    【讨论】:

      【解决方案2】:

      怎么样:

      open my $fh, ">", "concat.txt" or die $!;
      my $string = qx(
          @echo off;
          type %*.txt;
      );
      print $fh $string;
      

      ?

      【讨论】:

        【解决方案3】:

        应该这样做。

        use strict;
        use warnings;
        use IO::File;
        
        my @files = (q[a.txt], q[b.txt]);
        
        my @fhs = ();
        
        foreach my $file (@files)
        {
            my $fh = new IO::File $file, O_RDONLY;
            push @fhs, $fh if defined $fh;
        }
        
        while(1)
        {
            my @lines = map { $_->getline } @fhs;
        
            last if grep { not defined $_ } @lines[0..(@fhs-1)];
        
            print join(qq[\t], map { s/[\r?\n]+/ /g; $_ } @lines) . qq[\r\n];
        }
        
        map { $_->close } @fhs;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-29
          • 2015-05-23
          相关资源
          最近更新 更多