1

こんにちは私は2つのファイル(単語を含む)を取り、すべての可能な組み合わせのためにそれらを結合するperlスクリプトを作成しようとしています。

例えば。

次を含むファイル1:

  make 
  move

次を含むファイル2:

   on
   out

出力ファイルは次のようになります。

   makeon
   makeout
   moveon
   moveout

理想的には、ファイルの順序を逆にしたIEがあると便利です。

onmove outmove onmake outmake

以下は私が試したいくつかのことですが、私は初心者であり、出力を正しく取得することはできません

! /usr/bin/perl



open (OUT, '> output.txt');

use strict;

use warnings;

use Data::Dump qw(dump);

my @in = qw(aaa bbb ccc ddd);

my @list;

while(my $first = shift @in) {

        last unless @in;
        my $rest = join'\n', @in;
        push @list, glob("{$first}{$rest}");
}
        dump @list;




# Some other attempts


my @karray;

my @sarray;

my @testarr = (@sarray)+@karray;

my $stemplate = "test1.txt";

my $ktemplate = "test2.txt";

my $outtemplate = "output.txt";

sub pushf2a {

  open(IN, "<$_[0]") || die;

  while (<IN>) {

    if ($_[0] eq $stemplate) {

      push (@sarray,@karray,$_);

    } else {

      push (@karray,@sarray,$_);
    }

  }

  close(IN) || die  $!;

}

&pushf2a($stemplate, @sarray);

&pushf2a($ktemplate, @karray);

print OUT @sarray, @karray;

print OUT @list;

close (OUT);
4

1 に答える 1

0

もっとスマートな方法があるかもしれませんが、これは簡単です:

#!/usr/bin/env perl
use Tie::File;
use strict;
use warnings;

tie my @a, 'Tie::File', $ARGV[0] or die "$ARGV[0]: $!\n";
tie my @b, 'Tie::File', $ARGV[1] or die "$ARGV[1]: $!\n";
foreach my $w( @b ) { print "$w$_\n" foreach( @a )}

2 つの入力ファイルを引数としてこのスクリプトを呼び出します。たとえば、上記を「combine」という名前のファイルに入れて実行可能にすると、次のようになります。

./combine file1.txt file2.txt
于 2013-03-10T20:42:50.697 に答える