简体   繁体   English

Perl:如何分割文件

[英]Perl: How to split a file

I have a text file that I want to split into multiple text files using perl and output 我有一个文本文件,我想使用perl和输出拆分成多个文本文件

For example: 例如:

The data starts off with: 数据开始于:

[TABLE]

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

[/TABLE]

[PAGE]

[TABLE]

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

[/TABLE]

Desired Output: 所需输出:

File1.txt FILE1.TXT

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

File2.txt FILE2.TXT

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

So basically anything in between [TABLE] & [/TABLE] should be a new text file and so forth. 因此,基本上[TABLE][/TABLE]之间的任何内容都应该是新的文本文件,依此类推。 And the naming convention for the new text files can be File1.txt, File2.txt, etc… 新文本文件的命名约定可以是File1.txt,File2.txt等。

Please point me in the right direction. 请指出正确的方向。

Thanks for all your help. 感谢你的帮助。

 #!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++;

}  

How is this, 这怎么样,

#!/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]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM