2

perl を使用して複数のテキスト ファイルに分割し、出力したいテキスト ファイルがあります。

例えば:

データは次のように始まります。

[TABLE]

DATA........
DATA........

[/TABLE]

[PAGE]

[TABLE]

DATA........
DATA........

[/TABLE]

望ましい出力:

File1.txt

DATA........
DATA........

File2.txt

DATA........
DATA........

したがって、基本的に[TABLE]&の間にあるもの[/TABLE]はすべて、新しいテキスト ファイルなどになります。また、新しいテキスト ファイルの命名規則は、File1.txt、File2.txt などになります。

私を正しい方向に向けてください。

ご助力いただきありがとうございます。

 #!usr/bin/perl
 my $fi, $fi2;
 my $line;
 my $i;
 my @lines;
 my @filenameparts;
 my $filename = "file1.txt";

 open($fi, "< complex.txt");
 @lines = <$fi>;
 open ($fi2, " > $filename");

 foreach (@lines)
 {
    if (($i > 0) and $_ =~ /[TABLE]/)
 {
            @filenameparts = split("_", $filename);
            foreach (@filenameparts)
            {

             print "-----------------------------\n";
             print .$_;
             print "-----------------------------\n";               
            }
            @filenameparts[1] = substr(@filenameparts[1], 0,            @filenameparts[1].length() - 5);
            @filenameparts[1] = ($filenameparts[1] + 1);
            $filename = @filenameparts[0]."_".@filenameparts[1].".txt";
            print $filename;
            close($fi2);
            open ($fi2, " > $filename");
            $i = 0;
            print $fi2 $_;

    }
    else
    {
         print $fi2 $_;
    }
    $i++;

}  
4

1 に答える 1

1

これはどのように、

#!/usr/bin/env perl
use strict;
use warnings;
use feature ':5.10';
while ( defined( my $_ = <DATA> ) ) {

  my ( $start_tag, $end_tag );
  if ( index($_,'[TABLE]') != -1 ) {
    $start_tag = 1;
  }
  elsif ( index($_,'[/TABLE]') != -1 ) {
    $end_tag = 1;
  }

  if ( $start_tag .. $end_tag ) {
    state $fileno //= 1;
    state $fh_gen = sub {
      state $fh;
      return $fh if defined $fh;
      open ( $fh, '>', "file_$fileno.txt" ) or die $!;
      $fh;
    };

    if ( $start_tag ) {}
    elsif ( $end_tag ) {
      $fileno++;
      $fh_gen = sub {
        state $fh;
        return $fh if defined $fh;
        open ( $fh, '>', "file_$fileno.txt" ) or die $!;
        $fh;
      };
    }
    else {
      my $fh = $fh_gen->();
      print $fh $_;
    }

  }

}

__DATA__

[TABLE]

DATA........
DATA........

[/TABLE]

[PAGE]

[TABLE]

DATA........
DATA........

[/TABLE]
于 2013-03-08T23:55:36.263 に答える