2

我有一个文本文件,我想使用 perl 将其拆分为多个文本文件并输出

例如:

数据开始于:

[TABLE]

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

[/TABLE]

[PAGE]

[TABLE]

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

[/TABLE]

期望的输出:

文件1.txt

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

文件2.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 回答