Subscribed unsubscribe Subscribe Subscribe

65535行ごとにファイルを分割する

実験とかで生成したCSVファイルが65535行超えてexcel2003で開けないことがしばしばあるので。

#!perl
use strict;

$ARGV[1] = 65535 unless $ARGV[1]; #第2引数を省略すると65535行ごとの分割に
my $maxcol = pop @ARGV;
my $output = $ARGV[0];
my $filecount = 1;
my $colcount;

$output  =~ s/(\.\w+$)/$filecount$1/;
open OUTPUT,"> $output"
  or die "can't create file:$!";

while(<>){
  print OUTPUT $_;
  $colcount++;
  if ($colcount >= $maxcol){
    $colcount = 0;
    close OUTPUT;
    $output =~ m/($filecount)\./;
    $filecount ++;
    $output =~ s/$1(\.\w+$)/$filecount$1/;
    open OUTPUT,"> $output"
      or die "can't create file:$!";
  }
}


perl便利すなあ。
インターンまでにダイアリー市民になる!と意気込んでいたけどどう見ても間に合いません。